__call()是一个魔术方法,可以处理类内未定义的方法,让浏览器友好输出,对用户友好输出。__call()有两个参数,使用的时候需要传入两个参数,第一个参数是方法名称,第二个参数是包含传递给该方法的参数的所有值。
在php中内置了一些特书的方法,这些特殊方法被称之为魔术方法,其也有特殊的命名规则,以“__”双下划线开头的方法和函数名,所以我们自定义的函数不应该用双下划下开头,目的是为了区分魔术方法。
__construct(), __autoload(),__destruct(), __call(), __callStatic(), __get()
, __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为魔术方法(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
PHP的魔术方法都是成对出现,所以和__call()成对出现的是__callStatic()方法,在静态上下文中调用一个不可用的方法时会执行这个方法。(PHP 5.3.0 版本以上)
__callStatic()是一个魔术方法,可以处理类内未定义的静态方法,让浏览器友好输出,对用户友好输出。__callStatic()有两个参数,使用的时候需要传入两个参数,第一个参数是方法名称,第二个参数是包含传递给该方法的参数的所有值。
public static mixed __callStatic ( string $methord , array $arguments )
在这个示例中我们随便构建一个Person类,然后当我们先实例化一个对象然后通过对象调用一个它并不包含的getUser()方法时,就会自动调用类中__call()方法。当我们调用一个这个类中并不存在的静态方法getUser()时,则会自动调用类中__callStatic()方法。
<?php
class Person
{
public function __call($methord, $arguments)
{
// 注意:$methord的值区分大小写
echo "Calling object method '$methord' " . implode(', ', $arguments) . "\n";
}
// PHP 5.3.0之后的版本
public static function __callStatic($methord, $arguments)
{
echo "Calling static method '$methord' " . implode(', ', $arguments) . "\n";
}
}
//实例化类
$obj = new Person;
$obj -> getUser('in object context');
echo "<br/>";
// PHP 5.3.0 版本以后
//使用类名调用静态方法
Person::getUser('in static context');
转载注明:
感谢博主,喝杯咖啡~
感谢博主,喝杯咖啡~
还没有人发表评论