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!

相关文章