【bf88必发唯一官网】php面向对象全攻略,PHP一些常用魔术点子

by admin on 2019年2月21日

魔术点子               
          调用方法                                     作用
__set               
   有多个参数 __set(属性名,属性值)                         
 修改私有质量
__get               
   有三个参数 __get(属性名)                               
查看私有属性
__isset             
    有二个参数 __isset(判断的属性名)                         
 用于检测私有属性是或不是存在
__unset             
    有2个参数 __unset(删除的属性名)                         
 用于删除私有属性
__call               
  有三个参数 __call(函数名,函数值)                           
若是class内并未这几个函数则履行这几个

__set() __get() __isset() __unset() 七个格局的使用
诚如的话,总是把类的天性定义为private,这更切合现实的逻辑。可是,
对品质的读取和赋值操作是13分频仍的,因而在PHP5中,预约义了多个函数”__get()”和”__set()”来博取和赋值其质量,以及检查属性的”__isset()”和删除属性的不二法门”__unset()”。

10.__set() __get() __isset() __unset()五个措施的使用
诚如的话,总是把类的性情定义为private,这更契合实际的逻辑。然而,对质量的读取
和赋值操作是尤其频仍的,由此在PHP5
中,预约义了七个函数“__get()”和“__set()”来获
取和赋值其性质,以及检查属性的“__isset()”和删除属性的主意“__unset()”。
上一节中,我们为各类属性做了设置和获取的艺术,在PHP5
中给大家提供了越发为属
性设置值和获取值的法子,“__set()”和“__get()”那五个主意,那七个章程不是默许存在的,
而是大家手工添加到类里面去的,像构造方法(__construct())一样,类里面添加了才会存在,
可以按下边的点子来添加这八个艺术,当然也得以按个人的品格来添加:
【bf88必发唯一官网】php面向对象全攻略,PHP一些常用魔术点子。代码片段

上一节中,大家为各种属性做了安装和获取的方法,在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()方法为私有质量赋值
在直接设置个人属性值的时候,自动调用了那一个__【bf88必发唯一官网】php面向对象全攻略,PHP一些常用魔术点子。set()方法为私有质量赋值
在直接得到个人属性值的时候,自动调用了这么些__get()方法
姓名:张三
在直接拿到个人属性值的时候,自动调用了那些__get()方法
性别:男
在间接得到个人属性值的时候,自动调用了这几个__get()方法
年龄:20
以上代码如果不拉长__get()和__set()方法,程序就会出错,因为不能够在类的外表操作私
有成员,而地点的代码是透过活动调用__get()和__set()方法来协理大家直接存取封装的私家
成员的。
__isset()方法:在看这个法子从前大家看一下“isset()”函数的利用,isset()是测定变量是不是设定用的函数,传入2个变量作为参数,假如传入的变量存在则传出true,否则传回false。
那么一旦在三个对象外面使用“isset()”这几个函数去测定对象里面的分子是或不是被设定可不得以
用它吗?分二种意况,若是目标里面成员是国有的,大家就可以运用这么些函数来测定成员属
性,假使是个人的积极分子属性,那些函数就不起作用了,原因就是因为个人的被装进了,在外
部不可知。那么大家就不可以
在对象的外部使用“isset()”函数来测定私有成员属性是或不是被设定了吗?可以,你假若
在类里面添加二个“__isset()”方法就足以了,当在类外部使用“isset()”函数来测定对象里
面的私有成员是不是被设定时,就会活动调用类里面的“__isset()”方法了帮咱们成功如此的操
作,“__isset()”方法也得以做成私有的。你可以在类里面添加上面这样的代码就可以了:
代码片段

__set()
方法:那一个方法用来为个人成员属性设置值的,有五个参数,首个参数为你要为设置值的属性名,第1个参数是要给属性设置的值,没有再次回到值。那么些主意一致不用我们手工去调用,是在直接设置个人属性值的时候自动调用的,同样属性私有的早已被封装上了,
假诺没有__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;  
 
//直接拿到个人属性的值, 会自动调用__bf88必发唯一官网,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 面向对象的3个例证
  • php面向对象的方法重载两种版本比较
  • php学习笔记之面向对象编程
  • PHP面向对象的运用教程
    简单数据库连接
  • PHP面向对象——访问修饰符介绍
  • PHP 面向对象详解
  • PHP面向对象程序设计格局实例详解

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

{

上述代码假诺不加上__get()和__set()方法,程序就会出错,因为不或许在类的表面操作私有成员,而地点的代码是由此自行调用__get()和__set()方法来扶持大家直接存取封装的个体成员的。

$this->$property_name = $value;

__isset() 方法:在看这一个办法以前我们看一下 isset() 函数的施用,isset()
是测定变量是不是设定用的函数,传入3个变量作为参数,假使传入的变量存在则传出
true,否则传回 false。

}


么即使在八个对象外面使用“isset()”那个函数去测定对象里面的成员是不是被设定可以如故不可以用它呢?分两种境况,如若目标里面成员是公有的,我们就可以使用那几个函数来测定成员属性,借使是私家的分子属性,那一个函数就不起成效了,原因就是因为个人的被打包了,在表面不可见。那么大家就不能够在对象的外表使
用“isset()”函数来测定私有成员属性是还是不是被设定了吗?可以,你若是在类里面添加1个“__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()是测定变量是或不是设定用的函数,传入2个变量作为参数,假如传入的变量存在则传出true,否则传回false。那么只要在二个目的外面使用“isset()”那么些函数去测定对象里面的成员是还是不是被设定行不行用它呢?分二种情况,如若目的里面成员是公有的,我们就能够利用那么些函数来测定成员属性,即便是私房的分子属性,那么些函数就不起效能了,原因就是因为个人的被打包了,在表面不可知。那么大家就不可以在对象的外表使用“isset()”函数来测定私有成员属性是或不是被设定了吗?可以,你假诺在类里面添加3个“__isset()”方法就足以了,当在类外部使用”isset()”函数来测定对象里面的村办成员是还是不是被设定时,就会活动调用类里面的“__isset()”方法了帮大家成功如此的操作,“__isset()”方法也足以做成私有的。你可以在类里面添加上面那样的代码就足以了:

 代码如下

private function __isset($nm)

{

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

return isset($this->$nm);

}

__unset()方法:看那些方法此前呢,我们也先来看一下“unset()”那几个函数,“unset()”那一个函数的功效是剔除钦命的变量且传回true,参数为要删减的变量。那么一旦在二个对象外部去删除对象内部的分子属性用“unset()”函数可不可以吧,也是分二种情景,假如一个目的里面的成员属性是国有的,就可以使用那些函数在目的外面删除对象的公有属性,如若目标的成员属性是个人的,小编利用这些函数就从不权力去删除,但同样借使您在2个目的里面添加“__unset()”那个办法,就可以在目的的表面去删除对象的个体成员属性了。在对象里面添加了“__unset()”这一个方法之后,在对象外部使用“unset()”函数删除对象内部的村办成员属性时,自动调用“__unset()”函数来帮
咱俩删除对象内部的村办成员属性,这几个法子也足以在类的中间定义成私有的。在对象里面添加上边的代码就足以了:

 代码如下

private function __unset($nm)

{

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

unset($this->$nm);

}

咱俩来看2个完好无损的实例:

<?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()
那五个艺术都是大家添加到目的里面的,在急需时自动调用的,来落成在目的外部对目的内部私有属性的操作

发表评论

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

网站地图xml地图