public function __construct() { $this->sourcesArr = Sources::getUserInput(); }
/** * 给定一个节点,返回该节点对应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 ""; }