2009-03-04 11 views
0

Gibt es eine Methode, mit der ich ein Array als Objekt verwenden kann?Arrays als Objekte

Ich habe den folgenden Code in meiner Hauptklasse

function __construct() 
{ 
     require 'config.php'; 
     $this->config = new PHPSO_Config(); 
} 

wo die PHPSO_Config Klasse so etwas wie diese so

class PHPSO_Config 
{ 
    /** 
    * The administrators email address 
    */ 
    var $adminEmail = '[email protected]'; //I'm using this email to test 
} 

aussieht, kann ich das Gleiche erreichen und in der Lage der Config zugreifen Vars als ein Objekt ohne eine zweite Klasse zu erstellen?

Antwort

4

Sie können ein Array an ein Objekt geworfen

$myObject = (object) $myarray; 

somit die folgende Verwendung sollte (ungetestet) arbeiten:

function __construct() 
{ 
     require 'config.php'; 
     $this->config = (object) array("username" => "root"); 
} 

dann Klassen- $> config-> Benutzername sollte funktionieren.

+0

Ich habe es nicht verwendet, aber es sieht so aus, als würde es die Funktionalität bieten, nach der ich gesucht habe. – UnkwnTech

-1

Nun ja

gibt es eine Technik, die ich persönlich würde es verwenden:

Sie eine Datei Aufruf erstellen, was Sie wollen (dh config.php) dann diese forexample in es schreiben:

Wann immer Sie diese Informationen verwenden wollten, müssen Sie einfach "require_once" config.php ";" über Ihrem Code wie in index.php und alle Definition wird in dieser Seite sein. Zum Beispiel können Sie den Namen des Datenbankservers lesen, indem Sie $ DB_SERVER eingeben.

Wenn ich Sie wäre, würde ich mich daran halten, weil Sie es überall in Ihrem Projekt verwenden und es nur aus einer Datei verwalten können, die das Leben einfacher macht.

0

Ich bin mir nicht sicher, was genau Sie wollen, aber Sie können ein Array auf ein Objekt umwandeln. Stellen Sie sicher, dass Sie keine numerischen Indizes verwenden, da sie nicht richtig funktionieren.

$config = array('adminEmail' => '[email protected]'); 
$this->config = (object)$config; 
1

Sie PHP5 overloading nutzen könnten, um es, dass Ihre Klasse scheinen die Eigenschaften der Config-Klasse bereitgestellt hat, z.B. so etwas wie diese:

class MyClass 
{ 
    private $config; 

    function __construct() 
    { 
     require 'config.php'; 
     $this->config = new PHPSO_Config(); 
    } 


    public function __get($name) { 
     if (property_exists($this->config, $name)) { 
      return $this->config->$name; 
     } 
     return null; 
} 

Dann so etwas wie dies zu tun:

$config=new MyClass; 
echo $config->adminEmail; 

Ergebnis wäre das ADMINEMAIL Membervariable der internen Konfigurationsklasse zu sehen.

Dies ist fast ein Strategy Pattern, wo die Laufzeit-Implementierung einer Klasse zur Laufzeit ausgewählt werden kann.

0

Vielleicht fehlt mir hier etwas, aber Sie versuchen, Ihre Config-Klasse durch ein Array zu ersetzen, dann werfen Sie es auf ein Objekt? Das klingt ein bisschen verrückt nach mir. Ich hätte nur eine Config-Klasse, deren Art ein besseres Design hat.

Es ist am besten nicht um Arrays zu machen, wo Sie Klassen haben sollten.