是否可以在PHP7下运行symfony 1.4


WIll it be possible to run symfony 1.4 under PHP7?

是否可以在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