和其他語言一樣,也是透過關鍵字public,protected,private的限制:
<?php /** * 定义MyClass */ class MyClass { public $public = 'Public';//公有 protected $protected = 'Protected';//保护 private $private = 'Private';//私有 function printHello() { echo $this->public;echo "<br/>"; echo $this->protected;echo "<br/>"; echo $this->private;echo "<br/>"; } } $obj = new MyClass(); echo $obj->public; // 可以 //echo $obj->protected; // 致命错误 //echo $obj->private; // 致命错误 $obj->printHello(); // 输出 Public, Protected and Private /** * 定义 MyClass2 */ class MyClass2 extends MyClass { // 对于公有和保护方法或成员,我们可以重新声明,但私有的不可以 protected $protected = 'Protected2'; //重写 function printHello() { echo "这个是MyClass2的:";echo "<br/>"; echo $this->public;echo "<br/>"; echo $this->protected;echo "<br/>"; //echo $this->private;echo "<br/>";不能访问到父类的私有属性 } } $obj2 = new MyClass2(); echo $obj2->public; // 可以 //echo $obj2->private; // 未定义 //echo $obj2->protected; // 致命错误 $obj2->printHello(); // 输出 Public, Protected2, Undefined ?>
當然透過這些存取控制符,我們也可以對函數實現同樣的可存取控制:
<?php /** * 定义 MyClass */ class MyClass { // 构造函数必须是public public function construct() { } // 声明一个public 的方法 public function MyPublic() { } // 声明 protected 方法 protected function MyProtected() { } // 声明private 方法 private function MyPrivate() { } // 默认是public的 function Foo() { //类里面可以直接访问 $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // 可以 $myclass->MyProtected(); // 致命错误 $myclass->MyPrivate(); //致命错误 $myclass->Foo(); /** * 定义 MyClass2 */ class MyClass2 extends MyClass { //public function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // 致命错误 } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // 可以 $myclass2->Foo2(); /** * 定义Bar */ class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new Foo(); //通过继承来的公有方法Bar::test() $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?>
以上是php5中oop6的可見性控制的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!