介绍
与其他面向对象的语言(例如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 你好,世界!





