Mit parent-Variablen in eine erweiterte Klasse in PHP
Ich habe 2 Klassen, main und extended. Ich muss an Haupt-vars in der erweiterten Klasse.
<?php
class Main {
public $vars = array();
}
$main = new Main;
$main->vars['key'] = 'value';
class Extended extends Main { }
$other = new Extended;
var_dump($other->vars);
?>
Kann ich es tun?
Nicht gültig, zum Beispiel:
<?php
class Extended extends Main {
function __construct ($main) {
foreach ($main as $k => $v) {
$this->$k = $v;
}
}
}
?>
Ich brauche eine Lösung für mehr Transparenz und Effizienz 🙂
Ich verstehe es nicht. Ich wäre mehr als glücklich, Ihre Frage zu beantworten, aber es ist nicht klar genug. Wollen Sie bauen "erweitert" wie ($obj = new Erweitert($main)) oder sind Sie auf der Suche nach static vars?
InformationsquelleAutor Lito | 2008-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN: Dies kann gelöst werden, viel besser mit Inversion of Control (IoC) und Dependency Injection (DI). Wenn Sie Ihren eigenen Rahmen oder ohne Dependency Injection Container versuchen Liga/Container
Antwort unten Links, wie es die Geschichte der dummen Antworten.
Den richtigen Weg, finde ich.
Ich bin nicht zu downmod aber Sie sind wirklich fehlt in der OOP-design-Bereich. Sie sollten NIE verlängern Config-Klassen - Config-Objekte in die Objekte, die Sie verzehren - nicht verlängert wird, in anderen Klassen. Sorry, aber das ist albern.
Mache ich das nicht, aber das, was der Kerl will. Es hat nicht von Anfang an so eine config-Klasse, aber das ist, was es stellte sich heraus zu sein...
Sagen Sie einfach Nein zu verewigen, sillyness 🙂 ich weiß nicht die Schuld der OP auch alle, aber wir sollten es besser wissen genug, um zu zeigen, dass die OP gemacht ein schlechtes design Wahl und beißen ihn in den Arsch HART, wenn er Bässe seine gesamte code-Struktur, Weg von diesem "anti-Muster" 🙂
Umgestrickt, um dies zu reflektieren ist eine config-Klasse nicht einige zufällige Main-Klasse, die es begann als.
InformationsquelleAutor OIS
Wäre es leicht möglich, mit einem einfachen Konstruktor
InformationsquelleAutor Chris
Ich weiß, das ist super alt, aber in Fall, jemand Bedürfnisse eine Ahnung...
Haben Sie als statische Variablen?
PHP OOP design pattern ist eine solche, die statisch deklarierte Variablen in einer Eltern Klasse bleiben die gleichen in der Kind Klasse, zu.
Zum Beispiel...
Dieser code ausgeführt (auf PHP 5.3 - ich bin sicher, es ist das gleiche für die anderen Versionen) geben Sie das folgende Ergebnis:
Test: ein
Von dem, was ich sammeln konnte in Ihrer OP sind Sie auf der Suche nach einem Weg für die übergeordneten Klasse Variablen zu bleiben - auch in großen Klassen. Dies löst dieses problem.
Nennen die Variablen, die öffentlich außerhalb der Gültigkeitsbereich der Klasse (also, wo würden Sie normalerweise schreiben $obj->vars), würden Sie brauchen, um eine Funktion zu erstellen, in der übergeordneten Klasse, die Verweise
self::$variable_name
so dass er werfen kann, dass die variable auf den code, der nutzt entweder die Klasse oder eine andere Klasse, die Sie erweitert.Zum Beispiel, etwas wie:
Könnten Sie auch schaffen eine Magische Methode, die dynamisch werfen zurück self::$variable basiert auf der Frage der Instanz - d.h. eine Methode oder eine variable. Sie könnten Draht, den code zurück zu werfen self::$variable entspricht in jedem Fall.
Lesen http://php.net/manual/en/language.oop5.magic.php für weitere Informationen über die verschiedenen magischen Praktiken, die es Ihnen ermöglichen, das zu tun diese Art von Sachen.
Die OP war ein bisschen kryptisch, so war ich nicht sicher, ob das ist genau das, was Sie wollte, aber ich wollte nicht sehen, jemand anderes hier Referenz-statische Variablen, also dachte ich würde Glockenspiel - hoffe es hilft!
InformationsquelleAutor Lee Benson
Ich glaube, Sie brauchen, um mehr klar, was Sie wollen. Vorstellen, dass Sie hatte mehrere Instanzen von Main und Extended. Sollten Sie beziehen sich alle auf die gleichen Daten, so dass, wenn Sie ändern die Daten in einer von Ihnen, Sie sind alle betroffen?
Wenn ja, dann ein Ansatz ist die Verwendung einer statischen Variablen, die gebunden ist an die Klasse anstatt der einzelnen Instanz. Eine andere ist, erstellen Sie ein separates Objekt (einer anderen Klasse) um Ihre Daten zu speichern, und übergeben Sie es an den Haupt-und Erweiterten Kursen, wenn Sie geschaffen sind. Sie konnte jedem speichern eine Referenz, z.B.:
Wenn nicht, dann willst du die Daten kopieren, anstatt Verweise auf die gleichen Daten. In diesem Fall, dein zweites Beispiel ist näher, obwohl ich würde nicht einfach blind kopieren Sie alle Mitglieder.
InformationsquelleAutor JW.
oooooooooooooooooooooooooooooooooooooooooooooooooooooh
du willst:
🙂
EDIT:
können, können Sie auch dies tun:
InformationsquelleAutor nlaq