- 締切済み
is_callable()の第二引数の使い方
いつもお世話になっています。 PHPの勉強を始めた初心者です。 is_callable()の第二引数の使い方がよく分りません。 true に設定すると、$name が文字列型である場合には、常に bool(true)を返します。 どういう時に、役に立つのでしょうか? お教えいただければ幸いです。 <?php // http://php.net/manual/ja/function.is-callable.php: /* bool is_callable ( callback $name [, bool $syntax_only = false [, string &$callable_name ]] ) syntax_only TRUE の場合、この関数は単に name が関数またはメソッドであるかどうかだけを調べます。 文字列以外の型の変数や不正な形式の配列は、引数として受け付けられません。 */ class someClass { function someMethod() { print "hello from someMethod\n"; } } $varInt = 1; $varString = "string"; $varObject = new someClass(); $varMethod = array($varObject, 'someMethod'); var_dump(is_callable($varInt, true)); // bool(false) var_dump(is_callable($varInt, false)); // bool(false) var_dump(is_callable($varString, true)); // bool(true) var_dump(is_callable($varString, false)); // bool(false) var_dump(is_callable($varMethod, true)); // bool(true) var_dump(is_callable($varMethod, false)); // bool(true) $varObject->someMethod(); [study_php@localhost ch05]$ php is_callable_Test.php bool(false) bool(false) bool(true) bool(false) bool(true) bool(true) hello from someMethod [study_php@localhost ch05]$
- みんなの回答 (3)
- 専門家の回答
みんなの回答
PHP のソースアーカイブに zend_API.c というファイルがあります。ここに実際の処理内容が記述されていますので、こちらをご覧になるとよいでしょう。 当たり前の回答になりますが、速度に違いが出るので確認対象の数が多いときに使うのだと思います。 それ以外では、第3引数で呼び出し名を受け取る変数を設定したいとき、端折れないので false と書くぐらいでしょうか。こちらは HTML_QuickForm2_Rule_Callback クラス定義中の記述で確認できます。 ここを true で呼び出している例は、見つけることが出来ませんでした。
- hogehoge78
- ベストアンサー率80% (433/539)
すみません、説明不足でした。 is_callableの第二引数をtrueにする使い方に対して、 先に挙げた関数などもあるので、 「意識して使う必要もあまり無い気がします」 ということが言いたかっただけでした。 第二引数をfalseにしての使い道は、質問者さんも分かってらっしゃると思います。
- hogehoge78
- ベストアンサー率80% (433/539)
マニュアルに、シンタックスのみを見る、と書いてあるとおり、 array('文字列', '文字列') '文字列' array('オブジェクト', '文字列') という形式になっているものは全部通しますね。(でも'1'とかしても通るのはちょっとダメなんじゃないかとは思います) 呼び出し可能かを調べる方法としては、 function_exists method_exists class_exists など、他のものもあるので、意識して使う必要もあまり無い気がします。 今のところ何に使うかはパッと思いつきませんが、とりあえず知ってさえいれば、 それを使わなくてはならないような何らかの案件があったときに、使えるのではないでしょうか。
補足
回答ありがとうございます。 >呼び出し可能かを調べる方法としては、 >method_exists method_exists() だと、private や protected なメソッドを引数に渡したときも bool(true) を返してしまうので、callback を行う際に、そのメソッドが callable であるかどうかのチェックが出来ないのではないでしょうか?