|
__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() 这四个方法都是我们添加到对象里面的,在需要时自动调用的,来完成在对象外部对对象内部私有属性的操作。
下期内容: 11.类的继函 12.多态的应用 13.重载新的方法 14.访问类型 15.静态成员的使用 16.final关键字的应用 17.__toString()方法 18.克隆对象 19.__call处理调用错误 20.自动加载类 21.把对象串行化 22.抽象方法和抽象类 23.php5接口技术
(阅读次数:)
共6页: 上一页 [1] [2] [3] [4] [5] 6 下一页
|