11<?php namespace lang \meta ;
22
3+ use ReflectionClass ;
34use lang \IllegalAccessException ;
45use lang \ast \nodes \{Literal , Variable };
56use lang \ast \{Visitor , Type };
@@ -76,7 +77,7 @@ public function array($self) {
7677 * @return var
7778 */
7879 public function new ($ self ) {
79- $ c = new \ ReflectionClass ($ this ->resolve ($ self ->type ));
80+ $ c = new ReflectionClass ($ this ->resolve ($ self ->type ));
8081 $ arguments = [];
8182 foreach ($ self ->arguments as $ key => $ node ) {
8283 $ arguments [$ key ]= $ node ->visit ($ this );
@@ -93,16 +94,13 @@ public function new($self) {
9394 public function scope ($ self ) {
9495 $ c = $ this ->resolve ($ self ->type );
9596
96- // Use PHP reflection API to access members' runtime values. We cannot use
97- // getStaticPropertyValue() as it cannot get non-public members in PHP 7.0
97+ // Use PHP reflection API to access members' runtime values
9898 if ($ self ->member instanceof Variable) {
99- $ p = (new \ReflectionClass ($ c ))->getProperty ($ self ->member ->pointer ?? $ self ->member ->name );
100- $ p ->setAccessible (true );
101- return $ p ->getValue ();
99+ return (new ReflectionClass ($ c ))->getStaticPropertyValue ($ self ->member ->pointer ?? $ self ->member ->name );
102100 } else if ($ self ->member instanceof Literal) {
103101 return 'class ' === $ self ->member ->expression
104102 ? substr ($ c , 1 )
105- : (new \ ReflectionClass ($ c ))->getConstant ($ self ->member ->expression )
103+ : (new ReflectionClass ($ c ))->getConstant ($ self ->member ->expression )
106104 ;
107105 } else {
108106 throw new IllegalAccessException ('Cannot resolve ' .$ type ->name .':: ' .$ self ->member ->kind );
0 commit comments