所谓类的封装就是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰。
私有化的属性只能它所在类中被访问,为了能让外界访问私有属性。php提供了两种形式进行访问
在php程序中,为了访问是由属性,可以手段编写公有的getXxx()和setXxx()方法,其中getXxx()方法用于获取属性值,setXxx()方法用于设置属性值。
案例
<?php
class person {
private $name;
private $age;
//定义getName和setName用于获取name属性的值
public function getName(){
return $this->name;
}
public function setName($value){
$this->name=$value;
}
//定义getAge和setAge用于获取age属性的值
public function getAge(){
return $this->age;
}
public function setAge($value){
if($value<0){
echo "年龄不合法<br>";
}else{
$this->age=$value;
}
}
}
$p=new person();
$p->setName("张三");
$p->setAge(-18);
echo "姓名:".$p->getName()."<br>";
echo "年龄:".$p->getAge();
?>
运行结果
使用getXxx()和setXxx()方法访问私有属性需要手段编写,当一个类有多个属性时,使用这种方法就会很麻烦。
因此,php预定义了__get()和__set()方法,其中__get()用于获取侧好难过元属性的属性值,__set()方法用于为私有属性赋值。这两种方法获取私有属性和设置私有属性都是自动调用的
案例
<?php
class person {
private $name;
private $age;
//定义 __get()方法用于获取person的属性
public function __get($property_name){
echo "自动调用__get()方法获取属性赋值<br>";
if(isset($this->$property_name)){
return($this->$property_name);
} else {
return(null);
}
}
//定义__set()方法用于设置person属性
public function __set($property_name,$value){
echo "自动调用__set()方法为属性赋值 <br>";
$this->$property_name=$value;
}
}
$p=new person();
$p->name="张三";
$p->age=18;
echo "姓名:".$p->name."<br>";
echo "年龄:".$p->age;
?>
运行结果
在php中,提供三个访问修饰符public、protected和private,它们可以对类中成员的访问作出一些限制需要注意的是,在php4中所有的属性都用关键字var声明,它使用效果和使用public一样,因为考虑到向下兼容,php5保留了对var的支持,但会将var自动转换为public
*声明:内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。