致命错误:使用array_walk在不在对象上下文中时使用$ this

时间:2014-11-27 18:46:23

标签: php arrays class

我创建了一个类,它应该替换数组的数据。

我插入

$data = array(
                'bike',
                'car',
                'pc'
            );

它应该将数组转换为:

$data = array(
                '[@bike]',
                '[@car]',
                '[@pc]'
            );

我写了以下一段代码。

array_walk($PlaceHolders , function(&$value, $key) { $value = $this->Seperators['plcstart'].$value.$this->Seperators['plcend']; });

我在课堂上下文中使用。

两个sperator具有以下值:

$this->Seperators['plcstart'] = '[@';
$this->Seperators['plcend']   = ']';

问题是。在localhost它的工作非常棒!! 现在,当我将系统上传到unix环境时,它就会停止工作! 我不知道为什么会这样。

这里的任何人都知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

如果您想使用回调修改数组元素,我建议您使用array_map()

你可以用这样的东西结束

class TransformerClass {
    private $Seperators = array(
        'plcstart' => '[@',
        'plcend' => ']'
    );

    public function transform(array $data) {
        return array_map(
            function($text) {
                return $this->Seperators['plcstart'].$text.$this->Seperators['plcend'];
            },
            $data
        );
    }
}

示例:

$transformer = new TransformerClass();

$items = array(
    'bike',
    'car',
    'pc'
);

$result = $transformer->transform($items);

$result将包含您想要的结果数据。

答案 1 :(得分:0)

最奇怪的是......今天早上我又打开了同一页。 它像离线环境一样工作:-S ....

虽然这很令人沮丧!!

但是我想做一些小笔记:

  ///######## LOADING ALL PLACEHOLDERS
  $PlaceHolders   = array_keys($this->TplObjects);

  ///######## SEPERATOR START
  $SeperatorStart = $this->Seperators['plcstart'];
  $SeperatorEnd   = $this->Seperators['plcend'];

  ///######## ADDING THE START AND END TAGS TO EACH ARRAY VALUE
  array_walk($PlaceHolders , function(&$value, $key) { $value =
  $SeperatorStart.$value.$SeperatorEnd; });

这是我认为的解决方案,但它是 NOT !! 为什么??因为它的工作方式:

    ///######## LOADING ALL PLACEHOLDERS
    $PlaceHolders = array_keys($this->TplObjects);
    ///######## ADDING THE START AND END TAGS TO EACH ARRAY VALUE
    array_walk($PlaceHolders , function(&$value, $key) { $value = $this->Seperators['plcstart'].$value.$this->Seperators['plcend']; });

因为它直接从课堂上得到了它的数据。 通过使用 function ,我将变量放入其自己的单独范围,因此变量 $ SeperatorStart $ SeperatorEnd 在此范围内不存在。 / p>

我可以将这两个导入到该函数中。但我不知道如何使用 array_walk 来做到这一点。我没有经常使用这个功能因此我只知道使用这个功能的一些基本方法。

@Falc 选择的第二个选项效果很好!这是我正在寻找的方法。感谢万人!!