php call-Klasse-Methode statische Methode innerhalb derselben Klasse aber noch nicht instanziiert

php 5.3+

Sorry für die lange Frage, aber ich will lernen, diese völlig.

Ich weiß, ich kann nicht rufen Sie eine nicht-statische gleichen Klasse Methode innerhalb einer statischen Methode, ohne dass die Klasse instanziiert wird als ein Objekt.

class Person 
{
    private $people_array;

    function data_all_get()
    { //touch database, return array of people
      $this->people_array = //etc dbquery results
    }

    static function showPeople()
    {  //call class method
       $people_data = $this->data_all_get();
       //Fatal error: Using $this when not in object context
    }
} //end class Person

Suche auf SO, fand ich einige interessante Ansätze, aber Frage mich, wie jeder Ansatz wirkt sich auf die code-Umgebung.

Meine Fragen sind wie folgt:

Ich könnte instanziieren Sie die Klasse wie ein Objekt in der statischen Methode, um Zugriff auf die nicht-statische Methode

static function showPeople()
{  //instantiate as object
   $person = New Person();
   //call class method
   $people_data = $this->data_all_get();
}

Q1 - welche Probleme könnte das hervorrufen ?
in meiner situation, die Klasse hat keinen Konstruktor, also keine andere Klasse Methoden noch vars betroffen wären von der Instanz. Würde das neue Objekt einfach nehmen ein wenig Platz im Speicher während der Skript-Ausführung? Scheint nicht allzu schlecht...


die andere option wäre, zu konvertieren, die "data_all_get" - Methode in einer statischen Methode, die so genannt werden könnte von innen die statische Methode "showPeople", d.h.

self::showPeople()

"data_all_get" - Methode verwendet wird, durch andere Methoden in der Klasse, wenn es instanziiert wird, als ein Objekt, um den Wert von private var, reduzieren sich die Fahrten auf die Datenbank, wenn es bereits gesetzt ist. Ich weiß, das könnte wahrscheinlich werden Sie Teil einer Konstruktor-Funktion, aber ich habe nie eine Notwendigkeit für diese "Person" Objekt instatiated mehr als einmal pro php-Skript Anfrage, die Klasse wird hauptsächlich dazu verwendet, um die Gruppe Funktionen und vars gemeinsam für die Organisation ...

Q2 - was sind die Auswirkungen des "data_all_get" in eine statische Methode ?
gibt es irgendwelche? wenn die Methode statisch sei, sondern es setzt den Wert des privaten var $people_array (ist nicht statisch), ich denke, dass var in der Lage sein würde, zu werden, aktualisiert oder überschrieben werden, wenn das Objekt, das jemals benötigt, um instanziiert zu werden ein zweites mal in einem einzigen Skript Anfrage, korrekt? Plus, da die Eigenschaft nicht andere statische Methoden der Klasse darauf zugreifen können.

Q3 - Könnte ich rufen Sie die statische Methode "data_all_get" so oft, wie ich wollte, ohne "etwas zu zerbrechen" (eine geladene Frage, IK).

Q4 - Tut es einfach zusätzlichen Speicher jedes mal, wenn die statische Methode aufgerufen wird?

Danke

Ich weiß wirklich nicht verstehen, warum showPeople, wie Sie es hier aufgelistet ist eine statische Funktion. Der code, den Sie eingefügt haben oben sieht ziemlich standard OO-code, und wie Sie bereits erwähnt, wenn Sie einfach instanziieren Sie die Klasse sowieso, dann gibt es keinen Grund, diese laufen statisch. Ich denke, der beste Weg, zu denken, statische Methoden sind wie die standalone-Funktionen, gekapselt in einer Klasse. (Für mich sowieso). Von dem, was du beschreibst, ist einfach die statische nennen, aber wenn Sie benötigen, um es zu verwenden, ich denke, dass der code, den Sie oben eingefügt werden sollte, fine (Instanziierung der Klasse).
vielen Dank für das feedback. ich mache die Methode static, damit es aufgerufen werden kann, aus anderen Gegenden / Strecken von der Anwendung, ohne zu instanziieren Sie ein Objekt zuerst (wie eine include-Datei in einem pre-oop-Welt). ich habe getan, einige weitere Forschungs - & - Prüfung und ich bin derzeit Neigung zu machen, die die Eigenschaften der statischen auch, und die andere Klasse von Methoden, müssen diese Eigenschaften statisch, so dass diese statische Klasse, nennen wir Sie. es jetzt arbeiten...
update: ich habe umgestaltet und aus den Elementeigenschaften, die statische und die getter & setter-Funktionen statisch, so dass Sie kann aufgerufen werden, indem Sie sowohl die statische member-Methode und die Klasse Methoden, und es funktioniert. möchte aber trotzdem alle Kommentare und Vorschläge Sie haben über meine 4 Fragen, die oben aufgeführt sind, vielen Dank.

InformationsquelleAutor Steve Wasiura | 2012-10-24

Schreibe einen Kommentar