PHP4の履歴
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_php5.html
5 -> 4 コンバーター
http://php7.org/tools/5to4/
下位互換性のない変更点
http://www.php.net/manual/ja/migration5.incompatible.php