0

プロジェクトでPHP-Parserを使用しています。PHPUnitassertEquals関数を使用して、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"

4

3 に答える 3