2016-06-16 2 views
-2

global $var;을 사용하는 변수에 대해 전역 범위를 정의하지 않고 서버에서 작동하지만 내 로컬 시스템에서는 작동하지 않는 PHP 시스템이 있습니다.

PHP의 범위 규칙에서 변경 되었습니까? 아니면이를 허용하는 설정이 있습니까? 내 로컬 시스템은 PHP 5.5.36을 실행 중이며 서버가 실행중인 버전을 알지 못합니다.

편집 : 추가 코드 샘플은

이 실행하는 서버에서이 지역 PHP에서 작동

include_once("common.inc.php"); // this defines $physical_path 

class Admin extends AdminData 
{ 
    function Admin($admin_auth_id='') { 
     include_once($physical_path['DB_Access']. 'SubadminCommittee.php'); 
     // many more lines of code follow 
    } 
} 

에서 작동 5.5.36

include_once("common.inc.php"); // this defines $physical_path 

class Admin extends AdminData 
{ 
    function Admin($admin_auth_id='') { 
     global $physical_path; // why is this line not needed on server? 
     include_once($physical_path['DB_Access']. 'SubadminCommittee.php'); 
     // many more lines of code follow 
    } 
} 
+2

코드 샘플을 참조하십시오. 우리는 애매한 묘사에 기초하여 이것에 관해 아무 것도 말할 수 없습니다. – deceze

+0

@deceze 불행히도 코드 예제를 추가했습니다. 서버에서이 코드를 재현 할 수 없으며 간단한 예제를 만들 수있는 곳이 없습니다. 나는이 시스템을 만들지 않았다. –

답변

1

변수 $physical_path 것이다 하지global없이 기능 내에서 사용할 수 있습니다. 이것은 PHP 버전이나 그 종류의 차이가 아니며, PHP 버전간에 차이가없는 범위 지정의 사실입니다.

$physical_path['DB_Access']null으로 평가되며 무시한다는 경고가 표시됩니다.

include_once('SubadminCommittee.php'); 

을 그리고이 상대 경로 조회 인해 현재 작업 디렉토리가 어떻게 스크립트가 호출되고 있으며 무엇을 서버에서 작동하십시오 include_once 라인 그러므로 단지로 평가합니다. 로컬 서버에서는 작업 디렉토리가 다르거 나 PHP의 PATH 값이 다르게 설정되어 있기 때문에이 방법이 작동하지 않습니다.

+0

서버에서 테스트 클래스를 설정하고 $ physical_path 변수가 null인지 확인했습니다. 예상대로 이 변수는 다른 많은 것들에 사용되므로 전역 변수를 추가하거나 팩토리 또는 단일 변수로 대체해야합니다. –

+1

'global'을 사용하지 않아야합니다. 대신에, 의존성은 모든 클래스의 생성자에 값을 주입합니다. – deceze

+0

나는 전역 var에서 거대한 데이터 배열 이외의 것을 사용했을 것이다. 그러나 이것은 오래된 PHP 방법이다. 아마 논쟁으로 전달하거나 싱글 톤을 제공했거나 Symfony를 사용하여 시스템을 구축하고 DI를 수행하게했을 것입니다. –

관련 문제