プロジェクトでPHP-Parserを使用しています。PHPUnit
のassertEquals
関数を使用して、2 つのノードを比較したいと思います。
ノードは同じですが、偽の結果が得られます。その理由は、ノードの 1 つに 2 つの保護された属性が含まれており、もう 1 つのノードには含まれていないためです。
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
保護された属性を除いたノードを比較することはできますか?
サンプルデータ
最初のオブジェクト:
array(1) {
[0]=>
object(PhpParser\Node\Stmt\Expression)#5924 (2) {
["expr"]=>
object(PhpParser\Node\Expr\Assign)#5923 (3) {
["var"]=>
object(PhpParser\Node\Expr\Variable)#5918 (2) {
["name"]=>
string(1) "x"
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["expr"]=>
object(PhpParser\Node\Expr\ArrayDimFetch)#5922 (3) {
["var"]=>
object(PhpParser\Node\Expr\Variable)#5919 (2) {
["name"]=>
string(3) "arr"
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["dim"]=>
object(PhpParser\Node\Scalar\String_)#5934 (2) {
["value"]=>
string(3) "FOO"
["attributes":protected]=>
array(0) {
}
}
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
}
2 番目のオブジェクト:
array(1) {
[0]=>
object(PhpParser\Node\Stmt\Expression)#5930 (2) {
["expr"]=>
object(PhpParser\Node\Expr\Assign)#5929 (3) {
["var"]=>
object(PhpParser\Node\Expr\Variable)#250 (2) {
["name"]=>
string(1) "x"
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["expr"]=>
object(PhpParser\Node\Expr\ArrayDimFetch)#5928 (3) {
["var"]=>
object(PhpParser\Node\Expr\Variable)#5926 (2) {
["name"]=>
string(3) "arr"
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["dim"]=>
object(PhpParser\Node\Scalar\String_)#5927 (2) {
["value"]=>
string(3) "FOO"
["attributes":protected]=>
array(3) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
["kind"]=>
int(1)
}
}
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
["attributes":protected]=>
array(2) {
["startLine"]=>
int(2)
["endLine"]=>
int(2)
}
}
}
PhpParser\Node\Scalar\String_
のオブジェクトに注意してください["value"]=> string(3) "FOO"