이 글은 주로 PHP에서의 __call() 사용법을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.
PHP5 객체에는 객체의 다른 메소드를 모니터링하는 데 사용되는 새로운 특수 메소드 __call()이 있습니다. 객체에 존재하지 않거나 권한이 제어되는 메서드를 호출하려고 하면 __call 메서드가 자동으로 호출됩니다.
예 1: __call
<?php class foo { function __call($name,$arguments) { print("Did you call me? I'm $name!"); } } $x = new foo(); $x->doStuff(); $x->fancy_stuff(); ?>
이 특수 메서드를 사용하면 JAVA에서 "오버로딩" 작업을 구현할 수 있으므로 매개 변수를 확인하고 개인 메서드를 호출하여 전달할 수 있습니다.
예제 2: __call을 사용하여 "오버로드" 작업 구현
<?php class Magic { function __call($name,$arguments) { if($name=='foo') { if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); } } private function foo_for_int($x) { print("oh an int!"); } private function foo_for_string($x) { print("oh a string!"); } } $x = new Magic(); $x->foo(3); $x->foo("3"); ?>
인용:
_call 및 ___callStatic은 PHP 클래스의 기본 함수입니다.
__call()은 호출된 경우입니다. 메서드에 액세스할 수 없으면 트리거됩니다.
__callStatic() 정적 컨텍스트에서 호출된 메서드에 액세스할 수 없으면 트리거됩니다.
인스턴스:
<?php abstract class Obj { protected $property = array(); abstract protected function show(); public function __call($name,$value) { if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array)) { $this->property[$array[1]] = $value[0]; return; } elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array)) { return $this->property[$array[1]]; } else { exit("<br>;Bad function name '$name' "); } } } class User extends Obj { public function show() { print ("Username: ".$this->property['Username']."<br>;"); //print ("Username: ".$this->getUsername()."<br>;"); print ("Sex: ".$this->property['Sex']."<br>;"); print ("Age: ".$this->property['Age']."<br>;"); } } class Car extends Obj { public function show() { print ("Model: ".$this->property['Model']."<br>;"); print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;"); } } $user = new User; $user ->setUsername("Anny"); $user ->setSex("girl"); $user ->setAge(20); $user ->show(); print("<br>;<br>;"); $car = new Car; $car ->setModel("BW600"); $car ->setNumber(5); $car ->setPrice(40000); $car ->show(); ?>
관련 권장 사항:
PHP 개발(17 )-callback-readdir-is_dir-foreach-glob-PhpStorm
java-concurrency-Callable, Future 및 FutureTask
에서 멤버 함수 할당() 호출위 내용은 PHP에서 __call()을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!