从网上找的。
PHP5
例七:__call
<?php
class
}
$x->doStuff();
$x->fancy_stuff();
?>
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。
例八:使用
<?php
class
}
$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();
?>