Skip to content

Instantly share code, notes, and snippets.

@mikeschinkel
Created February 13, 2020 03:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikeschinkel/78684d708358e1d101e319c7a2fdef9c to your computer and use it in GitHub Desktop.
Save mikeschinkel/78684d708358e1d101e319c7a2fdef9c to your computer and use it in GitHub Desktop.
A hypothetical ::meta for PHP symbols and variables that would provided a streamlined reflect
<?php
namespace Acme;
class Foo {
private const XYZ = 123;
public $bar = 'hello';
function baz():int { return 0; }
}
echo Foo::meta->type->name; // object
echo Foo::meta->class->name; // \Acme\Foo
echo Foo::meta->class->shortName; // Foo
echo Foo::meta->namespace->name; // \Acme
echo Foo::XYZ::meta->name; // \Acme\Foo::XYZ
echo Foo::XYZ::meta->keyword->name; // const
$constant = Foo::meta->constants[0];
echo $constant->name; // \Acme\Foo::XYZ
echo $constant->vibility->name; // private
echo $constant->value; // 123
$property = Foo::meta->properties[0];
echo $property->name; // Foo->bar
echo $property->vibility->name; // public
echo $property->value; // hello
$method = Foo::meta->methods[0];
echo $method->name; // \Acme\Foo->baz
echo $method->type->name; // int
echo $method->keyword->name; // function
echo get_class( Foo::meta ); // meta
echo get_class( Foo::meta->class::meta ); // meta
echo get_class( Foo::meta->namespace::meta ); // meta
echo get_class( Foo::XYZ::meta->keyword ); // meta
echo get_class( $constant ); // meta
echo get_class( $property ); // meta
echo get_class( $method ); // meta
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment