6.2.6 类的访问控制
在PHP5 中,引入了类的访问控制符,这样可以控制类的属性和方法的可见性。在PHP5
中支持以下3 种访问控制符。
(1)public 控制符。该控制符是默认的,如果不指定一个属性的访问控制,则默认是
public。public 表示该属性和方法在类的内部或者外部都可以被直接访问。
第6 章 PHP 与面向对象程序设计 191
(2)private 控制符。该控制符说明属性或者方法只能够在类的内部进行访问。如果没有
使用__get()和__set()方法,则可能会对所有的属性都使用这个关键字,也可以选择使得部分
方法为私有的。注意,私有属性和方法不能被继承。
(3)protected 控制符。该控制表示被标记的属性或者方法只能在类的内部进行访问。它
也存在于任何子类中。
下面的代码添加了访问控制符:

class classname
 {
 public $myAttrib; //定义属性
 public function __get($attribName) //获取属性值的函数
 {
 return $this->$ attribName; //返回该属性值
 }
 public function __set($attribName,$value) //设置属性值的函数
 {
 $this->$attribName=$value; //设置属性值
 }
 }


上述代码中,每个类成员都具有一个访问修饰符,说明它们是公有的还是私有的。可以
不添加public 关键字,因为它是默认的控制符。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
  <head>
   <title> get_set.php </title>
   <meta charset="UTF-8">
   <meta name="Author" content="">
   <meta name="Keywords" content="">
   <meta name="Description" content="">
  </head> <body>
  <?php
 class classname
 {
     private $myAttrib; //定义属性
  
  function __get($attribName) //获取属性值的函数
  {
   echo "get $attribName:{$this->$attribName}<br>";
  return $this->$attribName; //返回该属性值
  }
  function __set($attribName,$value) //设置属性值的函数
  {
   echo "set $attribName:{$value}<br>";
  $this->$attribName=$value; //设置属性值
  }
  
 }$newclass=new classname(); //创建一个类classname 实例
 $newclass-> myAttrib="小马";
 $myVal=$newclass-> myAttrib;
 var_dump($myVal);
 ?>
  </body>
 </html>set myAttrib:小马
 get myAttrib:小马 
string '小马' (length=6)