ホームページ >バックエンド開発 >PHPチュートリアル >php5 での oop6 可視性制御のサンプル コード共有

php5 での oop6 可視性制御のサンプル コード共有

黄舟
黄舟オリジナル
2017-07-02 10:54:011174ブラウズ

他の言語と同様に、キーワード 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 
 
?>

もちろん、これらの アクセス制御シンボルを通じて、関数に対しても同じアクセス制御を実現できます:

<?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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。