>  기사  >  백엔드 개발  >  php5의 oop6 가시성 제어를 위한 샘플 코드 공유

php5의 oop6 가시성 제어를 위한 샘플 코드 공유

黄舟
黄舟원래의
2017-07-02 10:54:011147검색

다른 언어와 마찬가지로 public, protected 및 private 키워드로 제한됩니다.

<?php 
/** 
 * 定义MyClass 
 */ 
class MyClass 
{ 
        public $public = &#39;Public&#39;;//公有 
        protected $protected = &#39;Protected&#39;;//保护 
        private $private = &#39;Private&#39;;//私有 
 
        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 = &#39;Protected2&#39;; 
 
        //重写    
        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 
 
?>

물론 이러한 액세스 제어 기호를 통해 functions에 대해 동일한 액세스 제어를 달성할 수도 있습니다.

<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.