wordpressのソースを読みながらPHPを勉強する その1

【シリーズ一覧】

/index.php

WP_USE_THEMESをtrueにセット。
defineは定数を定義する。定義されて定数は”$”なしで参照できる。すでに定義されているかを調べるにはdefined()を使う。変数にdefineされたものが入っている場合はconstant()を使う。一度定義された定数は変更できない。定数はどこらかでも参照できる。

WP_USE_THEMESをfalseにするとなにも表示されなくなる。現在のところ使い道不明。


/index.php

requireはファイルを読み込んで実行する。includeとの違いはエラー処理のみで、requireはエラーになるとスクリプトの実行がとまる。


/wp-blog-header.php

issetは変数がセットされていればtrueを返す。「セットされている」とは一回も”=”で値が代入されてないか、NULLがセットされいる状態を言うらしい。empty()というのもあり、これは0とか空文字とか空arrayのときtrueを返す。

他のファイルで使われている変数があって、そのファイルをrequireしたファイルでその変数をisset()をした場合はtrueになるし、値はそのファイルで設定した値になる。つまりrequireやincludeは名前空間的には同じになるようだ。

関数の中で使った変数は関数の外ではissetにならない(falseを返す)。しかし以下の例では$aはissetにならない。

以下の場合もnotを返す。

これはsetを返して欲しかったんだが、なぜnotなのか。phpでは関数外で書かれた変数は全部global扱いなので、上のように書いても意味はないのだろう。そこで以下のようにしたら、setになった。

実行されない限りglobalも評価されないということだろう。では関数内で変数がglobalかどうか知るにはどうすればいいのかというと$GLOBALS[]を使えばいいらしい。

よって変数$wp_did_headerはif文の中を1回だけ実行されるようにしたいのだろう。しかしそれならdefineを使ったほうがいいと思うが、defineよりも緩くしたということだろうか。


/wp-blog-header.php

__FILE__はマジックコンスタントといって自分のファイルのパスをフルパスで返す。4.0.2以降はシンボリックリンクも解決してくれる。dirname()はディレクトリを返すので、この文はこのファイルがあるディレクトリにあるwp-load.phpをrequire_onceする。require_onceは一回だけrequireすることだろう。しかしこの場合以下のように書いてはいけないのだろうか。

phpにはカレントディレクトリを変える関数もあるし、デフォルトのカレントディレクトリは最初に実行されたファイルのディレクトリになると思うので、dirname(__FILE__)として自分と同じディレクトリにしているのだろう。ちなみにマジックコンスタントとして以下のようなものもある。
__LINE__ : これがかかれている行番号
__DIR__ : dirname(__FILE__)と同じ。5.3.0から利用可能
__FUNCTION__ : 実行されている関数
__CLASS__, __METHOD__,__NAMESPACE__ : 省略。

おわり

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)