我有以下代码行
foreach ($_SESSION['ini']->infrastructure()['buildings'] as $key => $value)
变量$_SESSION['ini']保存一个对象,它读取各种。ini文件并在内存中保存它们的值。然后,当调用它的函数时,它以数组的形式返回独立的.ini变量集。Infrastructure()就是这样一个函数,它返回一个矩阵。我只想把['buildings']数组从矩阵中移除。循环在我的开发服务器上运行良好。但是,当我将代码上传到Amazon EC2服务器时,服务器抛出以下错误:
Parse error: syntax error, unexpected '['
我假设这是对尝试直接从函数的返回值中获取['buildings']数组的实践的引用,实际上,以下代码在EC2服务器上工作得很好:
$placeholder = $_SESSION['ini']->infrastructure();
foreach ($placeholder['buildings'] as $key => $value)
谁能解释一下是什么导致了开发和生产之间语法的变化,以及我如何修复EC2服务器以与开发代码一起工作?我不喜欢用'$placeholder'方法重新编码所有内容,因为它效率较低,而且因为我在整个项目中经常使用这种语法。
似乎你的EC2上的PHP版本小于5.4。Function array dereferencing
只允许在5.4版本之后使用。
函数数组解引用…
infrastructure()['buildings']
既然你知道如何修复这个错误,我就不写了。这就是为什么代码不能在EC2上工作的版本
这个问题最有可能是:
$_SESSION['ini']->infrastructure()['buildings']
直到PHP 5.4才增加对函数数组解引用的支持,因此您的EC2实例很可能运行的版本低于此版本。
见:http://php.net/manual/en/migration54.new-features.php
您可以通过将函数的结果存储在一个变量中来解决这个问题:
$var = $_SESSION['ini']->infrastracture();
foreach ($var['buildings'] as $key => $value)
或者你可以在EC2实例上升级PHP版本,如果你想继续使用语法。