>백엔드 개발 >PHP 튜토리얼 >PHP에서 __call()을 사용하는 방법

PHP에서 __call()을 사용하는 방법

墨辰丷
墨辰丷원래의
2018-05-16 14:35:303338검색

이 글은 주로 PHP에서의 __call() 사용법을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

PHP5 객체에는 객체의 다른 메소드를 모니터링하는 데 사용되는 새로운 특수 메소드 __call()이 있습니다. 객체에 존재하지 않거나 권한이 제어되는 메서드를 호출하려고 하면 __call 메서드가 자동으로 호출됩니다.

예 1: __call

<?php  
class foo {  
  function __call($name,$arguments) {  
    print("Did you call me? I&#39;m $name!");  
  }  
} $x = new foo();  
$x->doStuff();  
$x->fancy_stuff();  
?>

이 특수 메서드를 사용하면 JAVA에서 "오버로딩" 작업을 구현할 수 있으므로 매개 변수를 확인하고 개인 메서드를 호출하여 전달할 수 있습니다.

예제 2: __call을 사용하여 "오버로드" 작업 구현

<?php  
class Magic {  
  function __call($name,$arguments) {  
    if($name==&#39;foo&#39;) {  
  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 &#39;$name&#39; ");  
}  
  
}  
}  
  
class User extends Obj  
{  
public function show()  
{  
print ("Username: ".$this->property[&#39;Username&#39;]."<br>;");  
//print ("Username: ".$this->getUsername()."<br>;");  
print ("Sex: ".$this->property[&#39;Sex&#39;]."<br>;");  
print ("Age: ".$this->property[&#39;Age&#39;]."<br>;");  
}  
}  
  
class Car extends Obj  
{  
public function show()  
{  
print ("Model: ".$this->property[&#39;Model&#39;]."<br>;");  
print ("Sum: ".$this->property[&#39;Number&#39;] * $this ->property[&#39;Price&#39;]."<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-

에서 멤버 함수 할당() 호출

위 내용은 PHP에서 __call()을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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