2009-03-04 13 views
0

私はオブジェクトとして配列を使用できる方法がありますか?オブジェクトとしての配列

私はPHPSO_Configクラスは、この

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

は、私は同じことを実現し、設定をvarsのアクセスできるようにすることができようになり、私のメインクラス

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

に次のコードを持っています2番目のクラスを作成せずにオブジェクトとして?

答えて

4

あなたは、このように、次の(未テスト)動作するはず

$myObject = (object) $myarray; 

を使用してオブジェクトに配列をキャストすることができます。

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

その後、$クラス - > CONFIG-> usernameは動作するはずです。

+0

私はそれを使用しませんでしたが、これは私が探していた機能を提供するように見えます。 – UnkwnTech

-1

うんまあ

個人的に私はそれを使用する技術があります。

あなたが好きなファイルの呼び出し(つまり、config.phpを) を作成し、その後forexampleことでこれを書く:

は、

これらの情報を使用したいときはいつでも、 "require_once" config.php ";" index.phpのようなコードの上にあり、すべての定義はそのページにあります。 たとえば、$ DB_SERVERと入力してデータベースサーバー名を読み取ることができます。

私はあなたのプロジェクトでどこでも使用でき、人生を楽にするファイルからそれを維持できるので、私はそれに固執します。

0

正確にはわかりませんが、配列をオブジェクトにキャストできます。彼らはかなりうまくいきませんが、数値インデックスを使用しないようにしてください。あなたは、例えば、あなたのクラスが設定クラスが提供する性質を持っているように見えるにするためにPHP5 overloadingを使用することができ

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

このような何か:

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

は次に、このような何かをやって:

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

は、内部設定クラスのADMINEMAILのメンバ変数を見ることになります。

これはほぼ実行時にクラスのランタイム実装を選択できるStrategy Patternです。

0

多分私はここで何かを見逃していますが、あなたの設定クラスを配列で置き換えようとしているのですか?それをオブジェクトにキャストしますか?私には少し狂ったように聞こえる。私はちょうどより良いデザイン、その方法のクラスを持っているだろう。

クラスを配置する必要がある場所に配列を作成するのは最適です。