<?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的可见性控制的示例代码分享的详细内容。