2011-07-10 16 views
1

ファイルに関するすべての情報をファイルテーブルから取得したいが、そのテーブルの構造が変更される可能性があります。PHPのクラスメソッドからクラス変数を定義できますか?

だから、テーブルからすべてのフィールド名を取り出し、それらを使って情報を含むクラス変数を生成し、選択したデータをそこに格納したいと思います。

これは可能ですか?

+0

おそらく関連性があります:http://stackoverflow.com/questions/6643132/store-variables-from-mysql-select-to-php-class-variables-more-efficiently-when-th/6643211#6643211 – SteAp

+1

'$ this-> someVar = 'foo';と書くだけで動作するはずです。 – Tower

答えて

3

サンプル

<?php 

    class TestClass 
    { 

     public $Property1; 

     public function Method1() 
     { 

      $this->Property1 = '1'; 
      $this->Property2 = '2'; 

     } 

    } 

    $t = new TestClass(); 
    $t->Method1(); 

    print('<pre>'); 
    print_r($t); 
    print('</pre>'); 

?> 

出力

TestClass Object 
(
    [Property1] => 1 
    [Property2] => 2 
) 

ご覧のとおり、定義されていないプロパティは、$thisへの参照を使用して割り当てただけで作成されました。したがって、はい、クラスメソッドの中からクラス変数を定義することができます。

4

はい、あなたはPHPのオーバーロードを参照してください。

http://php.net/manual/en/language.oop5.overloading.php

クイック例:(これは偉大な使い方ではないではありません)

<?php 

class MyClass{ 
    var $my_vars; 

    function __set($key,$value){ 
     $this->my_vars[$key] = $value; 
    } 

    function __get($key){ 
     return $this->my_vars[$key]; 
    } 
} 

$x = new MyClass(); 

$x->test = 10; 
echo $x->test; 

?> 
+0

私はあなたが実際に__getと__setをスキップして全く同じ動作を得ることができると信じています。設定された内容を正確に取得するだけではなく、ビヘイビアをより複雑にしたい場合は、それらを定義する必要があります。 –

+0

本当に、私は個人的にはこのようにしたい。 :) – Eddie

+0

しかし、これは "クラスメソッド内からプロパティを定義する"の例ではありませんか?これはむしろ、マジックメソッドを使用して存在しないプロパティの検索/定義をクラス外からディスパッチする例です。 – Alexander