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

学习PHP面向对象(五)isset(),unset()应用

2012-08-03 16:52 288 查看
__isset() 方法:在看这个方法之前我们看一下“isset()”函数的应用,isset()是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。那么如果在一个对象外面使用“isset()”这个函数去测定对象里面的成员是否被设定可不可以用它呢?分两种情况,如果对象里面成员是公有的,我们就可以使用这个函数来测定成员属性,如果是私有的成员属性,这个函数就不起作用了,原因就是因为私有的被封装了,在外部不可见。那么我们就不可以在对象的外部使用“isset()”函数来测定私有成员属性是否被设定了呢?可以,你只要在类里面加上一个“__isset()”方法就可以了,当在类外部使用”isset()”函数来测定对象里面的私有成员是否被设定时,就会自动调用类里面的“__isset()”方法了帮我们完成这样的操作,“__isset()”方法也可以做成私有的。你可以在类里面加上下面这样的代码就可以了:

private function __isset($nm)

{

echo "当在类外部使用isset()函数测定私有成员$nm时,自动调用<br>";

return isset($this->$nm);

}

__unset()方法:看这个方法之前呢,我们也先来看一下“unset()”这个函数,“unset()”这个函数的作用是删除指定的变量且传回true,参数为要删除的变量。那么如果在一个对象外部去删除对象内部的成员属性用“unset()”函数可不可以呢,也是分两种情况,如果一个对象里面的成员属性是公有的,就可以使用这个函数在对象外面删除对象的公有属性,如果对象的成员属性是私有的,我使用这个函数就没有权限去删除,但同样如果你在一个对象里面加上“__unset()”这个方法,就可以在对象的外部去删除对象的私有成员属性了。在对象里面加上了“__unset()”这个方法之后,在对象外部使用“unset()”函数删除对象内部的私有成员属性时,自动调用“__unset()”函数来帮

我们删除对象内部的私有成员属性,这个方法也可以在类的内部定义成私有的。在对象里面加上下面的代码就可以了:

private function __unset($nm)

{

echo "当在类外部使用unset()函数来删除私有成员时自动调用的<br>";

unset($this->$nm);

}

我们来看一个完整的实例:

<?php

class Person

{

//下面是人的成员属性

private $name; //人的名子

private $sex; //人的性别

private $age; //人的年龄

//__get()方法用来获取私有属性

private function __get($property_name)

{

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

{

return($this->$property_name);

}else {

return(NULL);

}

}

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

private function __set($property_name, $value)

{

$this->$property_name = $value;

}

//__isset()方法

private function __isset($nm)

{

echo "isset()函数测定私有成员时,自动调用<br>";

return isset($this->$nm);

}

//__unset()方法

private function __unset($nm)

{

echo "当在类外部使用unset()函数来删除私有成员时自动调用的<br>";

unset($this->$nm);

}

}

$p1=new Person();

$p1->name="this is a person name";

//在使用isset()函数测定私有成员时,自动调用__isset()方法帮我们完成,返回结果为true

echo var_dump(isset($p1->name))."<br>";

echo $p1->name."<br>";

//在使用unset()函数删除私有成员时,自动调用__unset()方法帮我们完成,删除name私有属性

unset($p1->name);

//已经被删除了,所这行不会有输出

echo $p1->name;

?>

输出结果为:

isset()函数测定私有成员时,自动调用

bool(true)

this is a person name

当在类外部使用unset()函数来删除私有成员时自动调用的

__set()、__get()、__isset()、__unset() 这四个方法都是我们添加到对象里面的,在需要时自动调用的,来完成在对象外部对对象内部私有属性的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐