2017-01-24 12 views
-2

다음 두 조각은 두 개의 별도 기계에서 작동합니다.
두 기계 모두 php5.5.x (x가 무엇인지 확실하지 않음)입니다.
하나의 컴퓨터에서만 하나의 작업과 두 컴퓨터에서 모두 작동합니다 (use 인 작업).
두 번째 버전에서는 **use** 키워드를 사용합니다. 슬프게도 PHP 설정을 확인하기 위해 해당 컴퓨터에 대한 명령 줄 액세스 권한이 없습니다.
버전 하나클로저에서 변수가 바인딩되는 방법을 제어하는 ​​PHP 설정이란 무엇입니까?

$a = 1; 
$b = function(){ 
    echo $a; 
}; 
$b(); 

버전이 : 첫 번째 폐쇄 변수 범위 문제가 발생한

$a = 1; 
$b = function() use($a){ 
    echo $a; 
}; 
$b(); 
+1

음 .. 그 담당자와 나는 2 대의 기계에서 어떤 것이 작동하는지, 어떤 기계가 실제로 작동하지 않는지, 그리고 실제로는 _work_ 및 _work_not가 의미하는 바를 기대할 것입니다. 또한 PHP 버전입니까? – AbraCadaver

+3

첫 번째 버전은 작동하지 않을 수 있습니다. * Notice : 정의되지 않은 변수 : * * – ShiraNai7

+1

https://3v4l.org/il0GJ 너트 – nogad

답변

0

$a가 폐쇄 내부에 존재하지 않습니다.

  1. global $a 클로저 내부를 정의하여 해결할 수 있습니다.
  2. 두 번째 예의 경우와 마찬가지로 use 키워드를 사용하십시오. PHP 버전에서만 사용할 수
    • >= 5.3
  3. 사용 인수 대신
    • echo (function($a){ echo $a; })("test");
당신은 당신의 첫번째 폐쇄가 작동하지 말아야 이유를 오류보고를 활성화해야합니다

처음에는

ini_set("display_errors", 1); 
error_reporting(-1); 

$a = 1; 
$b = function(){ 
    echo $a; // Notice: Undefined variable: a in /path/to/script.php on line # 
}; 
$b(); 

두 호스트가 모두 PHP 5.5를 실행 중이면 출력이 동일해야합니다. 1은 알림 메시지를 표시하지 않고 다른 메시지는 표시하지 않을 수 있습니다. 그런 경우, 당신이 찾고해야 INI 설정은 다음과 같습니다

error_reporting 
display_errors 

그리고 위와 같이 error_reporting(-1)ini_set('error_reporting', E_ALL | E_STRICT)

에 대한 간단한 바로 가기이고, 당신은 단순히 ini_set()를 사용하여 스크립트 실행시에 이러한 설정을 변경할 수 있습니다
+0

나는 php 설정이 포함되어 있는지 알아 내려고 노력하고있다. 예제에서 썼 듯이, 두 머신 모두에서'use'가있는 것이 사용되었습니다. –

+0

@ ItayMoav-Malimovka 주요 PHP 버전 관리 만 차이가 있습니다 * 설정 * 설정이 없습니다. 다양한 범위 문제가 발생했습니다. '$ a'는 첫 번째 예제에서 함수의 지역 범위에 존재하지 않습니다. – Xorifelse

+0

내가 명확하지 않으면 죄송합니다. 두 버전 모두 작동합니다. 다른 컴퓨터에서. 두 기계는 PHP 5.5.x (나는 .9이고 .1은 .21이지만, 확신 할 수 없다고 생각합니다) –