phpbar.de logo

Mailinglisten-Archive

[php] OOP

[php] OOP

Beni Buess beni.buess at swisslog.com
Don Sep 30 17:55:17 CEST 2004


Christoph Rust wrote:
> Hi Liste!
> 
> Mal wieder ne Frage zu PHP5 und OOP.
> Wenn man eine Variable oder Methode mit "protected" deklariert, kann man 
> doch nur darauf zugreifen, wenn der Zugriff innerhalb der eigenen Klasse 
> passiert, oder wenn die Klasse die darauf zugreifen will, von der 
> Haupt-/Elternklasse abgeleitet ist.
> 
> Beispiel:
> 
> <code>
> class foo {
> 
>    protected $var = "value of var";
> 
>    protected static function method(){
>       return "value of method";
>    }
> 
> }
> 
> class bar extends foo {
> 
>    public static function getVar(){
>       return parent::$var;
>    }
> 
>    public static function callMeethod(){
>       return parent:method();
>    }
> 
> }
> 
> echo foo::getVar();
> echo foo::callMethod();
> 
> }
> </code>

die klasse foo implementiert weder eine methode getVar() noch eine 
Methode callMethod().
also:
echo bar::getVar();
echo bar::callMethod();

echo bar::getVar() wird dir einen error geben, da bar::getVar() statisch 
auf die variable foo::$var zugreift, diese ist allerdings nicht statisch 
deklariert.
sieht die deklaration so aus:
protected static $var = "value of var";
dann geht das ohne probleme.

ps: tipfehler musst du natürlich noch korrigieren....

> 
> Bei diesem Beispiel bekomme ich beim Methodenaufruf ("echo 
> foo::callMethod()") wie gewünscht den Wert "value of method" zurück, der 
> dann ausgegeben wird.
> Wenn ich aber die Methode "foo::getVar()" aufrufe, bekomme ich einen 
> Laufzeitfehler, mit:
> *Fatal error*: Cannot access private property foo::$var in ...
> Wie kann das sein, dass es bei der Methode funktioniert und bei der 
> Variablen nicht?
> Ist das irgendwie ein Bug?
> 
> M.f.G.
> 
> 
> 


____________________________________________________________
This message may contain legally privileged or confidential 
information and is therefore addressed to the named persons only. 
The recipient should inform the sender and delete this message, 
if he/she is not named as addressee. 
The sender disclaims any and all liability for the integrity 
and punctuality of this message. 
The sender has activated an automatic virus scanning by 
Messagelabs, but does not guarantee the virus free 
transmission of this message.

php::bar PHP Wiki   -   Listenarchive