Zend2 MVC 프레임 워크에서 레거시 응용 프로그램을 래핑하려고합니다. Zend Skeleton Application 및 코드 샘플 (특히 https://github.com/maglnet/MaglLegacyApplication) 덕분에 대부분의 문제점을 해결했습니다.Zend 2 가져 오기 및 전역 네임 스페이스
나는 다음 "기존의"파일에 의해 설명되어 해결할 수되지 않은 하나의 큰 문제 :
<?php
$test = "test";
function echo_test(){
global $test;
echo "test = ";
var_dump($test); # Makes NULL explicit
}
echo_test();
ZF2 모듈에 대한 컨트롤러에서, 나는 등 사용의 출력을 캡처
...
chdir($filePath) # Fixes relative includes
ob_start();
include $filePathAndName;
$output = ob_get_clean();
$response->setContent($output);
return $response;
을 ... 그리고 내가 다시 test = NULL
를 얻을 : 출력 버퍼는 응답 객체로 그 스틱.
저는 ZF2 네임 스페이스가 레거시 파일에 문제를 일으킬 수 있고 그 이유를 분명히 알기 위해 노력했다고 경고했습니다. PHP 가이드, "Without any namespace definition, all class and function definitions are placed into the global space"에 따르면. 실제로, 나의 견본은이 진술 아래에 열거 된 것보다 약간 더 복잡합니다 ... 그러나 그것은 효과가없는 것처럼 보입니다.
나는 연구를 계속하고 마침내이 접근법이 "will import the contents of the include file into the method scope, not the class scope"임을 발견했습니다.
메서드 범위 밖에서 파일을 처리 할 수있는 방법이 있습니까?
넵 (를 해결할 수 있음). 그것이 마침내 도달 한 동일한 결론입니다. 어느 시점에 전역 범위에서 액세스되는 거의 700 개의 고유 변수가 있습니다. 끔찍한 일이지만, grep, 중복 제거, 그리고 글로벌화가 빠릅니다. – claytond