附加自动对象

时间:2015-02-09 22:59:56

标签: php sql

我创建了一个类,它根据我通过PHP对象链接提供的参数生成查询。选择,插入,更新和删除所有定义$this->query,以便之前的呼叫不会遗留任何内容。

以下是一个示例,请注意where()order()等可能会导致limit()成功。

$tQuery->select('id', 'users')
       ->where('email', '=', $email)
       ->end();

所有end()都会将;附加到SQL语句并将其作为字符串返回,因此在每次调用中使用它都会有点干扰。

public function end()
{
    $this->query .= ';';

    return $this->query;
}

有没有办法(魔术方法或其他方法)我每次打电话给班级时都会自动执行此操作,所以每次都不需要这种方法?

$tQuery->select('id', 'users')
       ->where('email', '=', $email);

即。 “你不是要求我提供更多的方法,我只会在最后用;返回我所拥有的方法”

1 个答案:

答案 0 :(得分:1)

我猜一些pdo使用end()的结果来执行最终查询。这意味着,您最终需要查询对象的字符串表示。在这里,php的类型转换可能会派上用场。当将对象用作字符串__toString()

时,有一种可用于对象的魔术方法

考虑这个例子:

<?php
echo $tQuery->select('id', 'users')
       ->where('email', '=', $email)
       ->end();

现在,在您的类中添加__toString()方法:

public function __toString()
{
    return $this->end();
}

您可以将上述内容重写为

<?php
echo $tQuery->select('id', 'users')
       ->where('email', '=', $email);

这适用于字符串上下文中使用的任何对象,例如这也会触发__toString():

<?php
$sqlString = (string)$tQuery->select('id', 'users')
    ->where('email', '=', $email);