目前我正在编写一个数据库类,它稍微使用了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。
如果可能的话,我怎么能得到这样的工作(应该有可能我认为有太多麻烦)?
那么有人可以指出我正确的方向,或者可能会给出一段应该有用的代码,或者我可以改变以适应我当前的课程吗?
答案 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属性。