我创建了一个类,它根据我通过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);
即。 “你不是要求我提供更多的方法,我只会在最后用;
返回我所拥有的方法”
答案 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);