Php 确定在方法链接中调用最后一个方法的时间

Php 确定在方法链接中调用最后一个方法的时间,php,oop,method-chaining,Php,Oop,Method Chaining,我在查询生成器中使用了类似的内容: $queryHandler = new QueryHandler($connection); $queryHandler->insert("someDataHere") ->into("someTable") ->when("sleep", 1000); 我希望它在对该语句调用最后一个方法时执行查询,在本例中是when函数 我该怎么做呢?一种常见的方法是颠倒函数的顺序。写: $query

我在查询生成器中使用了类似的内容:

$queryHandler = new QueryHandler($connection);
$queryHandler->insert("someDataHere")
             ->into("someTable")
             ->when("sleep", 1000);
我希望它在对该语句调用最后一个方法时执行查询,在本例中是
when
函数


我该怎么做呢?

一种常见的方法是颠倒函数的顺序。写:

$queryHandler->into("someTable")
             ->when("sleep", 1000)
             ->insert("someDataHere")
             ;

insert()
将触发查询。我想在PHP中除了像worker或crontab这样的复杂方法之外没有其他方法。

你不能。您的代码无法知道是否会对该对象进行任何其他调用。使用
execute
方法或类似方法来实际执行查询

当对象将被销毁时,您可以使用析构函数来运行一段代码,但是当语句以随机顺序运行时,通常不会在脚本结束之前,这将导致混乱。所以不要那样做。

不。。。一般来说 我想你不知道链条已经断了。不要忘记,您的代码直接等于:

$queryHandler = new QueryHandler($connection);
$queryHandler->insert("someDataHere");
$queryHandler->into("someTable");
$queryHandler->when("sleep", 1000);
即使这种逻辑是可能的,它也可能并不总是方便的。当您稍后要执行准备好的查询时,可能会遇到这种情况

而是使用另一种方法发送查询:

$queryHandler->insert("someDataHere")
             ->into("someTable")
             ->when("sleep", 1000);
$queryHandler->start(); //will execute conditions (such as sleep) and then send query
回拨 在PHP中可能会使用令人毛骨悚然的解决方法。在返回
$this
之前,您可以第一次分配函数,然后在每个勾选中检查代码是否仍在您的类的范围内。一旦发现不是这样,就可以执行查询


令人毛骨悚然,但这是可能的。

仅当函数o_0I最近正在考虑与
C++
@MarcoMura相同的问题时才启用插入,如果我对已设置为
false的名为
execute
的每个函数都提供一个额外参数,这是否是一个好的做法?当用户给出这个参数为真时,查询就被执行了吗?@ Tom AZZZATO,我对C++及其运算符了解不多,所以我不知道你在说什么:PDSDY,到现在为止,PSR中没有方法链接。这是个好主意,谢谢。但是我不喜欢我们写它的方式。是的,它听起来有点德语,动词在句子末尾->插入表格时插入1000。或者,使用
execute()
函数或类似的东西。这看起来很不错,但是我们应该检查调用
函数时是否调用了
?@Bas我认为如果没有调用
时,没有计算任何条件,查询会立即运行。顺便检查更新的答案。你想做的是可能的,但不推荐。我读过,但我宁愿使用你的第一种方法。这与我第一次编写查询系统的方式类似(请参阅)。给函数指定execute参数时,您觉得如何?
$queryHandler->insert("someDataHere")
             ->into("someTable")
             ->when("sleep", 1000);
$queryHandler->start(); //will execute conditions (such as sleep) and then send query