• 微信号
  • 微信号
目录

PHP基础

您当前的位置:首页 > 我的笔记 > PHP基础>php类的封装

上一篇: 特殊的$this

下一篇: php对象的创建

php类的封装

所谓类的封装就是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰。

私有化的属性只能它所在类中被访问,为了能让外界访问私有属性。php提供了两种形式进行访问

1.通过getXxx()和setXxx()方法访问私有属性

在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(); 
?>

运行结果

2.通过__get()和__set()方法访问私有属性

使用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,它们可以对类中成员的访问作出一些限制

  • public:公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问这个类的成员。如果类的成员没有指定访问修饰符,则默认为public
  • protect:保护成员修饰符,被修饰为protected的成员不能被该类的外部代码访问,但是对于该类的子类可以对齐访问、读写等
  • private:私有修饰符,被定义为private成员,对于同一个类里的所有成员的是可见的,即没有访问限制,但不允许该类外部的代码访问,对于该类的子类同样也不能访问

需要注意的是,在php4中所有的属性都用关键字var声明,它使用效果和使用public一样,因为考虑到向下兼容,php5保留了对var的支持,但会将var自动转换为public

上一篇: 特殊的$this

下一篇: php对象的创建