魔术方法

来源:互联网 发布:卖家淘宝分销在哪里 编辑:程序博客网 时间:2024/04/28 23:32
 

  有__set()  __get()   __isset()  __unset() 等

 

在php使用中会有很多的预定义方法,而这些方法大部分是需要在类中声明,需要用的的时候才会添加到类中。

他们在使用时的方法,作用,使用参数列表还有返回值都是已经规定好的。每个预定义方法都有自己的作用。

在使用时是在需要的时候自动调用的。

在声明类时有公有 私有 保护 等一般情况下把类定义为private的,这样更符合实际,能起到保护作用。

__set()  __get() 是预定义方法

 __isset() 是用来检查私有属性是否存在的方法 

 __unset()   用来删除对象中私有属性的方法

 

__set()  因为使用private以后会需要繁琐的操作 , 而使用__set()可以解决, 控制在对象外部只能为私有成员属性赋值,不能获取私有属性的值.

  需要在声明类时自己将它添加到类中使用

如 void __set(string name.mixed value)  方法体的内容需要自定义

 

<?php

class Persion{    //声明一个persion的人类,其中包含的三个成员属性被封装起来

    //下面是声明人的成员属性,全部使用了private关键子封装

private $name;

private $sex;

private $age;

//声明一个构造方法,将来创建对象时,为对象的成员属性赋予初值

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

$this->name=$name;

$this->sex=$sex;

$this->age=$age;

 

}

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

private function __set($propertyName,$propertyValue){

if($propertyName=="sex"){

if(!($propertyValue=="男"||$propertyValue=="女"))

return;

}

 

if($propertyName=="age"){

if(!($propertyValue>150||$propertyValue<0))

return;

}

$this->$propertyName=$propeValue;

}

public function say(){

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

}

}

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

$person1->name=”李四”;

$person1->sex=””;

$person1->age=”40”;

$person1->sex=”保密”;

$person->age=”800”;

$person->say();

结果: 我的名字叫:李四性别: 我的年龄是40

 

 

?>