php魔术方法__isset() and __unset( ) 实例应用
来源:互联网 发布:英文小说阅读软件 编辑:程序博客网 时间:2024/06/15 22:16
__isset() – 在对类中属性或者非类中属性使用isset()方法的时候如果没有或者非公有属性,则自动执行__isset()的方法(简单理解除了属性public 以外都掉用)
__unset() - 在对类中属性或者非类中属性使用unset()方法的时候如果没有或者非公有属性,则自动执行__unset()的方法
<?php
/*
__isset格式:bool __isset(string name) //传入对象中的成员属性名作为参数,返回测定的结果
作用 :在类的外部使用“isset()”方法测定对象中的成员时,
就会自动调用对象中的“__isset()”方法,
间接地帮助我们完成对对象中私有成员属性的测定
直接在外部 isset(私有属性) 由于访问不了私有属性返回 false(即使该私有属性有值)
应用__isset( ),在外部执行isset(私有属性),就会自动调用对象中的“__isset()”方法,
然后 我们既可以在 __isset()”方法内 isset(私有属性) 得到准确的值,
实现
间接地帮助我们完成对对象中私有成员属性的测定
__unset格式:void __unset(string name) //传入对象中的成员属性作为参数
作用 :可以将私有成员属性删除如果没有在类中加入此方法,
就不能删除对象中任何的私有成员属性。
*/
class Employee
{
private $name;
private $sex;
private $salary;
function __construct($name="",$sex="男",$salary=3000)
{
$this->name=$name;
$this->sex=$sex;
$this->salary=$salary;
}
function __isset($propertyName)
{
if($propertyName=="salary")//$propertyName是属性名的意思
return false;
return isset($this->$propertyName); // $propertyName 是私有的外部不能直接判断 必须先通过__isset 进而就可以判断
//当在外面使用__isset()测定私有成员属性时,__unset方法被自动调用
//并在内部把私有的成员属性删除
}
function __unset($propertyName)
{
if ($propertyName=="salary" || $propertyName=="name")
return;
unset($this->$propertyName);
}
public function getInfo()
{
echo "我的名字:".$this->name.",性别:".$this->sex.",工资:".$this->salary."<br>";
}
}
$e=new Employee("奥巴马","男",20000);
var_dump(isset($e->name));
echo "<br>";//输出bool为false,不允许测定name属性
var_dump(isset($e->sex));
echo "<br>";
var_dump(isset($e->salary));
echo "<br>";
var_dump(isset($e->id));//输出bool(false),测定对象中不存在id的属性
unset($e->sex);//删除对象中的私有属性sex 删除成功
unset($e->salary);//删除对象中私有属性salary,删除不成功
$e->getInfo();
?>
<?php//属性重载class Person{ //属性public$name;private$age;//构造方法publicfunction __construct($name,$age) { $this->name =$name;$this->age =$age; } }//实例化$person = new Person('罗纳尔多',35);//判断var_dump(isset($person->name));//truevar_dump(isset($person->age));//falsevar_dump(empty($person->name));//falsevar_dump(empty($person->age));//true
<?php//属性重载class Person{ //属性public$name;private$age;//构造方法publicfunction __construct($name,$age) { $this->name =$name;$this->age =$age; }//isset魔术方法 //需要一个参数知道要判断的属性的名字public function __isset($name){//新建一个允许判断的数据 //判断当前元素是否在允许判断的数组里 //如果允许,在内部判读,返回判断结果 //不允许,返回FALSEvar_dump($name);returnisset($this->$name);
//return empty($this->$name) //empty和isset外部所得到的结果 }}//实例化$person =new Person('罗纳尔多',35);//判断var_dump(isset($person->name));//true 能访问到,不经过__isset()魔术方法var_dump(isset($person->age));//true 访问不到,经过__isset()魔术方法,判断出age属性是存在的,返回truevar_dump(empty($person->name));//false 能访问到,不经过__isset()魔术方法var_dump(empty($person->age));//true 访问不到,经过__isset()魔术方法,判断出age属性是存在的,返回true(与逻辑不符,所以需要在__isset()函数内部做判断)
<?php//魔术方法__isset __unset echo'<hr />';classDog{public $leg =4;protected $bone ='猪腿骨';publicfunction__isset($p){echo'你想判断我的',$p,'属性存不存在<br />';return1; } publicfunction__unset($p){echo'你想去掉我的',$p,'?!<br />'; } } $hua =new Dog();if(isset($hua->leg)) { echo $hua->leg,'<br/>'; } /*结果:4*/if(isset($hua->tail)) { echo'有tail属性'; } else {echo'没有tail'; } /*结果:你想判断我的tail属性存不存在有tail属性*//*** __isset() 方法, 当 用isset() 判断对象不可见的属性时(protected/private/不存在的属性) 会引发 __isset()来执行 问: isset($obj->xyz) 属性,为真, 能说明 类声明了一个xyz属性吗? 答:不能 ***/echo'<hr />';echo'__unset测试<br/>'; print_r($hua); /*结果:__unset测试Dog Object( [leg] => 4 [bone:protected] => 猪腿骨)*/unset($hua->leg); print_r($hua);/*结果:Dog Object( [bone:protected] => 猪腿骨)*/unset($hua->tail);unset($hua->bone);/*结果:你想去掉我的tail?!你想去掉我的bone?!*//*** __unset()方法 当 用unset 销毁对象的不可见属性时, 会引发 __unset(); unset($hua->tail)----没有tail属性---->__unset('tail'); ***/?>
阅读全文
0 0
- php魔术方法__isset() and __unset( ) 实例应用
- PHP 魔术方法 _set __get __unset __isset
- 魔术方法__isset()和__unset()
- PHP魔术方法之__unset()和__isset()方法
- php魔术方法汇总之__set(),__get(),__isset (),__unset()
- php魔术方法__set和__get,__isset,__unset的用法
- php的魔术方法__get()、__set()、__isset()、__unset()的用法
- PHP __set() __get() __isset() __unset() 四个方法的应用
- PHP __set() __get() __isset() __unset() 四个方法的应用
- PHP __set(),__get(),__isset(),__unset()四个方法的应用
- PHP中的魔术方法总结 :__construct, __destruct , __call,__get, __set, __isset, __unset , __sleep
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- php (十四) 面向对象 魔术方法 __set()、__get()、__isset() 与 __unset()
- PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- php面向对象基础概念(属性重载的魔术方法)__get(),__set(),__isset(),__unset()
- 2017.10.19
- ubuntu使用yum命令时报错解决方法
- SSM框架 文件下载
- 使用TortoiseSVN在Windows系统下搭建单机版SVN服务器版本控制
- 【bzoj4756】[Usaco2017 Jan]Promotion Counting
- php魔术方法__isset() and __unset( ) 实例应用
- 多线程下载
- UML类图与类的关系详解
- C语言之指针再涉(二)
- 开发者快速入门以太坊代币开发底层构架
- 初试 Kubernetes 暴漏服务类型之 Nginx Ingress
- python开发数据库之(python DB API)
- mac 显示信任任何来源选项
- PAT (Basic Level) Practise (中文)1034. 有理数四则运算(20)