__unset用法介绍,PHP一些常用魔术点子

魔术点子               
          调用方法                                     作用
__set               
   有几个参数 __set(属性名,属性值)                         
 修改私有总体性
____unset用法介绍,PHP一些常用魔术点子。get               
   有一个参数 __get(属性名)                               
查看私有属性
__isset             
    有一个参数 __isset(判断的属性名)                         
 用于检测私有属性是或不是留存
__unset             
    有一个参数 __unset(删除的属性名)                         
 用于删除私有属性
__call               
  有多少个参数 __call(函数名,函数值)                           
固然class内尚未那个函数则履行这一个

__set() __get() __isset() __unset() 八个办法的使用
诚如的话,总是把类的性质定义为private,那更适合现实的逻辑。但是,
对性能的读取和赋值操作是越发频繁的,由此在PHP5中,预订义了五个函数”__get()”和”__set()”来收获和赋值其性质,以及检查属性的”__isset()”和删除属性的不二法门”__unset()”。

10.__set() __get() __isset() __unset()多少个方法的使用
诚如的话,总是把类的习性定义为private,那更切合现实的逻辑。可是,对性能的读取
和赋值操作是万分频仍的,由此在PHP5
中,预订义了八个函数“__get()”和“__set()”来获
取和赋值其性质,以及检查属性的“__isset()”和删除属性的法门“__unset()”。
上一节中,大家为每个属性做了设置和得到的艺术,在PHP5
中给大家提供了尤其为属
性设置值和获取值的法子,“__set()”和“__get()”那多少个格局,那五个方法不是默许存在的,
而是大家手工添加到类里面去的,像构造方法(__construct())一样,类里面添加了才会设有,
可以按下边的办法来添加那三个方法,当然也可以按个人的风骨来添加:
代码片段

上一节中,大家为每个属性做了安装和收获的不二法门,在PHP5中给大家提供了专门为属性设置值和获取值的方法,”__set()”和“__get()”那三个办法,那多少个办法不是默许存在的,
而是大家手工添加到类里面去的,像构造方法(__construct())一样,
类里面添加了才会设有,可以按下边的不二法门来添加那三个方法,当然也可以按个人的作风来添加:

 一般的话,总是把类的习性定义为private,那更切合实际的逻辑。不过,对性能的读取和赋值操作是卓绝频仍的,因而在PHP5中,预订义了五个函数“__get()”和“__set()”来收获和赋值其特性,以及检查属性的“__isset()”和删除属性的办法“__unset()”。
上一节中,我们为各种属性做了安装和收获的章程,在PHP5中给大家提供了专门为属性设置值和获取值的艺术,“__set()”和“__get()”那多个章程,那八个措施不是默认存在的,而是我们手工添加到类里面去的,像构造方法(__construct())一样,
类里面添加了才会设有,可以按下边的措施来添加那四个点子,当然也可以按个人的风骨来添加:

复制代码 代码如下:

 代码如下

//__get()方法用来赢得个人属性

//__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;
}

//__get()方法用来拿到个人属性  
function __get($property_name)  
{  
    if(isset($this->$property_name)) {  
        return($this->$property_name);  
    }else {  
        return(NULL);  
    }  
}   
 
//__set()方法用来安装个人属性  
function __set($property_name, $value)  
{  
    $this->$property_name = $value;  

 代码如下

__get()方法:这一个艺术用来获得个人成员属性值的,有一个参数,参数传入你要赢得的
成员属性的称呼,再次来到获取的属性值,这么些点子毫无我们手工的去调用,因为大家也可以把
以此方式做成私有的法子,是在一贯拿走个人属性的时候对象活动调用的。因为个人属性已
经被封装上了,是不可能直接获得值的(比如:“echo
$p1->name”那样直接得到是张冠李戴的),
唯独假如你在类里面添加了这几个法子,在应用“echo
$p1->name”那样的言语直接获取值的
时候就会活动调用__get($property_name)方法,将性能name
传给参数$property_name,通过这么些法子的中间举行,再次来到我们传入的私有属性的值。如若成员属性不封装成私有的,对象
自我就不会去自动调用这些艺术。
__set()方法:这几个方法用来为民用成员属性设置值的,有四个参数,首个参数为你要
为设置值的属性名,第一个参数是要给属性设置的值,没有重回值。那几个艺术同样不用大家
手工去调用,它也得以做成私有的,是在直接设置个人属性值的时候自动调用的,同样属性
个人的早已被封装上了, 若是没有__set() 那些格局, 是不容许的,
比如:
$this->name=‘zhangsan’,那样会出错,然则如若你在类里面添加了__set($property_name,
$value)
其一措施,在一贯给个体属性赋值的时候,就会自行调用它,把性能比如name
传给
$property_name,把要赋的值“zhangsan”传给$value,通过这些办法的实施,达到赋值的目
的。若是成员属性不封装成私有的,对象自我就不会去自动调用那些艺术。为了不扩散不合规
的值,还足以在那个办法给做一下判定。代码如下:代码片段

//__get()方法用来得到个人属性
function __get($property_name)
{
    if(isset($this->$property_澳门葡京备用网址 ,name)) {
        return($this->$property_name);
    }else {
        return(NULL);
    }
}

private function
__get($property_name)

复制代码 代码如下:

//__set()方法用来安装个人属性
function __set($property_name, $value)
{
 $this->$property_name = $value;
}__

{

<?php
class Person{
//上边是人的分子属性, 都是包装的私有成员
private $name; //人的名字
private $sex; //人的性别
private $age; //人的年龄
//__get()方法用来获得个人属性
private function __get($property_name){
echo
“在直接得到个人属性值的时候,自动调用了这几个__get()方法<br>”;
if(isset($this->$property_name)) {
return($this->$property_name);
}else {
return(NULL);
}
}
//__set()方法用来设置个人属性
private function __set($property_name, $value){
echo
“在向来设置个人属性值的时候,自动调用了那一个__set()方法为私有性能赋值<br>”;
$this->$property_name = $value;
}
}
$p1=new Person();
//直接为私有总体性赋值的操作, 会自动调用__set()方法开展赋值
$p1->name=”张三”;
$p1->sex=”男”;
$p1->age=20;
//直接拿走个人属性的值, 会自动调用__get()方法,再次回到成员属性的值
echo “姓名:”.$p1->name.”<br>”;
echo “性别:”.$p1->sex.”<br>”;
echo “年龄:”.$p1->age.”<br>”;
?>

get() 方法:这些措施用来取得个人成员属性值的,有一个参数,
参数传入你要收获的积极分子属性的称谓,再次来到获取的属性值,
那一个方法毫无大家手工的去调用,
是在一向获得个人属性的时候自动调用的。因为个人属性已经被封装上了,是不可以一直拿走值的(比如:”echo
$p1->name”
那样向来获得是荒唐的),然而一旦您在类里面添加了那几个艺术,在动用”echo
$p1->name”
那样的讲话直接拿走值的时候就会自行调用__get($property_name)方法,将性能name传给参数$property_name,通过那个艺术的里边实施,重返大家传入的个体属性的值。

 

程序执行结果:
在直接设置个人属性值的时候,自动调用了这些__set()方法为私有性能赋值在直接设置个人属性值的时候,自动调用了这几个__set()方法为私有性能赋值
在一贯设置个人属性值的时候,自动调用了那个__set()方法为私有总体性赋值
在直接获得个人属性值的时候,自动调用了那个__get()方法
姓名:张三
在一贯拿走个人属性值的时候,自动调用了那么些__get()方法
性别:男
在直接获取个人属性值的时候,自动调用了那个__get()方法
年龄:20
如上代码如若不丰盛__get()和__set()方法,程序就会出错,因为不可以在类的外部操作私
有成员,而地方的代码是由此自行调用__get()和__set()方法来帮衬我们直接存取封装的村办
成员的。
__isset()方法:在看那一个措施之前大家看一下“isset()”函数的采纳,isset()是测定变量是或不是设定用的函数,传入一个变量作为参数,如若传入的变量存在则传出true,否则传回false。
那就是说只要在一个目的外面使用“isset()”那几个函数去测定对象里面的成员是或不是被设定可以仍然不可以
用它吗?分三种景况,假如目的里面成员是国有的,大家就可以运用那么些函数来测定成员属
性,若是是私房的成员属性,这些函数就不起功用了,原因就是因为个人的被打包了,在外
部不可见。那么大家就不可以
在对象的表面使用“isset()”函数来测定私有成员属性是或不是被设定了吗?可以,你假若
在类里面添加一个“__isset()”方法就足以了,当在类外部使用“isset()”函数来测定对象里
面的私有成员是还是不是被设定时,就会自动调用类里面的“__isset()”方法了帮大家已毕如此的操
作,“__isset()”方法也可以做成私有的。你可以在类里面添加上边那样的代码就可以了:
代码片段

__set()
方法:这么些法子用来为民用成员属性设置值的,有三个参数,第四个参数为您要为设置值的属性名,第三个参数是要给属性设置的值,没有重临值。那些措施一致不用我们手工去调用,是在间接设置个人属性值的时候自动调用的,同样属性私有的早已被封装上了,
假如没有__set()那一个措施,是不容许的, 比如:”$this->name=’zhangsan’
, 那样会出错,不过若是您在类里面添加了__set($property_name,
$value)这些点子,在直接给个人属性赋值的时候,就会自行调用它,把性能比如name传给$property_name,
把要赋的值”zhangsan”传给$value,通过这么些办法的推行,达到赋值的目标,
为了不传播不合法的值, 仍可以在这几个措施给做一下判定。代码如下:

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

复制代码 代码如下:

 

{

private function __isset($nm){
echo “当在类外部使用isset()函数测定私有成员$nm时,自动调用<br>”;
return isset($this->$nm);
}

 代码如下

return($this->$property_name);

__unset()方法:看那些办法以前呢,大家也先来看一下“unset()”那个函数,“unset()”
本条函数的机能是剔除指定的变量且传回true,参数为要去除的变量。那么只要在一个对象
外表去删除对象内部的积极分子属性用“unset()”函数好不好啊,也是分二种情况,若是一个
目的里面的分子属性是公有的,就可以运用这么些函数在目标外面删除对象的国有属性,若是
目的的分子属性是个人的,我利用这几个函数就从不权力去删除,但一样假设您在一个目标里
面加上“__unset()”这些方法,就可以在对象的表面去删除对象的民用成员属性了。在对象
其中添加了“__unset()”这几个艺术之后,在对象外部使用“unset()”函数删除对象内部的个体
分子属性时,自动调用“__unset()”函数来帮大家删除对象内部的村办成员属性,那一个艺术也得以在类的里边定义成私有的。在目的里面添加上边的代码就可以了:
代码片段

class Person  
{  
    //上面是人的积极分子属性, 都是包装的民用成员  
    private $name;  //人的名子  
    private $sex;    //人的性别  
    private $age;    //人的年龄  
 
    //__get()方法用来收获个人属性  
    function __get($property_name)  
    {  
        echo
“在向来得到个人属性值的时候,自动调用了那一个__get()方法<br>”;  
        if(isset($this->$property_name)) {  
            return($this->$property_name);  
        }else {  
            return(NULL);  
        }  
    }   
 
    //__set()方法用来安装个人属性  
    function __set($property_name, $value)  
    {  
        echo
“在直接设置个人属性值的时候,自动调用了这几个__set()方法为私有总体性赋值<br>”;  
        $this->$property_name = $value;  
    }  
}  
 
$p1=new Person();  
 
//直接为私有总体性赋值的操作, 会自动调用__set()方法进行赋值  
$p1->name=”张三”;  
$p1->sex=”男”;  
$p1->age=20;  
 
//直接获得个人属性的值, 会自动调用__get()方法,再次来到成员属性的值  
echo “姓名:”.$p1->name.”<br>”;  
echo “性别:”.$p1->sex.”<br>”;  
echo “年龄:”.$p1->age.”<br>”; 

}else

复制代码 代码如下:

class Person
{
    //上面是人的分子属性, 都是包装的私房成员
    private $name;  //人的名子
    private $sex;    //人的性别
    private $age;    //人的年龄

{

private function __unset($nm){
echo “当在类外部使用unset()函数来删除私有成员时自动调用的<br>”;
unset($this->$nm);
}

    //__get()方法用来获取个人属性
    function __get($property_name)
    {
        echo
“在间接获得个人属性值的时候,自动调用了这几个__get()方法<br>”;
        if(isset($this->$property_name)) {
            return($this->$property_name);
        }else {
            return(NULL);
        }
 }

return(NULL);

咱俩来看一个一体化的实例:
代码片段

    //__set()方法用来安装个人属性
    function __set($property_name, $value)
    {
        echo
“在一直设置个人属性值的时候,自动调用了这一个__set()方法为私有性能赋值<br>”;
        $this->$property_name = $value;
    }
}

}

复制代码 代码如下:

$p1=new Person();

}

<?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;
?>

//直接为私有性能赋值的操作, 会自动调用__set()方法进行赋值
$p1->name=”张三”;
$p1->sex=”男”;
$p1->age=20;

//__set()方法用来安装个人属性

出口结果为:
isset()函数测定私有成员时,自动调用
bool(true)
this is a person name
当在类外部使用unset()函数来删除私有成员时自动调用的
__set()、__get()、__isset()、__unset()那个法子都是咱们添加到目标里面的,在要求时
活动调用的,来成功在对象外部对目的内部私有属性的操作。

//直接得到个人属性的值, 会自动调用__get()方法,重临成员属性的值
echo “姓名:”.$p1->name.”<br>”;
echo “性别:”.$p1->sex.”<br>”;
echo “年龄:”.$p1->age.”<br>”;

private function __set($property_name, $value)

您可能感兴趣的作品:

  • PHP面向对象之旅:深刻精晓static变量与艺术
  • php面向对象中static静态属性和静态方法的调用
  • PHP面向对象三大特征学习(丰裕精通抽象、封装、继承、多态)
  • php 面向对象的一个事例
  • php面向对象的法门重载二种版本相比较
  • php学习笔记之面向对象编程
  • PHP面向对象的施用教程
    不难数据库连接
  • PHP面向对象——访问修饰符介绍
  • PHP 面向对象详解
  • PHP面向对象程序设计方法实例详解

程序执行结果:
在一向设置个人属性值的时候,自动调用了那些__set()方法为私有性能赋值
在直接设置个人属性值的时候,自动调用了这几个__set()方法为私有总体性赋值
在一贯设置个人属性值的时候,自动调用了那个__set()方法为私有性能赋值
在一向获得个人属性值的时候,自动调用了那么些__get()方法
姓名:张三
在直接得到个人属性值的时候,自动调用了那几个__get()方法
性别:男
在平素拿走个人属性值的时候,自动调用了这些__get()方法
年龄:20

{

如上代码即使不丰盛__get()和__set()方法,程序就会出错,因为不可能在类的外部操作私有成员,而地点的代码是透过活动调用__get()和__set()方法来支援大家直接存取封装的私有成员的。

$this->$property_name = $value;

__isset() 方法:在看这几个措施从前我们看一下 isset() 函数的行使,isset()
是测定变量是或不是设定用的函数,传入一个变量作为参数,即便传入的变量存在则传出
true,否则传回 false。

}


么如若在一个对象外面使用“isset()”那几个函数去测定对象里面的分子是不是被设定可不得以用它吧?分三种情景,如若目的里面成员是公有的,大家就足以
使用这一个函数来测定成员属性,假使是私有的积极分子属性,这几个函数就不起功能了,原因就是因为个人的被卷入了,在表面不可知。那么大家就不得以在目的的外表使
用“isset()”函数来测定私有成员属性是还是不是被设定了呢?能够,你要是在类里面添加一个“__isset()”方法就能够了,当在类外部使用
“isset()”函数来测定对象里面的个体成员是不是被设定时,就会活动调用类里面的“__isset()”方法了帮大家成功这么的操
作,“__isset()”方法也得以做成私有的。你能够在类里面添加下边那样的代码就可以了:

__get()方法:以此艺术用来博取个人成员属性值的,有一个参数,参数传入你要得到的积极分子属性的名号,再次来到获取的属性值,这些法子毫无大家手工的去调用,因为我们也得以把这么些点子做成私有的艺术,是在一向得到个人属性的时候对象活动调用的。因为个人属性已经被封装上了,是不可能平昔得到值的(比如:“echo
$p1->name”那样直接拿走是不当的),可是如若您在类里面添加了那几个方法,在应用“echo
$p1->name”那样的言辞直接获取值的时候就会自动调用__get($property_name)方法,将性能name传给参数$property_name,通过那个法子的中间推行,重回我们传入的村办属性的值。即使成员属性不封装成私有的,对象自我就不会去自动调用那些主意。
__set()方法:那么些法子用来为私有成员属性设置值的,有七个参数,第四个参数为您要为设置值的属性名,首个参数是要给属性设置的值,没有重返值。那么些措施一致不用大家手工去调用,它也足以做成私有的,是在直接设置个人属性值的时候自动调用的,同样属性私有的早已被封装上
 
了,要是没有__set()那个措施,是不允许的,比如:$this->name=‘zhangsan’,
那样会出错,可是一旦您在类里面添加了__set($property_name,
$value)那些办法,在一贯给个体属性赋值的时候,就会自动调用它,把性能比如name传给$property_name,
把要赋的值“zhangsan”传给$value,通过这几个法子的实践,达到赋值的目标。如若成员属性不封装成私有的,对象自我就不会去自动调用那些点子。为了不传播不合规的值,还是可以在那么些措施给做一下断定。代码如下:

 

 代码如下

 代码如下

<?php

private function __isset($nm)  
{  
    echo “当在类外部使用isset()函数测定私有成员$nm时,自动调用”;  
    return isset($this->$nm);  

class Person

private function __isset($nm)
{
 echo “当在类外部使用isset()函数测定私有成员$nm时,自动调用”;
 return isset($this->$nm);
}

{

__unset()
方法:看那几个形式以前呢,大家也先来看一下“unset()”这几个函数,“unset()”
这么些函数的功效是删除指定的变量且传回true,参数为要刨除的变量。那么只要在一个目的外部去删除对象内部的成员属性用“unset()”函数可不得以呢,也是分两种情形,假诺一个
对象里面的积极分子属性是公有的,就足以接纳这些函数在对象外面删除对象的国有属性,假诺对象的积极分子属性是私房的,我使用这么些函数就没有权力去删除,但一样要是您在一个目的里
面加上“__unset()”那么些法子,就足以在目的的外表去删除对象的民用成员属性了。在对象
里面添加了“__unset()”那么些艺术之后,在对象外部使用“unset()”函数删除对象内部的私有
成员属性时,自动调用“__unset()”函数来帮大家删除对象内部的个人成员属性,这么些措施也得以在类的里边定义成私有的。在对象里面添加下边的代码
就足以了:

//上面是人的成员属性, 都是包裹的私有成员

 

private $name;          //人的名子

 代码如下

private $sex;           //人的性别

private function __unset($nm)  
{  
    echo “当在类外部使用unset()函数来删除私有成员时自动调用的”;  
    unset($this->$nm);  

private $age;           //人的年纪

private function __unset($nm)
{
 echo “当在类外部使用unset()函数来删除私有成员时自动调用的”;
 unset($this->$nm);
}大家来看一个完好无损的实例:

//__get()方法用来得到个人属性

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()函数测定私有成员时,自动调用”;  
        return isset($this->$nm);  
    }  
    // __unset()方法  
    private function __unset($nm)  
    {  
        echo “当在类外部使用unset()函数来删除私有成员时自动调用的”;  
        unset($this->$nm);  
    }  
}  
$p1 = new Person();  
$p1->name = “this is a person name”;  
//
在应用isset()函数测定私有成员时,自动调用__isset()方法帮大家已毕,再次来到结果为true  
echo var_dump(isset($p1->name)) . “”;  
echo $p1->name . “”;  
//
在接纳unset()函数删除私有成员时,自动调用__unset()方法帮大家成功,删除name私有总体性  
unset($p1->name);  
// 已经被删去了, 所那行不会有出口  
echo $p1->name; 

private function __get($property_name)

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()函数测定私有成员时,自动调用”;
  return isset($this->$nm);
 }
 // __unset()方法
 private function __unset($nm)
 {
  echo “当在类外部使用unset()函数来删除私有成员时自动调用的”;
  unset($this->$nm);
 }
}
$p1 = new Person();
$p1->name = “this is a person name”;
//
在利用isset()函数测定私有成员时,自动调用__isset()方法帮我们成功,再次来到结果为true
echo var_dump(isset($p1->name)) . “”;
echo $p1->name . “”;
//
在运用unset()函数删除私有成员时,自动调用__unset()方法帮大家做到,删除name私有总体性
unset($p1->name);
// 已经被去除了, 所那行不会有出口
echo $p1->name;输出结果为:

{

isset()函数测定私有成员时,自动调用  
bool(true)  
this is a person name 

echo
“在间接获得个人属性值的时候,自动调用了那些__get()方法<br>”;

isset()函数测定私有成员时,自动调用
bool(true)
this is a person name当在类外部使用unset()函数来删除私有成员时自动调用的
__set()、__get()、__isset()、__unset()

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

那多少个艺术都是大家抬高到对象里面的,在急需时自动调用的,来成功在对象外部对目的内部私有属性的操作

{

return($this->$property_name);

}

else

{

return(NULL);

}

}

//__set()方法用来设置个人属性

private function __set($property_name, $value)

{

echo
“在直接设置个人属性值的时候,自动调用了那一个__set()方法为私有总体性赋值<br>”;

 

$this->$property_name = $value;

}

}

$p1=new Person();

//直接为私有性能赋值的操作, 会自动调用__set()方法举办赋值

$p1->name=”张三”;

$p1->sex=”男”;

$p1->age=20;

//直接得到个人属性的值, 会自动调用__get()方法,再次回到成员属性的值

echo “姓名:”.$p1->name.”<br>”;

echo “性别:”.$p1->sex.”<br>”;

echo “年龄:”.$p1->age.”<br>”;

?>

程序执行结果:
在从来设置个人属性值的时候,自动调用了那么些__set()方法为私有总体性赋值
在直接设置个人属性值的时候,自动调用了那几个__set()方法为私有性能赋值
在直接设置个人属性值的时候,自动调用了那些__set()方法为私有性能赋值
在一向得到个人属性值的时候,自动调用了这些__get()方法
姓名:张三
在直接得到个人属性值的时候,自动调用了这么些__get()方法
性别:男
在一向拿走个人属性值的时候,自动调用了这几个__get()方法
年龄:20
 
以上代码倘若不加上__get()和__set()方法,程序就会出错,因为不可能在类的外表操作私有成员,而地方的代码是由此自行调用__get()和__set()方法来辅助大家直接存取封装的个人成员的。
__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()
那多个章程都是大家抬高到对象里面的,在必要时自动调用的,来成功在目标外部对目标内部私有属性的操作

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website