PHP5魔术方法总结

在PHP类中,为我们提供了一些魔术方法,每个魔术方法的命名开始于两个下横杠“__”,并会在特定的条件下,由PHP自动调用。根据不同的作用,魔术方法将分为以下三类:

构造和析构函数:
__construct(), __destruct()

重载:
__call(), __get(), __set(), __isset(), __unset()
(其中__isset(), __unset() 是PHP 5.1.0开始新增的)

其它:
__sleep(), __wakeup(), __toString(), __set_state(), __clone()

先介绍“重载”。
__get:当你试图获取一个非public的属性值时,__get将被自动调用。
__set:当你试图设置一个非public的属性值时,__set将被自动调用。
__isset:当你试图设置一个非public的属性值时,__set将被自动调用。
__unset:当你试图设置一个非public的属性值时,__set将被自动调用。
__call:当你试图调用一个未定义的方法时,__call将被自动调用。这里的“未定义的方法”包括没有权限访问的方法,例如私用方 法。

注意:
所有的Overloading方法必须不能声明为static型;
在PHP 5.0.X中,所有的Overloading方法必须定义为public类型。

__get(), __set(), __isset(), __unset()
由于申明为 private, protected 的属性只能在类的内部访问,所以PHP为我们提供了两个魔术方法:__get(), __set(),使得我们可以在类外部访问私有属性。当一个私有属性在类外部被访问时,PHP 会自动调用这几个魔术方法,从而可以对类的私有属性实现获取、设置、验证、销毁等操作。
这两个方法不是默认就有的,而是需要我们在类义类时,显式地定义这两个方法。

具体实现方法见下面例子:

使用魔术方法的好处,就是对成员属性的访问可以实现单一入口。例如可能我们在设置属性的值时,还需要做一些其它的前期工作(验证、过滤或访问数组形式的私有属性等),如果对属性的设置只有一个入口(__set()),那我们就只需要在这一个入口加上这些代码就行了。同样道理,如果以后需要再修改,我们就只需要修改这一处。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值