ホームページ > バックエンド開発 > PHPチュートリアル > PHPのアクセス制御に関する質問

PHPのアクセス制御に関する質問

WBOY
リリース: 2016-06-20 12:49:14
オリジナル
1036 人が閲覧しました

class MyClass{    public $public       = 'public';    protected $protected = 'protected';    private  $private    = 'private';        function printHello(){        echo $this->public;        echo $this->protected;        echo $this->private . "<br/>";    }}$obj = new MyClass();$obj->printHello();class MyClass2 extends MyClass{       function printHello(){        echo $this->public;        echo $this->protected;        echo $this->private . "<br/>";    }}$obj2 = new MyClass2();$obj2->printHello();   // 输出 Public、Protected 和 Undefinedclass MyClass3 extends MyClass{   }$obj3 = new MyClass3();$obj3->printHello();   // 输出 Public、Protected 和 private
ログイン後にコピー

$obj3->printHello の private に値があるのはなぜですか? private 定義されていないクラス メンバーには、そのメンバーが配置されているクラスからのみアクセスできます。


ディスカッション (解決策) への返信


MyClass の printHello をオーバーライドする printHello が MyClass2 にあります。
そして、MyClass2 は、MyClass2 の printHello メソッドに MyClass の $privite を読み取る権限がないため、MyClass の $private を未定義として呼び出します。

MyClass3 には printHello がないため、$obj3->printHello は実際には MyClass の printHello を呼び出します
MyClass printHello メソッドには、Myclass $private を読み取る権限があります。したがって、$obj3->printHello は、MyClass の $private

が MyClass2 に printHello を持っていることを示し、これが MyClass の printHello をオーバーライドします。
そして、MyClass2 は、MyClass2 の printHello メソッドに MyClass の $privite を読み取る権限がないため、MyClass の $private を未定義として呼び出します。

MyClass3 には printHello がないため、$obj3->printHello は実際には MyClass の printHello を呼び出します
MyClass printHello メソッドには、Myclass $private を読み取る権限があります。つまり、$obj3->printHello は MyClass の $private


を表示できます。これは、MyClass3 の printHello メソッドが MyClass から継承しており、printHello メソッドがパブリックであり、MyClass3 のヒープ内の printHello が依然として を指しているためでしょうか。 MyClass の場所の printHello。

正解は2階です! ! ! !

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート