2009-03-04 30 views
0

Bir diziyi nesne olarak kullanmam için bir yöntem var mı?Nesneler olarak diziler

Ben PHPSO_Config sınıfı bu

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

yüzden aynı şeyi başarmak ve yapılandırma vars erişmek mümkün olabilir gibi görünür benim ana sınıfa

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

aşağıdaki kodu var ikinci sınıf oluşturmadan bir nesne olarak?

cevap

4

Sen (denenmemiş) çalışması gerekir aşağıdaki dolayısıyla

$myObject = (object) $myarray; 

kullanarak bir nesneye bir dizi çevirebilirsiniz:

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

sonra $ sınıf-> config-> kullanıcı adı çalışmalıdır.

+0

Kullanmamıştım, ama bu aradığım işlevsellik sağlayacak gibi görünüyor. – UnkwnTech

-1

Eh evet

şahsen bunu kullanan bir tekniktir vardır:

Eğer sonra forexample onun içinde bunu yazmak (yani Config.php) ne istersen bir dosya arama oluşturun:

Bu bilgileri kullanmak istediğinizde, sadece "require_once" config.php "; kodunuzun üstünde index.php gibi ve tüm tanımlar bu sayfada olacak. Örneğin veritabanı sunucusu adını $ DB_SERVER yazarak okuyabilirsiniz.

Yerinde olsaydım, projenin her yerinde kullanabilir ve sadece hayatı kolaylaştıran bir dosyadan koruyabilirdim.

0

Tam olarak ne istediğinizden emin değilim, ancak bir nesneyi bir diziye atabilirsiniz. Tam olarak çalışmıyorlarsa sayısal indeks kullanmadığınızdan emin olun;

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

Değişikliklerin bir sınıf yapılandırma sınıfının, mesela tarafından sağlanan özelliklere sahip gibi görünüyor yapmak için PHP5 overloading kullanabilirsiniz Böyle bir şey:

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; 
} 

Sonra böyle bir şey yaptığını:

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

iç yapılandırma sınıfının adminEmail üye değişkeni görmeye neden olurdu.

Neredeyse bir Strategy Pattern, bir çalışma zamanının bir çalışma zamanı uygulaması seçilebilir.

0

Belki bir şeyleri özlüyorum ama yapılandırma sınıfınızı bir diziyle değiştirmeye çalışıyorsunuz, sonra nesneyi bir nesneye mi döküyorsunuz? Bana biraz çıldırmış geliyor. Daha iyi bir tasarıma sahip bir yapılandırma sınıfına sahip olurdum.

Sınıflarinizin olması gereken diziler yapmak için etrafta dolaşmamak en iyisidir.