TechNote

事務屋のおぼえがき

古いCodeIgniterでPHPバージョンを上げたら Only variables should be passed by reference

特殊な環境で、古いCodeIgniter1.7.3+PHP 5.6という環境が存在していた。これをPHPのみ7系にあげたところ、以下のエラー。

A PHP Error was encountered
Severity: Notice
Message: Only variables should be passed by reference
Filename: codeigniter/Common.php
Line Number: 148

その場しのぎの解決方法

Common.phpの148行目を以下のように修正することで文法上のエラーは出なくなる。

  //$objects[$class] =& instantiate_class(new $name());
    $objects[$class] =new $name();

背景

この経緯としては、

$objects[$class] =& instantiate_class(new $name());

は、PHP 5.3 の厳密な標準警告を防ぐため、PHP 4 と PHP 5.3 コードを結合するために

$objects[$class] =& new $name();

と記述する必要があった模様で、これは下記のように書ける。ということで上記文法上のエラー解決に至る。

$objects[$class] =new $name();

結論

文法上のエラーは解決するも。表示されるべき画面に何も表示されない問題を解決できず(※ファイル名の先頭大文字問題とか?)。さっさとCodeIgniterのバージョンもあげましたとさ。