>백엔드 개발 >PHP 문제 >PHP 매직 메소드 호출이란 무엇입니까?

PHP 매직 메소드 호출이란 무엇입니까?

藏色散人
藏色散人원래의
2021-05-27 09:45:392513검색

php __call은 PHP 매직 메서드 중 하나입니다. 프로그램이 현재 클래스에서 선언되지 않았거나 호출 권한이 없는 메서드를 호출하면 __call 메서드가 호출됩니다.

PHP 매직 메소드 호출이란 무엇입니까?

이 기사의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.