public function __construct()
 {
     $this->sourcesArr = Sources::getUserInput();
 }
Пример #2
0
 /**
  * 给定一个节点,返回该节点对应string name
  * @param Node $node
  * @return base node name string
  */
 public static function getNodeStringName($node)
 {
     if (!$node instanceof Node) {
         return null;
     }
     $type = $node->getType();
     switch ($type) {
         case "Expr_Variable":
         case "Scalar_String":
         case "Scalar_LNumber":
         case "Scalar_DNumber":
             if ($node->name) {
                 return $node->name;
             }
             $names = $node->getSubNodeNames();
             foreach ($names as $name) {
                 return $node->{$name};
             }
             break;
             //负数
         //负数
         case "Expr_UnaryMinus":
             $names = $node->getSubNodeNames();
             //print_r($node->getSubNodeNames());
             foreach ($names as $name) {
                 return "-" . NodeUtils::getNodeStringName($node->{$name});
             }
             break;
             //arg name
         //arg name
         case "Arg":
             return NodeUtils::getNodeStringName($node->value);
             break;
             //param name
         //param name
         case "Param":
             return $node->name;
             break;
         case "Name":
             $names = $node->getSubNodeNames();
             //print_r($node->getSubNodeNames());
             foreach ($names as $name) {
                 foreach ($node->{$name} as $parts) {
                     return $parts;
                 }
             }
             break;
             //$a[],$[a]$a[]][]
         //$a[],$[a]$a[]][]
         case "Expr_ArrayDimFetch":
             //处理GLOBALS
             if ($node->var->name == "GLOBALS") {
                 return $node->dim->value;
             }
             //不处理_GET _POST等
             $userInput = Sources::getUserInput();
             if (in_array($node->var->name, $userInput)) {
                 return $node->var->name;
             }
             $names = $node->getSubNodeNames();
             $temp = "";
             foreach ($names as $name) {
                 if ($name == "dim") {
                     if ($node->{$name}) {
                         $temp .= "[" . NodeUtils::getNodeStringName($node->{$name}) . "]";
                     } else {
                         $temp .= "[]";
                     }
                 } else {
                     $temp .= NodeUtils::getNodeStringName($node->{$name});
                 }
             }
             return $temp;
             break;
             //数组dim
         //数组dim
         case "Expr_ConstFetch":
             $names = $node->getSubNodeNames();
             //print_r($names);
             foreach ($names as $name) {
                 return NodeUtils::getNodeStringName($node->{$name});
             }
             break;
             //$this->property对象属性
         //$this->property对象属性
         case "Expr_PropertyFetch":
             $names = $node->getSubNodeNames();
             $ret = '';
             foreach ($names as $name) {
                 $ret .= NodeUtils::getNodeStringName($node->{$name}) . ":";
             }
             $ret .= $node->name;
             return $ret;
             break;
         default:
             break;
     }
     return "";
 }