PHP重载

2023年11月28日12:56:32

介绍

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

  • 更新时间:2023年11月28日12:56:32 ,共 1799 字。