我解析了代码,结果(AST)的一部分是这样的数组:
Array (
[0] => PhpParser\Node\Stmt\Class_ Object
(
[flags] => 0
[implements] => Array
(
)
[name] => Test
[stmts] => Array
(
[0] => PhpParser\Node\Stmt\ClassMethod Object
( ...
现在我要提取上述数组的每个路径。我使用以下解决方案:
function backKeyPaths($tree){
$paths = array();
foreach ($tree as $key => &$mixed) {
if (is_array($mixed)) {
$results = backKeyPaths($mixed);
foreach ($results as $k => &$v) {
$paths[] = array($key => $v);
}
unset($results);
}
elseif (is_object($mixed)) {
$results = backKeyPaths($mixed);
foreach ($results as $k => &$v) {
$paths[] = array($key => (object) $v);
}
unset($results);
}
else {
$paths[] = array($key => $mixed);
}
}
return $paths;}
实际所需的输出应如下所示:
[0] => PhpParser\Node\Stmt\Class_ Object
(
[flags] => 0
)
[1] => PhpParser\Node\Stmt\Class_ Object
(
[implements] => Array
(
)
)
[2] => PhpParser\Node\Stmt\Class_ Object
(
[name] => Test
)
[3] => PhpParser\Node\Stmt\Class_ Object
(
[stmts] => Array
(
[0] => PhpParser\Node\Stmt\ClassMethod Object
( ...
) ...
但是我的解决方案没有返回正确的对象类,而是将所有对象都视为StdClass对象。有什么方法可以通过保持值的类型将对象转换为正确的对象或提取路径吗?