2012-04-19 7 views
2

私は、クラスのプロパティをプライベートにしてget/setメソッドを使用してアクセス/変更する方が良いと読んだことがあります。クラスのプライベートプロパティを表示する方法(PHP OOP)

私はクラスをそのように設定しましたが、htmlテーブルのプロパティを表示できるようにするために、別のhtmlTable表示クラスを使用していました。

私は4つの可能性を考えました。あなたがこれを行う理想的な方法を既に知っている場合は、気をつけてください。

ありがとうございます。

可能性:

  1. 私が使用してクラスのフィールドを取得することができます。

    $class_Vars = get_class_vars($object_class); 
    $fields = $class_vars['fields']; 
    
    // But as far as iterating through each object, this doesn't work: 
    
    foreach($object_array as $current_object) { 
        foreach($current_object as $value) { 
         $html = '<td>' . $value . '</td>'; 
        } 
    } 
    

    値はプライベートとアクセスできません。非常に不器用に見える、おそらくデバッグ悪夢だろう

  2. 可能な解決策がある:

    foreach($fields as $value) { 
        $get_func = 'get' . ucwords($value); // e.g. $get_func = 'getId' 
        $current_value = $current_object->$get_func(); 
    } 
    

    私はそれが仕事だと思うが、それは私と一緒に右に座っていません。

  3. インターフェイス。 もう1つの可能性は、それをやりたいすべてのクラスにhtmlTable関数を書き込むことです。しかし、これはコードの再利用が多いです。

  4. インターフェイス。 または、プロパティ名と値を持つ配列を出力するすべてのクラスに関数export()を書き込むことができます。次に、私のhtmlTableクラスはこれらの出力を処理できます。

+0

PHPの反映が役立つかもしれません。 http://www.php.net/manual/en/reflection.extending.php –

+0

実際には、変数を 'protected'に設定する方が良いと言います。そして、元のクラスを継承するクラスもそれにアクセスできます。 –

+0

ありがとうtereshko、良い点。 –

答えて

1

どちらかそれらを公開するかget/set方法を作ります。

getAll()の方法を使用して、すべてのプライベート変数を含む連想配列を返すこともできます。

+0

get/setメソッドの問題は関数名をコーディングすることです。プロパティ。 私はgetAll()メソッドを試しました(これは私の質問で "export()"として言及しました)、動作します。 また、Dreamweaverでは、これはエラーではないのにフラグが立てられます: "$ fields = $ object_class_name :: $ fields" –

+0

__get($ name){return $ this-> $ name; }マジックメソッド。 –