您的位置:首页 > 编程语言 > PHP开发

PHP学习笔记 PHP的“重载”

2017-02-23 10:08 218 查看
PHP的“重载”

php中的重载并不是传统意义上的面向对象语言的重载,应该说PHP本来就没有重载,所谓"重载"只是PHP类里面访问不可访问属性或方法机制的一个命名,说白了就只是这个机制的叫法。在传统面向对象语言中调用不可访问属性就是语法上的等错误,(如Java语言中在类里面声明private的属性,在类外调用就是错误的语法),但是在PHP中提供了一种调用类不可访问属性的机制,至于为什么把这种机制叫“重载”,可能就是因为PHP没有传统意义上的重载,所以就借用这个名字吧。

先看看PHP“重载”这种机制的原理是什么?

PHP的帮助文档把PHP“重载”解释为“通过魔术方法动态地"创建"类属性和方法”。这些魔鬼方法和作用如下:

  与属性相关的魔鬼方法
1 public void__set (string
$name
, mixed
$value
) 在给不可访问属性赋值时,__set()
会被调用。
2 public mixed__get (string
$name
) 读取不可访问属性的值时,__get() 会被调用。
3 public bool__isset (string
$name
) 当对不可访问属性调用isset() 或empty()
时,__isset() 会被调用。
4 public void__unset (string
$name
) 当对不可访问属性调用unset() 时,__unset() 会被调用。
与方法相关的魔鬼方法

1 在对象中调用一个不可访问方法时,__call() 会被调用。
2用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。 
__set ()举个栗子:在给不可访问属性赋值时,__set()
会被调用。

<?php 
class A{
public function __set ( $name ,$value)   {
echo "  赋值的属性名是:   $name      属性值是:   $value  <br>";
}
public function __get($name)    {
echo "      读取的属性名是:   $name <br>";
}

}

$cls = new A();

//下面语句执行,将调用__set()

$cls->studentName="小明";

//下面语句执行,将调用__get()

$age=$cls->age;

?>

输出结果为:
赋值的属性名是: studentName 属性值是: 小明 
读取的属性名是: age 


从上面的例子可以看出$cls对象并不存在属性studentName,但是$cls->studentName="小明";这条语句并没有出错,而是调用了__set()这个魔鬼函数。这就是PHP“重载”的机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: