2017-10-14 23 views
1

私はこのトピックを理解していません。派生クラスがプライベートメンバーの基本クラスにアクセスするのはなぜですか?派生クラスがベースクラスのプライベート属性にアクセスするのはなぜですか?

<?php 
class A{ 
private $name; // private variable 
private $age; //private variable 
} 
class B extends A{ 
public function Display($name,$age){ 
echo $this->name=$name." age is ".$this->age=$age; 
    } 
} 

$ob=new B(); 
$ob->Display("xyz",23); 
?> 

出力: のxyz年齢、彼らはプライベートですので、Bクラスは、$name$ageプロパティを継承していない23

+0

'' 'private'''の代わりに' '' '' '' '' '' '' '' '' '' '' –

答えて

2

です。

しかし、PHPは、あなたが最初のクラスのプロパティとしてそれらを宣言せずに変数を割り当てることができます:

<?php 
class A 
{ 
    private $name; // private variable 
    private $age; //private variable 

    public function __construct() 
    { 
     $this->name = "a"; 
    } 
} 
class B extends A 
{ 
    public function display($name, $age) { 
     $this->name2 = $name; // new name2 variable, NOT A's name 
     $this->age2 = $age; // new age2 variable, NOT A's age 
     echo $this->name2." age is ".$this->age2.PHP_EOL; 
     echo $this->name; // A's name, undefined property warning! 
    } 
} 

$ob=new B(); 
$ob->display("xyz", 23); 

Demo

XYZ年齢は私がname2を使用する方法23

お知らせですnameおよびageの代わりにage2、th e出力はまだ正しいです。ご覧のとおり、A::$nameにアクセスしていませんが、B::$name2B::display()に定義されており、アクセスしようとするとA::$nameは未定義のプロパティ警告を表示します。

これは、直感的ではありませんが、これはPHPの予想される動作です。

関連する問題