2016-04-07 20 views
2

Bir özelliğin değerini bir temel sınıf yerine genişletilmiş sınıftan ayarlamaya çalıştığımda hata oluşturmamalıdır?PHP özel değişkenleri neden genişletilmiş sınıfta çalışıyor?

<?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

Hayır, üst sınıftaki özel mülke erişemiyor (var olduğunu bile bilmiyor), böylece genişletilmiş sınıfta yeni bir ortak özellik yaratıyor –

+0

sadece 'var_dump'' '$ object “Bence cevaba sahip olacaksınız –

cevap

1

Özel değişkenlere alt sınıflarda erişilemez. Bu, protected erişim değiştiricisinin ne için olduğunu. Burada olan şey, mevcut olmayan bir değişkene eriştiğinizde, public'un varsayılan erişim değiştiricisiyle sizin için bir tane oluşturmasıdır. - ama UML olmayan alt sınıf hala süper sınıftan tüm public ve protected yöntem ve değişkenler erişebilir:

enter image description here

unutmayın: Burada

size durumunu göstermek için UML olduğunu diyagram!

+0

_Kullanıcı tarafından sağlanan '' korumalı '' değiştirici nedir? ... 'özel' mi demek istiyorsun? typo? – Federkun

+0

@Federico no, "korumalı" alt sınıfın değişkene erişimi vardır. "Özel" ile alt sınıfın erişimi yoktur. _ "Bu," korumalı "erişim değiştiricisinin" " – st2erw2od

+0

için uygun olduğunu, yanlış yorumladım. – Federkun

İlgili konular