2013-08-14 13 views
5

Bemerken etwas über PHP-Klassen, und ich weiß nicht, ob es ein Fehler ist oder warum es funktioniert, das ist der Code:PHP-Klasse Privateigentum und Methode

<?php 
class A { 
    private $prop = 'value'; 

    public function fun() 
    { 
     $obj = new A; 
     $obj->echoProp(); 
    } 

    private function echoProp() 
    { 
     echo 'Prop has value: '.$this->prop; 
    } 
} 

$obj = new A; 
$obj->fun(); 

Und das Ergebnis ist kein Fehler, wie Ich habe damit gerechnet, dass ich eine private Methode anrufe (getestet mit PHP 5.3.10-1ubuntu3.7 mit Suhosin-Patch). Das Ergebnis ist "Prop hat Wert: Wert"

+0

Wie würden Sie erwarten, dass private Methoden anstelle von öffentlichen Methoden aufgerufen werden? – str

+0

Um genau zu sein, rufen Sie keine private Methode auf, sondern rufen eine öffentliche Methode auf, die die private Methode aufruft. Die public-Methode hat Zugriff auf die private Methode, aber der Aufruf von $ obj-> echoProp(); wird fehlschlagen, weil Sie in diesem Fall die private Methode aufrufen. Wenn Ihre Erwartung wahr war, konnte nichts eine private Methode aufrufen. – djheru

Antwort

2

Auf der PHP-Dokumentation http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects heißt es:

Sichtbarkeit von anderen Objekten

Objekte des gleichen Typs wird der Zugang zu der jeweils anderen haben private und geschützt Mitglieder, obwohl sie nicht die gleichen Instanzen . Dies ist , da die implementierungsspezifischen Details bereits bekannt sind, wenn innerhalb dieser Objekte.

Also das ist kein Bug, sondern ein gesuchtes Feature von PHP.

2

Solange Sie in der Klasse sind, können Sie die privaten Methoden Ihrer Klasse für jede Instanz aufrufen.