Archive for 11 月 14th, 2007

[php]assert()関数ってのがあるのか

11 月 14th, 2007 | Category: php
このエントリをはてなブックマークに追加[php]assert()関数ってのがあるのかのはてなブックマーク被リンク数このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

 適当にphpマニュアルをあさっていたら、assert()って関数を見つけました。引数がFALSEだったらTRUEを返すという関数。はっきりいって使いどころが微妙です。

 assert()関数をググってもたいした情報は出てこないので、まず使われることのない関数なんでしょうね。

 assert_options()という関数もあり、これはassert()関数の動作を変更することができるようです。警告を発したり、実行を終了したり、コールバック関数を呼び出したりできるそうです。

 assert()関数のマニュアルにはデバッグに使用するべきだと書いてあります。んーというか、デバッグなら別にassert()使わなくてもいい気がします。デバッグの箇所が明確にわかるという意味では有効かもしれませんが、見慣れない関数なので何かの処理を実行する関数だと勘違いしそうです。他の人との意思疎通が図れないのであればこの関数をデバッグに使う意味はありません。

 また1つ無駄な関数を覚えてしまった。

■2007/11/15 10:50追記

 ogiさんのコメントで誤りを発覚しました。マニュアルには

assertion が文字列として指定された場合、 assert()によりPHPコードとして評価されます。
assert()

とありました。つまり、文字列が渡されたときにはeval関数を実行の後、その返り値がFALSEであればTRUEを返すということらしいです。検証もせずに記事かいてすいませんでした。

 文字列 assertionが優れているところは、 assertion のチェックがオフになった場合のオーバーヘッドがより少な いことであり、assertionが失敗した場合のメッセージを式 assertionに有しています。
assert()

ogiさんのご指摘のとおりです。文字列のassertionはデバッグから本番に切り替える際に、assertionの評価をしないようにassert_options()で変更すれば、オーバーヘッドが少ないそうです。

 個人的には文字列をevalするのに若干の抵抗があるのですが・・・JavaScripterではないからですかね。

3 comments