![](/img/trans.png)
[英]Chaining methods in PHP and execute the first called method as last, how does it work?
[英]When chaining methods in PHP, Is it possible to determine which method was called first?
因此,我现在正在编写一个PHP类,以帮助简化SQL语句的构造。 我正在编写它们,以便每个方法都返回对象的实例( return $this
)以便启用方法链接。
是否可以测试被调用的方法是否是方法链的一部分,以及方法链中已经执行了哪些方法? 例如,在下面的代码中,我希望使用“ from”方法来测试它是否直接在其前面的select()
方法中作为链的一部分被调用。
$object->select('john', 'chris')->from('people');
提前致谢!
我认为没有必要检查调用方法的顺序。 您可以创建一个finally方法(例如execute()
),并在其中检查查询所需的所有属性,如果缺少任何属性(例如select
),则可以为其设置默认值:如果可用(例如'select' => '*'
)。
但是无论如何,如果要检查的是在具体方法之前调用的某种方法,则可以设置private
属性来满足方法要求。 例如:
private $_methodsRequirements = array(
'from' => array('select'),
'set' => array('update', 'where'),
// and all requiriments for each method
)
private $_calledMethods = array();
并创建用于检查方法“可调用性”的其他方法:
private function checkCallability($method) {
$requiredMethods = $this->_methodsRequirements[$method];
foreach($requiredMethods as $m) {
if(!in_array($m, $this->_calledMethods)) {
throw new Exception('You must call method "'.$m.'" before calling method "'.$method.'"!');
}
}
return true;
}
在每种方法开始时,您必须调用它:
public function select() {
$this->checkCallability(__METHOD__);
// your query generation
array_push($this->_calledMethods, __METHOD__);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.