How to use __call() in PHP

墨辰丷
Release: 2023-03-25 22:50:02
Original
3331 people have browsed it

This article mainly introduces the use of __call() in PHP. Interested friends can refer to it. I hope it will be helpful to everyone.

PHP5 objects have a new special method __call(), which is used to monitor other methods in an object. If you try to call a method that does not exist in an object or is permission-controlled, the __call method will be automatically called.

Example 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();  
?>
Copy after login

This special method can be used to implement the "overloading" action in JAVA, so that you can check your parameters and Pass parameters by calling a private method.

Example 2: Use __call to implement the "overload" action

<?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");  
?>
Copy after login

Quoted from:

_call and ___callStatic are the default functions of the PHP class.

__call() In the context of an object, if the called method cannot be accessed, it will be triggered

__callStatic() In the context of a static object, if the called method cannot be accessed, It will be triggered

Instance:

<?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();  
?>
Copy after login

Related recommendations:

PHP Development (17)-callback-readdir-is_dir-foreach-glob- PhpStorm

java-Concurrency-Callable, Future and FutureTask

##php-Call to a member function assign() on

The above is the detailed content of How to use __call() in PHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template