2009-06-13 11 views
1

現在、私はPHPのPDOクラスを少し使用するデータベースクラスをプログラミングしていますが、特定のアプリケーションを少し簡単にするための簡単な機能をいくつか追加したいと思います。PHPオブジェクト戻り値

次の擬似コードでは、私がどこに行くのかを見ることができます。あなたは$結果変数を見ることができるように

<?php 

class Database 
{ 
    public function FetchRow ($query) 
    { 
     // .. do some stuff, and make a $result variable 
     return DatabaseStatement ($result); 
    } 
} 

class DatabaseStatement 
{ 
    private $result; 

    public function __construct ($query) 
    { 
     // .. save result in property etc. 
    } 

    public function __get ($column) 
    { 
     // .. check result item 

     return $this -> result [ $column ]; 
    } 
} 

$db  = new Database; 
$result = $db -> Query ('SELECT * FROM users WHERE id = 1;'); 

if ($result != null) // Here $result should be an array OR null in case no rows are returned 
{ 
    echo $result -> username; // Here $result should call the __get method 
    echo '<pre>' , print_r ($result) , '</pre>'; // Here $result should be the array, cause it wasn't null just yet 
} 

:この例では唯一の問題は、$結果変数は、私がスクリプトでさらに上のやっているいくつかのもののcomparisationのために使用することはできない対象、ということです私が比較をしているときにオブジェクトであってはいけません。__toStringを使って文字列にすることができます。しかし、私はそれが他の型、主に配列またはnullであることを望みます。

可能な場合は、どうすればそのような作業をすることができますか(あまりにも多くの手間を要すると思われます)。

誰かが私を正しい方向に向けることができますか、あるいは動作するはずのコードを与えたり、現在のクラスに合わせて変更することができますか?

答えて

1

私は、DatabaseStatementを作成するのと同じ場所でこれを行う必要があると思います。例えば、:

public function FetchRow($query) 
{ 
    // ... do some stuff, and make a $result variable. 
    $ds = DatabaseStatement($result); 
    if ($ds) { 
     return $ds; 
    } 
    else { 
     return null; 
    } 
} 
+0

ええと、私は前もって問題を解決しようとしていますが、あなたのコードで$ dsを返すときにはまだ__get()を使用できません。次のようになります。 $ x = $ y - > FetchRow(); echo $ x; //配列 echo $ x - > id; //データベースからの 'id'カラム – Stefan

+0

grossvogelのtoArray関数を使用したソリューションを使用しました。ありがとうございました – Stefan

0

これはできません。 PHPでは、演算子のオーバーロードを許可していません。

0

これは、PDOStatmentクラスとそのrowCountプロパティを使用します。

+0

これは私がやりたいことではありません(この場合) – Stefan

2

あなたが望むことをするいくつかのメソッドを追加するだけでいいようです。 $ resultオブジェクトを配列にするか、空であるかどうかを調べるためにnullを強制するのではなく、あなたが知りたいことを示すメソッドisEmpty()を作成して呼び出すだけです。

配列が必要な場合は、希望の結果を返すメソッドtoArray()を作成します。または、オブジェクトをStandard PHP LibraryからIteratorおよび/またはArrayAccessを実装するようにしてください。

+0

今のところ、私のコード例のように動作させたかった理由は、私の意見では少しきれいに見えますが、あまりにも悪いことができないようなことです。 – Stefan

+0

あなたはtoArray関数のアイデアです。 0scarのnullを返すメソッド – Stefan