13.访问类型 类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5 的新特性,但却 是OOP 语言的一个好的特性。而且大多数OOP 语言都已支持此特性。PHP5 支持如下3 种访 问修饰符 public (公有的、默认的),private (私有的)和protected (受保护的)三种。 public 公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写) 这个类成员(包括成员属性和成员方法),在PHP5 之前的所有版本中,PHP 中类的成员都是 public 的,而且在PHP5 中如果类的成员没有指定成员访问修饰符,将被视为public。 例:public $name; public function say(){}; private 私有修改符,被定义为private 的成员,对于同一个类里的所有成员是可见的,即 是没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不 能访问private 修饰的成员。 例:private $var1 = ‘A"; //属性 private function getValue(){} //函数 protected 保护成员修饰符,被修饰为protected 的成员不能被该类的外部代码访问。但是 对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的 子类都不具有访问其属性和方法的权限。 例:protected $name; protected function say(){}; private protected public 同一个类中 √ √ √ 类的子类中 √ √ 所有的外部成员 √ 代码片段 复制代码 代码如下: <?php /** * Define MyClass */ class MyClass{ public $public = "Public"; protected $protected = "Protected"; private $private = "Private"; function printHello(){ echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; //Works echo $obj->protected; // Fatal Error echo $obj->private; // Fatal Error $obj->printHello(); // Shows Public, Protected and Private /** * Define MyClass2 */ class MyClass2 extends MyClass{ //We can redeclare the public and protected method, but not private protected $protected = "Protected2"; function printHello(){ echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj->public; //Works echo $obj2->private; // Undefined echo $obj2->protected; // Fatal Error $obj2->printHello(); // Shows Public, Protected2, not Private ?>
代码片段 复制代码 代码如下: <?php /** * Define MyClass */ class MyClass{ // Contructors must be public public function __construct() { } // Declare a public method public function MyPublic() { } // Declare a protected method protected function MyProtected() { } // Declare a private method private function MyPrivate() { } // This is public function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); //Works $myclass->MyProtected(); // Fatal Error $myclass->MyPrivate(); // Fatal Error $myclass->Foo(); // Public, Protected and Private work /** * Define MyClass2 */ class MyClass2 extends MyClass{ // This is public function Foo2(){ $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // Fatal Error } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // Works $myclass2->Foo2(); // Public and Protected work, not Private ?>