background image

使用 private 这个关键字来对属性和方法进行封装:

原来的成员:
var $name; //声明人的姓名
var $sex; //声明人的性别
var $age; //声明人的年龄
function run(){…….}

改成封装的形式:
private $name; //把人的姓名使用 private 关键字进行封装
private $sex; //把人的性别使用 private 关键字进行封装
private $age; //把人的年龄使用 private 关键字进行封装
private function run(){……} //把人的走路方法使用 private 关键字进行封装

注意:只要是成员属性前面有其它的关键字就要去掉原有的关键字 var”.

通过 private 就可以把人的成员(成员属性和成员方法)封装上了。封装上的成员就不能被类外面直接访

问了,只有对象内部自己可以访问。

 

私有的成员是不能被外部访问的, 因为私有成员只能在本对象内部自己访问,比如,$p1 这个对象自己想

把他的私有属性说出去,在 say()这个方法里面访问了私有属性,这样是可以。(没有加任何访问控制,

默认的是 public 的,任何地方都可以访问)

 

 

 

私有的成员只能在类的内部使用, 不能被类外部直接来存取, 但是在类的内部是有权限访问的, 所以有
时候我们需要在类的外面给私有属性赋值和读取出来,也就是给类的外部提供一些可以存取的接口,上例中

 

构造方法就是一种赋值的形式, 但是构造方法只是在创建对象的时候赋值,如果我们已经有一个存在的对

 

 

象了,想对这个存在的对象赋值, 这个时候,如果你还使用构造方法传值的形式传值, 那么就创建了一

个新的对象,并不是这个已存在的对象了。所以我们要对私有的属性做一些可以被外部存取的接口,目的就
是可以在对象存在的情况下,改变和存取属性的值,但要注意,只有需要让外部改变的属性才这样做,不想

让外面访问的属性是不做这样的接口的,这样就能达到封装的目的,所有的功能都是对象自己来完成,给外
面提供尽量少的操作。

如果给类外部提供接口,可以为私有属性在类外部提供设置方法和获取方法,来操作私有属性.例如:
prvate $age; //私有的属性年龄
function setAge($age) //为外部提供一个公有设置年龄的方法
{
if($age130) //在给属性赋值的时候,为了避免非法值设置给属性

return;
$this->age=$age;

}
function getAge() //为外部提供一个公有获取年龄的方法
{

return($this->age);
}

10.__set() __get() __isset() __unset()四个方法的应用

一般来说,总是把类的属性定义为 private

 

,这更符合现实的逻辑。但是, 对属性的读取和赋值操作是非

常频繁的,因此在 PHP5

中,预定义了两个函数 __get()” ”

和 __set()”来获取和赋值其属性,以及检查属

性的 __isset()”

和删除属性的方法 __unset()”。

上一节中,我们为每个属性做了设置和获取的方法,在 PHP5 中给我们提供了专门为属性设置值和获取值的

方法, __set()” “

和 __get()”

 

这两个方法,这两个方法不是默认存在的, 而是我们手工添加到类里面

去的,像构造方法(__construct())一样, 类里面添加了才会存在,可以按下面的方式来添加这两个方法,

当然也可以按个人的风格来添加:
//__get()方法用来获取私有属性
function __get($property_name)

{
if(isset($this->$property_name)) {

return($this->$property_name);
}else {

return(NULL);
}

//__set()方法用来设置私有属性