Program, Wordpress

PHP7.2にして、Wordpressを動かして見ると、

count(): Parameter must be an array or an object that implements Countable in …(ファイルパス)/wp-includes/post-template.php on line 284

なワーニングメッセージが。

調べてみるとPHP7.2 になって count関数 が変わった模様。
PHP 公式マニュアル

バージョン 説明
7.2.0 count() will now yield a warning on invalid countable types passed to the array_or_countable parameter.

引数が配列かカウントできるオブジェクトじゃないとワーニングを出しますよー。
ってことになったらしい。

で、件の post-template.php では

if ( $page > count( $pages ) ) // if the requested page doesn't exist
	$page = count( $pages ); // give them the highest numbered page that DOES exist

と $pages がどんなオブジェクトがわからないまま、count関数の引数に使われているのでワーニングが出た模様。

$pages が空(NULL)の場合にワーニングが出るので、count関数を使う前に$pagesが空かどうかのチェックを入れればOK。
空の場合は0を入れてあげます。

if ( ! empty( $pages )) {
    if ( $page > count( $pages ) ) // if the requested page doesn't exist
    	$page = count( $pages ); // give them the highest numbered page that DOES exist
} else {
    $page = 0;
}

コンピュータプログラムの世界では 空(NULL) = 0 かどうかか環境依存だったりするので、ややこしいですね。



ひとまず該当箇所を修正して、ファイルを上書きすればワーニングは出なくなります。

Wordpress

さくらのレンタルサーバ」標準PHPを PHP4 から PHP5 へ変更
(SAKURA Internet)

「さくらのレンタルサーバ」スタンダード・プレミアムサービスにおきまして
2008年7月2日より、[標準のPHP]をPHP4からPHP5へ変更いたします。

と、いうことでさくらのレンタルサーバを使い、PHPで動作するWordpressを使用している当blogも影響あるわけで…。

ローカルのテスト環境ではPHP5で特にソース修正をすることなくWordpressが動作してるので問題ないかとは思いますが、万が一見られなくなったーって時は中の人が一生懸命対応するまでご了承ください…。

[>>WordPress | 日本語]

Program

PHP コード最適化 Best Practices 63+
(カタコト日記) from [>>everything is gone]

メモメモ。

14. @によるエラー制御はすんごく遅い。

これは先日検証記事があったね。

ざっと見てみて「はは~ん」と思うものは多々あったのだが

47. ループ処理には foreach を使おう。

これはちょっと意外だったなぁ。
使い勝手の良いものは何かしら裏があるっていうイメージがあるので、ループ関連は for とか while を使えよって書かれてると思ったのにw

それにしてもPHPはバッドノウハウの塊だなぁ・・・と思う今日この頃。

Program

「@」でエラー抑制すると PHP が遅くなるという噂について
(a++ My RSS 管理人ブログ)

PHP では @ を付けることでエラーを回避できるという便利な記述方法があり、ものぐさな私などは

if (@$var[“foo”]) $result = $var[“foo”];

みたいなコードを書いてしまいます。

で、この処理が「遅い」という噂やツッコミを度々受けるので調べてみました。

検証の結果「@」でエラー処理したのと「isset」を使って判定するのを比べたら最大10倍ほどパフォーマンスが異なるようです。

自分も@を使って簡単に済ませてしまう事がままあるので、気をつけよう…。