2014-12-15 2 views
0

PHP (< 5.4)를 지원하는 웹 응용 프로그램의 (임시) 버전을 만들고 싶습니다. 모든 짧은 배열 구문을 long으로 변환해야합니다. 하나.여러 파일에서 php []를 array() 구문으로 변환

PHP Catchable fatal error: Argument 1 passed to processTree() must be 
an instance of Pharborist\TopNode, instance of Pharborist\RootNode 
given 
: -

이 스크립트 "새로운 구"의 많음, 그러나 "이전에 새로운"유일한 하나이 될 것으로 보인다 내가 그것을 실행하려고 할 때 그러나, https://github.com/slang800/php-array-syntax-converter, 그것은 나에게 다음과 같은 오류를 준

바라건대, 누군가가 비슷한 경험을했고 올바른 방향으로 나를 가리킬 수 있습니다.

감사합니다.

+0

[github의 문제] (https://github.com/grom358/pharborist/issues/175)에서 , 간단히'TopNode'를'RootNode'로 바꾸거나 더 일반적인'NamespaceNode' 타입 힌트를 사용하십시오. –

+0

맞아요. 오류가 수정되었지만 내 코드에는 아무런 변화도 없습니다. 스크립트에 다른 문제가 있다고 가정합니다. – pimmey

답변

0

내가 너라면 나 자신 만의 스크립트를 작성하기 때문에 지금 사용하고있는 스크립트에 대한 수정 사항이 작성 될 때까지 기다릴 필요가 없습니다. 교체 할 대상을 찾기가 정말 어렵지 않습니다. 이 표현의 일부인 $var[$idx] (배열의 색인에 액세스하거나 배열에 넣기 : $var[] =) 이외의 모든 패턴입니다. 이 정규식이 아직 완료되지 않았

$pattern = '/(=>?|,|\[|\()\s*\[([^]]+)\](?!\s*=)/'; 
$script = file_get_contents('path/to/file.php'); 
$rewritten = preg_replace(
    $pattern, 
    '$1 array($2)', 
    $script 
); 
//only AFTER you've checked the output, of course! 
file_put_contents('path/to/file.php', $rewritten); 

참고 :

내 머리 위로 떨어져

, 나는 기본적으로 그냥이 작업을 수행 스크립트를 써서이 중첩 배열에 대처할 수 없다 like :

$x = [ $y[1] => [1, 2, 3]]; 

그러나 Play around with it here까지 작동합니다. preg_match_all을 다른 패턴으로 사용하고 중첩 된 배열을 포함하는 전체 표현식을 일치 시키며 별도로 교체해야하는 것을 대체하는 것이 유용 할 수 있습니다. 그건 네 인생을 훨씬 편하게 해줄거야. 나는 생각한다.

관련 문제