PHP 5 -> 4 注意点
・キーワードがない
abstract, clone, final, interface, implementes, private, protected, public, static, try, catch, throw, const, instanceof, __construct, __destruct
・オブジェクトはすべてclone
なのでリファレンスを使う
function &getObject(){
}
function processObject(&$obj){
}
$localObject =& $argument;
・メソッドチェーンできない
// PHP5
$this->hoge()->moge()
// PHP4
$e = $this->hoge();
$e->moge();
・多くの関数が使えない
file_put_contents, simplexml,
・オートローダーがない
・get_classは小文字で返す。(クラス名はcase insensitive)
・クラス変数がない。(メソッドには静的にアクセス可能)
・magic_quotes_gpc がデフォルトでOn。しかも実行時にOffにできない
・selfがない
・SimpleXMLがない
PHP 4 -> 5注意点
・クラスは使用前に宣言する必要がある
・リファレンス
MacPortsで PHP4-5 切り替えスクリプト
/bin/php-switch で保存
#!/usr/bin/env bash
/opt/local/apache2/bin/apachectl stop
case "$1" in
'php4')
/opt/local/bin/port deactivate php52
/opt/local/bin/port activate php4
cp /opt/local/apache2/conf/extras-conf/load_php4.conf /opt/local/apache2/conf/extras-conf/load_php.conf
;;
'php52')
/opt/local/bin/port deactivate php4
/opt/local/bin/port activate php52
cp /opt/local/apache2/conf/extras-conf/load_php5.conf /opt/local/apache2/conf/extras-conf/load_php.conf
;;
esac
/opt/local/apache2/bin/apachectl start
httpd.conf の LoadModule は Include に置き換え
#LoadModule php5_module modules/libphp5.so
#LoadModule php4_module modules/libphp4.so
Include conf/extras-conf/load_php.conf
/opt/local/apache2/conf/extras-conf/load_php4.conf
LoadModule php4_module modules/libphp4.so
/opt/local/apache2/conf/extras-conf/load_php5.conf
LoadModule php5_module modules/libphp5.so
コマンドで切り替え
sudo php-switch php4 # PHP4に
sudo php-switch php52 # PHP52に
5.3は52と競合してるらしくてうまくいかんかった…。
参考
PHP4なスクリプトをPHP5へ移行する際に発生する7つの問題
http://www.1x1.jp/blog/2007/06/php_php4_to...
5 -> 4 コンバーター
http://php7.org/tools/5to4/
下位互換性のない変更点
http://www.php.net/manual/ja/migration5.in...