PHP foreach数组和函数名并动态执行

时间:2019-03-26 03:51:03

标签: php

我想调用函数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]
);
}

1 个答案:

答案 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
];

这看起来完全一样,但是其中没有不可见的字符。