2016-12-25 3 views
0

ich eine Codestruktur, wie dieses:Wie kann ich ein Objekt einmal für alle Methoden erstellen?

class myclass{ 

    use App/classes/Log 

    public function myfunc1() { 

     $log_obj = new Log; 
     $log_obj->log('something1');  

    } 
    public function myfunc2() { 

     $log_obj = new Log; 
     $log_obj->log('something2'); 

    } 
    public function myfunc3() { 

     $log_obj = new Log; 
     $log_obj->log('something3'); 

    } 
} 

In Wirklichkeit habe ich 12 Methoden, die ich ein Objekt von Log Klasse in der die meisten von ihnen zu machen brauchen. Jetzt möchte ich wissen, gibt es keinen besseren Ansatz, um das (ein Objekt) einmal zu machen? Verwenden Sie zum Beispiel eine static-Eigenschaft und setzen Sie das Objekt darauf oder was auch immer ..

+0

Wenn die Methode, die Sie aufrufen müssen, nicht statisch ist, dann ist das Erstellen eines Objekts, wie Sie es tun, der richtige Weg. – 121c

+0

Mögliches Duplikat von [Erstellen des Singleton-Entwurfsmusters in PHP5] (http://stackoverflow.com/questions/203336/creating-the-singleton-design-pattern-in-php5) –

+0

Warum nicht einfach die Log-Instanz zuweisen zu einer Eigenschaft von myclass und verwende sie in diesen Funktionen wie $ this-> log? –

Antwort

1

Sie können die Log-Instanz mithilfe von __construct einer Eigenschaft Ihrer Myklasse zuweisen. Hier ist ein Beispiel ein Verfahren zur Herstellung einer Klasse in eine andere Klasse für den Zugriff auf:

class Test { 
    public $var = 'test'; 

    public function show_var() { 
     echo $this->var; 
    } 
} 

class Test_2 { 
    protected $test; 

    public function __construct() { 
     $this->test = new Test; 
    } 

    public function show_test() { 
     $this->test->show_var(); 
    } 

} 

$test_2 = new Test_2; 

$test_2->show_test(); 

Siehe here in Aktion.

Verwandte Themen