Méthode php call class de la méthode statique à l'intérieur de la même classe mais non instanciée

php 5.3+

Désolé pour la longue question, mais je veux apprendre cette complètement.

Je sais que je ne peux pas appeler un non-statique de la même méthode de classe de l'intérieur d'une méthode statique, sans la classe instanciée comme un objet.

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

De recherche, j'ai trouvé certaines des approches intéressantes, mais vous vous demandez comment chaque approche affecte le code de l'environnement.

Mes questions sont ci-dessous:

Je pourrais instancier la classe comme un objet à l'intérieur de la méthode statique, pour accéder à la non-méthode statique

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

Q1 - quels sont les problèmes que cela pourrait-il provoquer ?
dans ma situation, la classe ne possède pas de constructeur, donc pas d'autres méthodes de la classe ni vars seraient touchés par l'instance. Serait-ce le nouvel objet, il suffit de prendre un peu d'espace dans la mémoire pendant l'exécution du script? Ne semble pas trop mauvais...


l'autre option serait de convertir le "data_all_get" de la méthode dans une méthode statique, de sorte qu'il pourrait être appelé à partir de l'intérieur de la méthode statique "showPeople", c'est à dire

self::showPeople()

la "data_all_get" la méthode est utilisée par d'autres méthodes dans la classe lorsqu'il est instancié comme un objet, pour définir la valeur de la private var, afin de réduire les voyages à la base de données, si elle est déjà définie. Je sais que c'est probablement ce qui pourrait être une partie d'une fonction constructeur, mais je n'ai jamais besoin de cette "Personne" de l'objet à instatiated plus d'une fois par script php requête, la classe est principalement utilisé pour les fonctions de groupe et de vars ensemble de l'organisation ...

Q2 - quelles sont les implications de "faire data_all_get" dans une méthode statique ?
y at-il? si la méthode est statique, mais il définit la valeur de la private var $people_array (ce qui n'est pas statique), je pense qu'var serait en mesure d'être mis à jour ou remplacée si l'objet a jamais besoin d'être instancié une deuxième fois dans une seule demande de script, correct? Plus depuis la propriété n'est pas statique d'autres méthodes de la classe peut accéder.

T3 - Pourrais-je appeler la méthode statique "data_all_get" autant de fois que je voulais, sans "casser quoi que ce soit" (une question piège IK).

T4 - T-il tout simplement utiliser de la mémoire supplémentaire à chaque fois que la méthode statique est appelé?

Merci

source d'informationauteur Steve Wasiura