2016-04-07 14 views
2

Sollte es keinen Fehler erzeugen, wenn ich versuche, den Wert einer Eigenschaft aus der erweiterten Klasse statt einer Basisklasse zu setzen?Warum arbeiten private PHP-Variablen in der erweiterten Klasse?

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

Nein, es kann nicht auf die private Eigenschaft in der Elternklasse zugreifen (weiß nicht einmal, dass es existiert), also erstellt es eine neue öffentliche Eigenschaft in der erweiterten Klasse –

+0

machen Sie einfach die 'var_dump' von' $ object 'Ich denke, Sie werden die Antwort haben –

Antwort

1

privaten Variablen sind in Unterklassen nicht zugänglich. Das ist der Zugriffsmodifikator protected für. Was passiert ist, wenn Sie auf eine nicht vorhandene Variable zugreifen, erstellt diese eine mit dem Standardzugriffsmodifikator public.

Hier ist die UML Sie den Zustand zu zeigen:

enter image description here

Bitte beachten Sie: die Unterklasse immer noch Zugriff auf alle public und protected Methoden und Variablen von ihrer Oberklasse hat - aber sind nicht in der UML Diagramm!

+0

_Thats, was der Zugriffsmodifikator' geschützt' ist for._ - ... Sie meinen 'private'? Tippfehler? – Federkun

+0

@Federico nein, mit 'protected' hat die Unterklasse Zugriff auf die Variable. Mit 'privat' hat die Unterklasse keinen Zugriff. _ "Das ist der Zugriffsmodifikator' protected' für "._ – st2erw2od

+0

okay, ich habe es falsch gelesen. – Federkun