1

目前,我正在编写一个数据库类,它稍微使用了 PHP 的 PDO 类,但我想添加一些简单的功能,以便更轻松地编写某个应用程序。

现在在下面的一段伪代码中你可以看到我要去哪里。这个例子中唯一的问题是 $result 变量是一个对象,它不能用于比较我在脚本中进一步做的一些东西:

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

正如您所看到的,当我进行比较时,$result 变量不应该是一个对象,我知道可以使用 __toString 将它变成一个字符串。但我希望它是其他类型,主要是数组或空值。

如果可能的话,我怎样才能得到这样的工作(我认为应该有太多的麻烦)?

那么有人可以指出我正确的方向,或者可能给出一段应该可以工作的代码,或者我可以改变以适应我目前的课程吗?

4

4 回答 4

2

在我看来,你只需要添加一些方法来做你想做的事。与其强制 $result 对象为数组或 null 以检查它是否为空,不如创建并调用一个isEmpty ()告诉您想知道什么的方法?

如果您需要一个数组,请创建一个toArray ()返回所需内容的方法。或者,更好的是,让您的对象实现标准 PHP 库中的 Iterator 和/或 ArrayAccess 。

于 2009-06-13T18:07:55.587 回答
1

我认为您必须在创建 DatabaseStatement 的同一位置执行此操作。例如:

public function FetchRow($query)
{
    // ... do some stuff, and make a $result variable.
    $ds = DatabaseStatement($result);
    if ($ds) {
        return $ds;
    }
    else {
        return null;
    }
}
于 2009-06-13T17:27:41.423 回答
0

那是不可能的。PHP 不允许您重载运算符。

于 2009-06-13T17:26:42.130 回答
0

使用 PDOStatment 类及其 rowCount 属性。

于 2009-06-13T17:42:44.430 回答