PHP重载

介绍

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