gpt4 book ai didi

php - 在 array_walk 中不在对象上下文错误中使用 $this

转载 作者:可可西里 更新时间:2023-11-01 13:41:28 25 4
gpt4 key购买 nike

我在类中使用带有闭包的 array_walk 时遇到了一个奇怪的问题。在我使用 php 版本 5.4.7 的开发环境中不会出现问题,但在我的部署环境 5.3.3 中会出现问题。

以下代码在我的生产机器上运行良好,但在我的部署环境中崩溃:

<?php
error_reporting(-1);

Class TestArrayWalk
{
/** @var null|array */
protected $userInput = null;

/**
* This expects to be passed an array of the users input from
* the input fields.
*
* @param array $input
* @return void
*/
public function setUserInput( array $input )
{
$this->userInput = $input;

// Lets explode the users input and format it in a way that this class
// will use for marking
array_walk( $this->userInput, function( &$rawValue )
{
$rawValue = array(
'raw' => $rawValue,
'words' => $this->splitIntoKeywordArray( $rawValue ),
'marked' => false,
'matched' => array()
);
}
);
}

public function getUserInput()
{
return $this->userInput;
}

protected function splitIntoKeywordArray( $input )
{
if ( ! is_string( $input )){ return array(); }
return preg_split('/(\s|[\.,\/:;!?])/', $input, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}

}


$testArrayWalk = new TestArrayWalk();
$testArrayWalk->setUserInput(
array(
'This is a test input',
'This is another test input'
)
);

var_dump( $testArrayWalk->getUserInput() );

我得到的错误是:Using $this when not in object context on line 26 这是该测试类中 $this 的唯一用法。我假设我正在使用的版本之间发生了一些变化,这使得上述代码在我的开发环境中成为可能。

我还假设,由于我无法更改部署环境(它的客户端,他们不会更改它),所以我将不得不使用 foreach 而不是 array_walk.

我的问题是:鉴于以上情况,这是否可能在 5.3.3 中使用 array_walk 如果不能,我该如何使用 foreach与我使用 array_walk 的方式相同(更具体地说是 &$rawValue 位)?

我的环境是:

  • 我的开发环境是PHP版本5.4.7
  • 我的服务器(部署)环境是PHP版本5.3.3

谢谢。

编辑2

感谢所有提供帮助的人。在你的帮助下我得到了这个工作并将我的工作代码发布到 https://gist.github.com/carbontwelve/6727555以备将来引用。

最佳答案

这在 PHP 手册中有描述:

Version Description5.4.0   $this can be used in anonymous functions.

Anonymous functions

Possible workaround would be to re-assign this to another variable and pass it via use:

$_this = $this;
function() use($_this) { ... }

但请记住,您将无法访问私有(private)成员和 protected 成员,因此您必须将 splitIntoKeywordArray 设为公开

关于php - 在 array_walk 中不在对象上下文错误中使用 $this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19033184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com