今現在、個人的に作っているWordpressに変わる自分専用フレームワークを、ロンチタイミング目前にして、PHPを最新バージョンに対応してみたくなり、勢いだけで行った作業を備忘録として残しておきます。
今後、旧バージョンのPHP環境があった場合は、下記作業内容をデグレ作業内容として行うための備忘録です。
え?今更・・・っていう意見は、この際聞くまでもない、個人的には古い記述で上位互換を重要視してきていたんですが、
さすがにプログラム言語でphp7が主流になってきているのに、PHP5.2以下のバージョンで書き続ける事に少し嫌気がさしてきたので、
あくまで言語バージョンに対する対応作業として行おうと思います。
システム改修ポイント
phpファイルと、それを呼び出している関連モジュール全般が変更対象ファイルです。
プログラムはバージョンアップで下位互換性が無くなることはよくある話ですが、PHPも例外ではありません。
PHP 5.2.x から PHP 5.3.x への移行 | PHP
PHPリファレンスサイトを見てもわかりますが、非常に細かなバージョンで差分が発生しています。
都度チェックしておかないと、かなり置いてけぼりになってしまいますね。
変更内容
そして肝心の今回の変更内容は以下の通りです。
1. class-methodの呼び出しをインスタンス処理せずに呼び出す
$class = new CLASS;
$class->function
↓↓↓
CLASS::function
2. class内のmethodにstaticを付与する
class HOGE{
function test(){..}
}
↓↓↓
class HOGE{
public static function test(){..}
}
3. class内のローカル変数もstatic化する
class HOGE{
public $test = "test";
}
↓↓↓
class HOGE{
public static $test = "test";
}
ハマりポイント
そして、今回やってみてエラーログとの戦いになった件を報告
まず、実行時に発生していたエラーは下記の通り、
FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Undefined class constant '%変数名' in %ファイルパス.php:159
どうやら、指定の変数名が無いと言われているようだ。
そして自ら凡ミスを発見!
class HOGE{
public static $test = "test";
puclic static function aaa(){
echo self::test;
}
}
上記ではなく、下記が正解でした。
class HOGE{
public static $test = "test";
puclic static function aaa(){
echo self::$test;
}
}
以前のバージョンでは、
echo $this->test;
となっていたので、すっかり$を付けることを忘れていたようです。
でも、実はこの方が検索もし易いしコーディングエラーも無くなるイメージがあるので、上位バージョンの方が整っているように思えます。
理不尽なのは下位バージョンだったんですね。
これからは過去を振り変わらずに、より上位を志してまっすぐに進んで行こうと心に誓いました。
0 件のコメント:
コメントを投稿