魔术方法__set()
<?php
class Person {
//下面是声明人的成员属性,全都使用了private关键字封装
private $name; //此属性被封装
private $sex; //此属性被封装
private $age; //此属性被封装
function __construct($name="", $sex="男", $age=1) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
/**
声明魔术方法需要两个参数,直接为私有属性赋值时自动调用,并可以屏蔽一些非法赋值
@param string $propertyName 成员属性名
@param mixed $propertyValue 成员属性值
*/
private function __set($propertyName, $propertyValue) {
//如果第一个参数是属性名sex则条件成立
if($propertyName == "sex"){
//第二个参数只能是男或女
if(!($propertyValue == "男" || $propertyValue == "女"))
//如果是非法参数返回空,则结束方法执行
return;
}
//如果第一个参数是属性名age则条件成立
if($propertyName == "age"){
//第二个参数只能在0到150之间的整数
if($propertyValue > 150 || $propertyValue <0)
//如果是非法参数返回空,则结束方法执行
return;
}
//根据参数决定为那个属性被赋值,传入不同的成员属性名,赋上传入的相应的值
$this->$propertyName = $propertyValue;
}
//下面是声明人类的成员方法,设置为公有的可以在任何地方访问
public function say(){
echo "我的名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age."。<br>";
}
}
$person1 = new Person("张三", "男", 20);
//以下三行自动调用了__set()函数,将属性名分别传给第一个参数,将属性值传给第二个参数
$person1->name = "李四"; //动调用了__set()方法为私有属性name赋值成功
$person1->sex = "女"; //动调用了__set()方法为私有属性sex赋值成功
$person1->age = 80; //动调用了__set()方法为私有属性age赋值成功
$person1->sex = "保密"; //“保密”是一个非法值,这条语句给私有属性sex赋值失败
$person1->age = 800; //800是一个非法值,这条语句私有属性age赋值失败
$person1->say(); //调用$person1对象中的say()方法,查看一下所有被重新设置的新值
|