我的IDE警告我,PHP 5.4之前的闭包中不允许$this.有没有从5.3.10升级PHP的解决方法?请参阅下面的fire()方法:
<?PHP
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\Inputoption;
use Symfony\Component\Console\Input\InputArgument;
class UpdateItemImageSizes extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'namespace:updateimagesizes';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Updates image size information in the items table.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function fire()
{
$this->info('Starting chunk');
Item::chunk(1000, function($items)
{
foreach ($items as $item)
{
$this->info($item->img);
}
}
);
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
//array('example', InputArgument::required, 'An example argument.'),
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getoptions()
{
return array(
array('example', null, Inputoption::VALUE_OPTIONAL, 'An example option.', null),
);
}
}
解决方法:
如果info方法是公开的,则可以执行以下操作:
//...
public function fire()
{
$self = $this;
$self->info('Starting chunk');
Item::chunk(1000, function($items) use ($self)
{
foreach ($items as $item)
{
$self->info($item->img);
}
}
);
}
//...
如果info是私有的,则不能,并且您需要升级到PHP 5.4,因为在PHP 5.3中,闭包中的上下文与对象上下文不同.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。