PHP重载基础知识回顾

1. 什么是PHP重载

PHP是一种动态类型语言,意味着变量在脚本执行时不需要预定义类型,同时函数也可以没有参数类型或返回类型。PHP重载就是在运行时动态创建或改变一个类的属性和方法。

PHP支持两种重载:

属性重载:可以使用魔术方法 __get() 和 __set() 来重载类的属性。

方法重载:可以使用魔术方法 __call() 和 __callStatic() 来重载类的方法。

2. 属性重载

2.1 __get()方法

当读取一个不存在的属性时,__get() 方法就会被调用,通过这个魔术方法可以动态添加一个属性。

class Test{

private $data = ['name' => 'Tom', 'age' => 18];

public function __get($name) {

if (isset($this->data[$name])) {

return $this->data[$name];

}

return null;

}

}

$test = new Test();

echo $test->name; //Tom

echo $test->age; //18

echo $test->gender; //null

__get() 方法接受一个参数 $name,表示访问的属性名。如果该属性不存在,则返回 null。

2.2 __set()方法

当给一个不存在的属性赋值时,__set() 方法会被调用,通过这个魔术方法可以动态添加一个属性和其值。

class Test{

private $data = [];

public function __set($name, $value) {

$this->data[$name] = $value;

}

}

$test = new Test();

$test->name = 'Tom';

echo $test->name; //Tom

__set() 方法接受两个参数 $name 和 $value,表示要设置的属性名和属性值。

3. 方法重载

3.1 __call()方法

当调用一个不存在的方法时,__call() 方法就会被调用,通过这个魔术方法可以动态添加一个方法。

class Test{

public function __call($name, $arguments) {

if ($name == 'add') {

return array_sum($arguments);

}

return null;

}

}

$test = new Test();

echo $test->add(1,2,3); //6

echo $test->subtract(10,2); //null

__call() 方法接受两个参数 $name 和 $arguments,表示调用的方法名和方法参数。如果该方法不存在,则返回 null。

3.2 __callStatic()方法

当调用一个不存在的静态方法时,__callStatic() 方法就会被调用,通过这个魔术方法可以动态添加一个静态方法。

class Test {

public static function __callStatic($name, $arguments) {

if ($name == 'add') {

return array_sum($arguments);

}

return null;

}

}

echo Test::add(1,2,3); //6

echo Test::subtract(10,2); //null

__callStatic() 方法与 __call() 方法类似,但是只适用于静态方法。

后端开发标签