PHP 重载
phpserver side programmingprogramming更新于 2025/8/19 19:22:17
简介
PHP 对重载的理解与其他面向对象语言(例如 C++ 或 Java)不同,后者指的是一个类可以多次使用同名方法,但参数和/或返回类型不同。而 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() 在无法访问的属性。
在下面的代码中,设置、检索和取消设置了名为 myprop 的动态属性。
示例
<?php
class myclass{
public function __set($name, $value){
echo "setting $name property to $value
";
$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 . "
";
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 ) : mix public static __callStatic ( string $name , array $arguments ) : mix
在对象上下文中调用无法访问的方法时会触发 __call()。
在静态上下文中调用无法访问的方法时会触发 __callStatic()。
以下示例演示了 PHP 中的方法重载
示例
<?php
class myclass{
public function __call($name, $args){
// 注意:$name 的值区分大小写。
echo "Calling object method $name with " . implode(" ", $args). "
";
}
public static function __callStatic($name, $args){
echo "Calling static method $name with " . implode(" ", $args). "
";
}
}
$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>
输出
以上代码产生以下结果:
Calling object method mymethod with Hello World! Calling static method mymethod with Hello World!

