是否可以在PHP7下运行symfony 1.4?
如果是,必须进行哪些更改?
对于那些想将条令1.2与symfony 1.4和PHP7一起使用的人!
在%SF_LIB_DIR%/vendor/symfony/LIB/plugins/sfDoctrinePlugin/LIB/vvendor/metrine/Collection.php行463中,您可以找到:
$record->$relation['alias'] = $this->reference;
在PHP 5中,这被解释为
$record->${relation['alias']} = $this->reference;
作者的意图。在PHP7中,它将被解释为
${record->$relation}['alias'] = $this->reference;
导致关系错误的原因。
要解决这个问题,只需使隐含的显式:
$record->{$relation['alias']} = $this->reference;
这个问题已经过去了。
此外,您必须更改以下条令文件:条令/适配器/声明/Oracle.php来自的线路586
$query = preg_replace("/('?)/e", '":oci_b_var_". $bind_index++' , $query);
至
$query = preg_replace_callback("/('?)/", function () use (&$bind_index) { return ":oci_b_var_".$bind_index++; }, $query);
条令/连接/Mssql.php的264行
$tokens[$i] = trim(preg_replace('/##('d+)##/e', "'$chunks[''1]", $tokens[$i]));
至
$tokens[$i] = trim(preg_replace_callback('/##('d+)##/',function ($m) use($chunks) { return $chunks[(int) $m[1]]; }, $tokens[$i] ));
和来自的线路415
$query = preg_replace('/##('d+)##/e', $replacement, $query);
至
$query = preg_replace_callback('/##('d+)##/', function($m) use ($value) { return is_null($value) ? 'NULL' : $this->quote($params[(int) $m[1]]); }, $query);
PHP7不再有预处理修饰语"e"。有了这些修改,条令1.2将继续与PHP7合作,也将与PHP5合作!
查看与您的问题相关的问题:Symfony 1.4在php 5.5 中使用不推荐使用的函数
根据您的代码库,我认为您的最佳选择是升级到Symfony 2或3。或者你可以使用这个支持5.6的项目(将来可能是7?):https://github.com/LExpress/symfony1