PHP学习(十六)--封装性

来源:互联网 发布:windows下latex 编辑:程序博客网 时间:2024/06/05 12:40

封装性

封装性是面向对象编程中的三大特性之一,封装性就是把对象的成员属性和成员方法结合成一个队里的相同单位,并尽可能隐藏对象的内部细节。
1.把对象的全部成员属性和全部成员方法结合在一起,形成一个不可分割的独立单位,即对象。
2.信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个便捷,只保留有限的对外接口使之与外部发生联系。

设置私有成员

只要在声明成员属性会成员方法时,使用private关键字修饰就实现了对成员的封装。封装后的成员在对象外部不能被访问,但在对象内部的成员方法中可以访问到自己对象内部被封装的成员属性和被封装的成员方法,达到了对对象成员保护的目的,只能是对象自己使用,其他不可以访问私有成员,即尽可能隐蔽对象的内部细节,对外形成一道屏障。

私有成员的访问

对象中的成员属性一旦被private关键字封装成私有之后,就只能在对象内部的成员方法中使用,不能被外象外部直接赋值,也不能在对象外部直接获取私有属性的值。如果不让用户在对象的外部设置私有属性的值,但可以获取私有属性的值,或者允许用户对私有属性赋值,但需要限制一些赋值条件,解决的办法就是在对象的内部声明一些操作私有属性的共有方法。因为私有的成员属性字对象内部的方法中可以访问,所以在对象中声明一个访问私有属性的方法,再把这个方法通过public关键字设置为共有的访问权限。如果成员方法没有加任何访问控制修饰,默认就是piblic的,在任何地方都可以访问。

魔术方法__set()

void __set(string name, mixed value)

该方法的作用是在程序运行过程中为私有的成员属性设置值,它不需要有任何返回值。但它需要两个参数,第一个参数需要传入在为私有属性设置值时的属性名,第二个参数则需要传入为属性设置的值。而且这个方法不需要主动调用,可以在方法签名也加上private关键字修饰,防止用户直接去调用它。这个方法是在用户值为私有属性设置值时自动调用。

魔术方法__get()

如果在类中声明了__get()方法,则直接在对象的外部获取私有属性的值时,会自动调用此方法,返回私有属性的值,并且可以在__get()方法中根据不同的属性,设置一些条件来限制对私有属性的非法值操作。

mixed __get(string name)

该方法的作用是在程序运行过程中,通过它可以在对象外部获取私有成员属性的值,它有一个必选的参数,需要传入在获取私有属性值时的属性名,并返回一个值,是在这个方法中处理后的允许对象外部使用的值。而且这个方法也不需要主动调用,也可以在方法前面加上private关键字修饰,防止用户直接去调用。

魔术方法__isset()和__unset()

bool __isset(string name)

如果类中添加了该方法,在对象的外部使用isset()方法测定对象中的成员时,就会自动调用对象中的__isset()方法,间接地帮助完成对对象中私有成员属性的测定。也可以在方法前面加上private关键字修饰,防止用户直接去调用。

void __unset(string name)

使用unset()函数对对象外部删除对象中的成员属性,但这个对象中的成员属性必须是共有的才可以直接删除。如果对象中的成员属性被封装,就需要在类中添加__unset()方法,才可以在对象的外部使用unset()函数直接删除对象中的私有成员属性。

0 0