__set()、__get()、__isset()和__unset()四个方法

    __set()和 __get()两个方法用来完成对所有私有属性都能获取和赋值的操作,而__isset()方法用来检查私有属性是否存在,__unset()方法用来删除对象中的私有属性。

创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目网站制作、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元安州做网站,已为上家服务,为安州各地企业和个人服务,联系电话:18982081108

1、__set()方法

class person{

    private $name;

    private $sex;

    private $age;

    function __construct($name="",$sex="",$age=""){

        $this->name=$name;

        $this->sex=$sex;

        $this->age=$age;

    }

    /**

    声明魔术方法需要两个参数,直接为私有属性赋值时自动调用,并可以屏蔽一些非法赋值

    @param   string   $propertyname     成员属性名

    @param   string   $propertyvalue    成员属性值

    */

    public function __set($propertyname,$propertyvalue){

        //如果第一个参数是属性名sex则条件成立

        if($propertyname=="sex"){

            //第二个参数只能是男或女

            if(!($propertyvalue=="男"||$propertyvalue=="女")){

                //如果是非法参数返回空,则结束方法运行

                    return;

            }

        }

        if($propertyname=="age"){

            if($propertyvalue>150||$propertyvalue<0){

                return;

            }

        }

        //根据参数决定为哪个属性赋值,传入不同的成员属性名,赋上传入的相应的值

        $this->$propertyname=$propertyvalue;

    }

    //下面是声明人类的成员方法,设置为公有就可以在任何地方访问

    public function say(){

        echo "我的名字:".$this->name.";性别:".$this->sex.";年龄:".$this->age."
";

    }

}

$person1= new person("张三","男","40");     //括号中也可以不写

//以下三行自动调用了__set()函数,将属性名传给第一个参数,将值传给第二个参数

$person1->name="李四";

$person1->sex="女";

$person1->age="20";

$person1->say();

?>

程序运行结果为:

我的名字:李四;性别:女;年龄:20; //输出的是私有成员属性被重新设置的新值

2、__get()方法

   如果在类中声明了__get()方法,则直接在对象的外部获取私有属性的值时,会自动调用此方法,返回私有属性的值。并且可以在__get()方法中根据不同的属性,设置一些条件来限制对私有属性的非法取值操作。和__set()一样,需要在声明类时自己将它加到类中才可以使用。


class person{

 private $name;

 private $sex;

 private $age;

 function __construct($name="",$sex="",$age=""){

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

}

/**

在类中添加__get()方法,在直接获取属性值时自己条用一次,以属性名作为参数传入并处理

@param   string   $propertyname     成员属性名

@return  mixed                      返回属性值

*/

public function __get($propertyname){

if($propertyname=="sex"){

return "保密";

}elseif($propertyname=="age"){

if($this->age>30){

return $this->age-10;

}else{

return $this->$propertyname;

}

}else{

return $this->$propertyname;

}

}

}

$person1=new person("张三","男","20");

echo "姓名:".$person1->name."
";    //直接访问私有属性name,自动调用了__get()方法可以间接获取

echo "性别:".$person1->sex."
";     //自动调用了__get()方法,但在方法中没有返回真实属性值

echo "年龄:".$person1->age."
";     //自动调用了__get()方法,根据对象本身的情况会返回不同的值


3、__isset()方法

4、__unset()方法


分享文章:__set()、__get()、__isset()和__unset()四个方法
转载注明:http://scyanting.com/article/jhgdpp.html