php __call은 PHP 매직 메서드 중 하나입니다. 프로그램이 현재 클래스에서 선언되지 않았거나 호출 권한이 없는 메서드를 호출하면 __call 메서드가 호출됩니다.
이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터
php 매직 메소드 __call
__call은 프로그램이 아닌 것을 호출하는 매직 메소드 중 하나입니다. 현재 클래스에 선언되어 있거나 메소드 호출 권한이 없는 경우 __call 메소드
class test { public function emptyFunc(){ $getArgs = func_get_args(); $funcName = $getArgs[0]; //$params = array_slice($getArgs, 1); //var_dump($params); // this is params return $funcName . ' function is not exists'; } public function __call($m, $params) { $arr[] = $m; $arr = array_merge($arr, $params); return call_user_func_array(array($this, 'emptyFunc'), $arr); } protected function nowToTest(){ return 'this is nowToTest'; } } $testObj = new test(); var_dump($testObj->nowToTest('params1','params1')); //var_dump result => string(29) "nowToTest function is not exists" 如上test类中,nowToTest方法是存在的,但修饰这方法的是protected(保护),所以实例出来的对象没权限执行,这时就跑到__call中去了. _call()有2个参数,第一个m是当前调用方法的名字,这里是'nowToTest',第二个m是当前调用方法的名字,这里是 ′ nowToTest ′
가 호출됩니다. 두 번째 매개변수는 'nowToTest' 메소드 호출 시 전달되는 매개변수입니다. $params에 배열로 결합됩니다.
call_user_func_array(method, method, params) php 메소드의 함수는 메소드 메소드를 호출하는 것입니다. 매개변수는 메소드이고 메소드가 클래스에 있는 경우 위의 배열 형식을 사용하면 됩니다. 여기서는 emptyFunc 메소드가 호출됩니다. func_get_args()의 기능은 배열 형식으로 전달된 모든 매개변수를 가져오는 것입니다. 이러한 매개변수가 __call에 전달되면 첫 번째 매개변수는 메서드 이름입니다. 따라서 반환된 최종 결과는
"nowToTest function is not exists"
입니다. 권장 학습: "PHP Video Tutorial"
위 내용은 PHP 매직 메소드 호출이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!