与其他面向对象的语言(例如C ++或Java)相比,PHP中对重载的解释是不同的,其中该术语表示具有使用相同名称的方法多次但具有不同参数和/或返回类型的类的能力。另一方面,在PHP中,动态创建属性和方法的功能称为重载。PHP的魔术方法(方法名称以双下划线开头)用于设置动态属性和方法。
以下魔术方法用于重载属性-
public __set ( string $name , mixed $value ) : void public __get ( string $name ) : mixed public __isset ( string $name ) : bool public __unset ( string $name ) : void
运行__set()以便将数据写入受保护的,私有的或不存在的不可访问的属性。
__get()从不可访问的属性读取数据。
__isset()调用isset()
或empty()
无法访问的属性。
unset()
在无法访问的属性上调用__unset()时会被调用。
在以下代码中,设置,检索和取消设置了名为myprop的动态属性。
<?php class myclass{ public function __set($name, $value){ echo "setting $name property to $value \n"; $this->$name = $value; } public function __get($name){ echo "value of $name property is "; return $this->$name; } public function __isset($name){ return isset($this->$name); } public function __unset($name){ unset($this->$name); } } $obj = new myclass(); $obj->myprop="test"; echo $obj->myprop . "\n"; var_dump (isset($obj->myprop)); unset($obj->myprop); var_dump (isset($obj->myprop)); ?>
输出结果
输出如下-
setting myprop property to test test bool(true) bool(false)
用于动态设置方法的两个魔术方法是__call()和__callStatic()
public __call ( string $name , array $arguments ) : mixed public static __callStatic ( string $name , array $arguments ) : mixed
在对象上下文中调用不可访问的方法时,会触发__call()。
在静态上下文中调用不可访问的方法时,会触发__callStatic()。
以下示例演示了PHP中的方法重载
<?php class myclass{ public function __call($name, $args){ //注意:$name的值区分大小写。 echo "Calling object method $name with " . implode(" ", $args). "\n"; } public static function __callStatic($name, $args){ echo "Calling static method $name with " . implode(" ", $args). "\n"; } } $obj = new myclass(); $obj->mymethod("你好,世界!"); myclass::mymethod("你好,世界!"); ?>
输出结果
上面的代码产生以下结果:
Calling object method mymethod with 你好,世界! Calling static method mymethod with 你好,世界!