PHP Private variable zugreifen vom Kind
so, ich bin versuchen zu arbeiten, eine Frage, die ich habe, in der Gestaltung von PHP-Klassen. Ich habe eine Basisklasse, die von privaten Variablen zugewiesen. Ich habe Kind-Klassen, die Erweiterung dieser Basis-Klasse, die Referenz und änderungen diese privaten Variablen durch Funktionen des Basis-Klasse. Hier ist ein Beispiel, halten Sie im Verstand ich bin immer noch verwirrt über den Unterschied zwischen private
und protected
Methoden/Variablen (lassen Sie mich wissen, wenn ich Tue, falsch!):
base.class.php
<?php
class Base {
private $test;
public function __construct(){
require('sub.class.php');
$sub = new Sub;
echo($this->getTest());
}
public function getTest(){
return $this->test;
}
protected function setTest($value){
$this->test = $value;
}
}
?>
sub.class.php
<?php
class Sub extends Base {
public function __construct(){
parent::setTest('hello!');
}
}
?>
So würde ich erwarten, dass das Ergebnis hello!
gedruckt auf dem Bildschirm - statt dessen gibt es nichts. Es könnte ein grundlegendes Missverständnis von Klassen auf mein Teil, oder vielleicht bin ich auch nur etwas falsch. Jede Beratung wird sehr geschätzt! Danke.
EDIT:
Danke an alle, die dazu beigetragen, eine Antwort - ich denke, trotz der guten Lösungen, die Kind-Klassen sind eigentlich nicht das, was ich brauche - es scheint delegate-Klassen sinnvoller sein, an dieser Stelle, da ich nicht wirklich brauchen, um die Referenz der Basis-Funktionen aus den anderen Klassen.
Versuchen Sie PHP5 OOP.
Es gibt keine
echo
oder print
Ausgabe etwas auf dem BildschirmDas funktioniert... Aber, dass das möglicherweise nicht praktikabel für meine Zwecke.
So haben Sie erfüllt, php-Erweiterung runkit, es erlaubt Sie, etwas zu ändern/jede Immobilie, egal ob privat, zur Laufzeit
InformationsquelleAutor iLoch | 2012-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte wie folgt sein:
base.class.php:
sub.class.php:
Haupt-code:
parent::
mit$this->
Ok, ich kann sehen, warum dies funktioniert, im Gegensatz zu mir, denke ich. Gibt es eine Möglichkeit, ich kann auf die Funktion setTest der Elternteil vom Kind-Funktion, so dass der code
$this->test = $value
setzt die variable für die Eltern, im Gegensatz zu dem Kind? Ich würde nämlich gerne nicht haben, um Anrufe zu tätigen, wenn ich Sie von der Kindes-Konstruktor. Ich wollen im Grunde, um den Zugriff auf die übergeordneten Funktionen, die nicht Erben.Ich bin nicht ganz nachvollziehen, was du meinst, aber nehmen Sie einen Blick auf meine bearbeiteten code. Ist es das, was Sie wollen?
Im wesentlichen, ja. Ich kann verstehen, wie es kann kompliziert zu verstehen - ich habe das Gefühl, meine interpretation ist nicht, wie es getan werden sollte. Lassen Sie mich versuchen zu erarbeiten.. ich habe die base und das Kind. Ich will das Kind zu manipulieren, die Basis-Funktion ist variabless, so dass beim Aufruf der Funktion setTest, der Verweis auf
$this
bezieht sich auf die Basis Funktion, nicht das Kind, das (in deinem Beispiel) geerbt hat, die Funktion von der Basis. Ist das möglich? So, anstelle des Erben eine Funktion, ich will es einfach so, dass Verweise auf$this
sind gehalten, die in den ursprünglichen Bereich (der Basis)Ein Weg, können Sie denken, es ist, wenn beide die
setTest
undgetTest
Funktionen, anstatt$this->
verwendetBase::
so, dass die Variablen waren immer geschrieben/Lesen auf/von der Basisklasse und nicht die Kind-Klassen.InformationsquelleAutor flowfree