2009-03-28 14 views

Antwort

14

Vom CodeIgniter Benutzerhandbuch:

CI Users Guide: Loader Class

eine Bibliothek zu einem anderen Objektname

Wenn die dritten (optional) Parameter leer ist zuweisen, wird die Bibliothek in der Regel sei einem Objekt mit demselben Namen als Bibliothek zugewiesen. Beispiel: Wenn die Bibliothek Sitzung heißt, wird einer Variablen mit dem Namen $ this-> session zugewiesen.

Wenn Sie Ihre eigene Klasse Namen setzen Sie den Wert auf die dritten Parameter übergeben können: $ this-> last-> Bibliothek ('Session', '', 'my_session');

// Session-Klasse ist jetzt mit zugegriffen:

$ this-> my_session

Ich denke, das ist, was Sie suchen.

+3

Ich bin mir ziemlich sicher er meint: $ one = neue Klasse; $ zwei = neue Klasse ('but_different'); – Garrett

+0

Sehr nützlich-danke! – mpemburn

8

Ich weiß, dass dieses Profil schon lange vorbei ist, aber es war eine der Fragen, auf die ich stieß, als ich nach meiner Antwort suchte. Also hier ist meine Lösung ...

Es ist PHP. Erstellen Sie Ihre Klasse als Bibliothek, laden Sie sie mit der Standard-CI-Loader-Klasse, verwenden Sie sie jedoch wie in einem normalen PHP-Skript.

Klasse Körperbau:

class My_class { 

    var $number; 

    public function __construct($given_number){ 
     $number = $given_number; 
    } 

    public function set_new_num($given_number){ 
     $number = $given_number; 
    } 
} 

laden sie:

// This will load the code so PHP can create an instance of the class 
$this->load->library('My_class'); 

Dann instanziiert und das Objekt verwenden, wo nötig:

$num = new My_class(24); 

echo $num->number; 
// OUTPUT: 24 

$num->set_new_num(12); 

echo $num->number; 
// OUTPUT: 12 

Das einzige Mal, dass ich verwenden $ this-> my_class soll Aufrufe an statische Funktionen machen, die ich code.

+1

funktioniert nicht. Sie können im Konstrukt keinen Parameter definieren und dann die Bibliothek laden und eine Instanz in CI initiieren. es wird einen Fehler ausgeben, da es erwartet, dass Sie es wie folgt laden: $ this-> load-> library ('My_class', $ given_number) – mixix

+0

Darf ich fragen, wie wir die Instanz zurückholen können, um sie in einem Array zu speichern beispielsweise? [in der Steuerung] $ this-> someclass; gibt die aktuelle Instanz jedes Mal? Ursache Ich habe folgendes mit verschiedenen $ params für jedes auf, aber was ich als Ergebnis bekam, war das erste Objekt nicht zwei diffrent: $ This-> Load-> Bibliothek ('SomeClass', $ Parameter); print_r ($ this-> someclass); $ this-> load-> library ('SomeClass', $ params); print_r ($ this-> someclass); – limitcracker

4

Entschuldigung für die Wiederbelebung dieses Themas, aber ich denke, ich könnte etwas vernünftiges hinzufügen.

Sie können mehrere Instanzen einer Klasse hinzufügen. Ich weiß nicht, ob es die codeigniter Standardverwendung irgendwie verletzt, aber scheint mehr codeigniter-ish als das Laden einer Bibliothek (die $ this-> library_name erstellt, die nicht verwendet wird) und dann 2 weitere Instanzen mit "new" Schlüsselwort.

$this->load->library('my_library', '', 'instance1'); 
$this->load->library('my_library', '', 'instance2'); 

$this->instance1->my_class_variable = 1; 
$this->instance2->my_class_variable = 2; 

echo $this->instance1->my_class_variable; // outputs 1 
echo $this->instance2->my_class_variable; // outputs 2 

Ich benutze dies in meinem Code, um verschiedene Menüs zu generieren. Ich habe eine "Menü" -Klasse und verschiedene Instanzen für jedes Menü, mit jeweils unterschiedlichen Menüpunkten.

Verwandte Themen