是否有可能在PHP7下运行symfony 1.4?

时间:2015-12-18 11:05:44

标签: php symfony-1.4

是否可以在PHP7下运行symfony 1.4?

如果是,那么必须进行哪些更改?

2 个答案:

答案 0 :(得分:5)

查看与您的问题相关的问题: Symfony 1.4 using deprecated functions in php 5.5

根据您的代码库,我认为您最好的选择是升级到Symfony 2或3。 或者你可以使用这个支持5.6的项目(将来可能是7个?):https://github.com/LExpress/symfony1

答案 1 :(得分:4)

对于那些想要在symfony 1.4和PHP7中使用doctrine 1.2的人来说。

在%SF_LIB_DIR%/ vendor / symfony / lib / plugins / sfDoctrinePlugin / lib / vendor / doctrine / Doctrine / 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;

并且这个问题消失了。

此外,您必须更改以下Doctrine文件: 教义/适配器/报表/ 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没有preg修饰符' e'了。通过这些修改,doctrine 1.2将继续与PHP7一起使用,并且也在使用PHP5!