2016-04-07 14 views
2

基本クラスではなく拡張クラスからプロパティの値を設定しようとするとエラーが発生しませんか?PHPプライベート変数が拡張クラスで動作するのはなぜですか?

<?php 
class first{ 
    public $id = 22; 
    private $name; 
    protected $email; 
    public function __construct(){ 
     echo "Base function constructor<br />"; 
    } 
    public function printit(){ 
     echo "Hello World<br />"; 
    } 
    public function __destruct(){ 
     echo "Base function destructor!<br />"; 
    } 
} 
class second extends first{ 
    public function __construct($myName, $myEmail){ 
     $this->name = $myName; 
     $this->email = $myEmail; 
     $this->reveal(); 
    } 
    public function reveal(){ 
     echo $this->name.'<br />'; 
     echo $this->email.'<br />'; 
    } 
} 
$object = new second('sth','[email protected]'); 

?> 
+3

いいえ、親クラスのプライベートプロパティにアクセスすることはできません(存在していることさえ知らない)ので、拡張クラス –

+0

に新しいpublicプロパティを作成するだけです。 '$オブジェクトの' var_dump' 'あなたが答えを持っていると思います –

答えて

1

プライベート変数はサブクラスではアクセスできません。アクセス修飾子protectedが対象です。ここでは、存在しない変数にアクセスすると、既定のアクセス修飾子がpublicで作成されます。ここで

はあなたの状態を表示するUMLです:

enter image description here

ご注意:サブクラスはまだそのスーパークラスからのすべてのpublicprotectedメソッドと変数へのアクセスを持っている - しかし、UMLではありませんダイアグラム!

+0

_アクセス修飾子' protected'は何のためですか? - あなたは 'private'を意味していますか?打ち間違え? – Federkun

+0

@Federicoいいえ、 'protected'でサブクラスは変数にアクセスできます。 privateの場合、サブクラスはアクセス権を持ちません。 _ "それはアクセス修飾子' protected'が "._ – st2erw2od

+0

のためのものです。それは間違っています。 – Federkun

関連する問題