我想调用函数xxx()
并执行getCdl()
。在getCdl()
函数中,我想动态调用该方法。但这会产生错误Call to undefined function trader_cdl2crows
。但是,当我直接执行trader_cdl2crows()
时,它会起作用。
如何实现? :)
功能:
public function xxx(){
$cdls = [
'trader_cdl2crows',
'trader_cdl3blackcrows',
'trader_cdl3inside',
'trader_cdl3linestrike',
etc,etc,etc
$result = [];
foreach ($cdls as $cdl) {
$result[$cdl] = $this->getCdl($cdl,$ticksPerType);
}
vardump($result);
}
private function getCdl($method,$ticksPerType){
return $method(
$ticksPerType[$this->ticks::TICK_TYPE_OPEN],
$ticksPerType[$this->ticks::TICK_TYPE_HIGH],
$ticksPerType[$this->ticks::TICK_TYPE_LOW],
$ticksPerType[$this->ticks::TICK_TYPE_CLOSE]
);
}
答案 0 :(得分:2)
您的函数名称,例如trader_cdl2crows
,在_
字符后有一个zero-width space character。
尝试使用this tool对其进行编码,它会为您提供:trader_​cdl2crows
用于第一个函数(​
是零宽度字符),其余部分的结果相似他们。您还可以注意到,尝试在任何输入字段/文本编辑器(例如SO注释)中编辑这些名称时尝试使用箭头键(需要两个“步骤”才能从_
到c
,反之亦然)。
因此,将阵列替换为:
$cdls = [
'trader_cdl2crows',
'trader_cdl3blackcrows',
'trader_cdl3inside',
'trader_cdl3linestrike',
// if you have more function names, rewrite them here
];
这看起来完全一样,但是其中没有不可见的字符。