문제

function t1()
{
  echo 1;
}
function t2()
{ 
  echo 2;
}

$funcs = array(t1,t2);

$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}

이 작은 PHP 파일을 실행할 때 :

PHP 통지 : 정의되지 않은 상수 T1의 사용 -D : jobirn test str.php에서 'T1'가정 11 행

PHP 통지 : 정의되지 않은 상수 T2의 사용 -D : jobirn test str.php에서 'T2'가정 11 행

그 통지를 어떻게 제거 할 수 있습니까? 12

도움이 되었습니까?

해결책

PHP는 기능을 일류 객체로 취급하지 않기 때문에 통지를받습니다. 당신이 할 때

$functions = array(t1, t2);

PHP 엔진은 T1 및 T2를보고 상수로 해결하려고하지만 T1/T2라는 상수를 찾을 수 없기 때문에 배열 ( 'T1', 'T2')을 입력하려는 "가정"; var_dump ($ functions)를 수행하면 배열의 항목이 문자열임을 알 수 있습니다.

문자열을 함수로 호출하려고 할 때

$functions[0]()

PHP는 문자열과 동일한 이름의 함수를 찾습니다. 나는 이것을 함수 포인터로 문자열을 사용하는 것으로 부르지 않을 것입니다. 이것은 반사를 사용하는 것과 비슷합니다. PHP는 이것을 "가변 함수"라고 부릅니다.

http://hu2.php.net/manual/functions.variable-functions.php

따라서 통지를 제거하는 올바른 방법은 다음과 같습니다.

$functions = array('t1', 't2');

왜 그런지에 대해

't1'();

작동하지? 불행히도 대답은 없습니다. 그것은 PHP입니다.이 성가신 수는 지옥의 기발한 것들이 많이 있습니다. 그것은 다음과 같은 기발한 것입니다.

explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1

편집하다:
위에서 언급 한 배열 참조 구문은 PHP5.4에서 사용할 수 있으며 배열 Dereferencing이라고합니다.

다른 팁

$funcs = array('t1','t2');

직관적이지 않지만 그것이 작동하는 방식입니다

이 문제의 작업은 Php.ini 설정을 변경하는 것입니다.

error_reporting = E_ALL 

에게

error_reporting = E_ALL & ~E_NOTICE

error_reporting () 함수를 확인하십시오.

http://us2.php.net/manual/en/function.error-reporting.php

이를 통해 어떤 수준의 오류, 통지 및 경고가 표시되는지 구성 할 수 있습니다.

예를 들어, 오류 및 경고를 원하고 알림이없는 경우 :

error_reporting (e_error | e_warning);

사용 문자열 선언 문자열을 의미한다면 :

$funcs = array('t1','t2');

참조 다양한 기능에 관한 장 PHP 매뉴얼에서.

문자열을 사용하여 함수를 호출하려면 Curly Braces를 사용해야합니다.

'hello'() // wont work
$hello = 'hello'; $hello() // will work

편집 { ''} ()가 작동하지 않는 것 같습니다. 나는 그것이 익숙한 것을 기억합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top