PHP对象返回值

时间:2009-06-13 17:10:32

标签: php class object return

目前我正在编写一个数据库类,它稍微使用了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将它变成一个字符串。但我希望它是其他类型,主要是数组或null。

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我认为你必须在创建DatabaseStatement的同一个地方执行此操作。例如:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

使用PDOStatment类及其rowCount属性。