PHP学习笔记 PHP的“重载”

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“重载”的机制。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值