S eda1a14b50ee24bcab19b62f40858e76 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...

5 -> 4 コンバーター
http://php7.org/tools/5to4/

下位互換性のない変更点
http://www.php.net/manual/ja/migration5.in...

もしかして

    他の人の「PHP4」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ