Wordpressを使うときに HeadSpace2 プラグイン を好んで使う。
内をいい感じに仕立てるので重宝しているのだが、エラーログを見ると、Warning が出まくっているのに気がついてしまった。知らなかった。自分で運用してると、まぁ、いっかーと思っちゃうところもあるのだが、クライアントのサイトなるとそうもいかず、調べてみたら、多分、昔から出ててサーバーが Warning を隠してたら気が付かないなという結論に至った。
実際に出ている Warning は
- Warning: Declaration of HSM_PageTitle::load($meta) should be compatible with HSM_Module::load($meta = ”) in …
- Warning: Declaration of HSM_Stylesheet::init() should be compatible with HSM_Module::init($args) in …
等です。
Declaration of %s::%s() should be compatible with that of %s::%s() エラーというのは、PHP4からPHP5への移行でより厳密なコード記述をするようになった時に仕込まれたもので、クラスを継承している時の作法ミスの指摘をしています。
あくまでも指摘なので、知らない顔して動かすことは可能です。
自分がゲームのディレクションをしているころは、Warning 撤廃を大前提に指示してました。コンパイラにとって、error は「コンパイル出来ません」という叫びでしたが、Warning は「念の為、教えとくけどコンパイルできるからしとくわ。動作の保証はしないけど」と解釈してました。
おかけさまで RPG1本作って出たバグが40個という奇跡が起きました。おっと、脱線脱線。Warning はバグの元ということで。
さて、本題に戻りまして、
HSM_PageTitle は HSM_Module を継承しています。そして、load をオーバーライドしようとこの時に引数の記述が違うよって怒られてるんですね。
比較すると一目瞭然。
- HSM_Module::load($meta = ”)
- HSM_PageTitle::load($meta)
loadメソッドの引数にデフォルト値があるかないかの違いです。php5からはこういう記述はやめましょうと決まったようです。もう1つの initメソッドも同じです。
ということで、Grepして該当箇所にデフォルト値を差し込んでいきましょう。HSM_ModuleでGrepすればわりとスムーズです。
該当のファイルは、wp-content/plugins/headspace2/modules/page/ 内に全てありました。
- modules/page/stylesheet.php
- modules/page/custom.php
- modules/page/description.php
- modules/page/follow-links.php
- modules/page/javascript.php
- modules/page/keywords.php
- modules/page/noindex.php
- modules/page/page-links.php
- modules/page/plugin.php
- modules/page/raw-footer.php
- modules/page/raw.php
- modules/page/relative-links.php
- modules/page/site_name.php
- modules/page/site_tagline.php
- modules/page/page_title.php
- modules/page/tags.php
stylesheet.phpは loadメソッド と initメソッドを、それ以外のphpファイルは loadメソッドを修正すれば完成です。
コメント