
いつもお世話になっています。
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]$
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
PHP のソースアーカイブに zend_API.c というファイルがあります。
ここに実際の処理内容が記述されていますので、こちらをご覧になるとよいでしょう。当たり前の回答になりますが、速度に違いが出るので確認対象の数が多いときに使うのだと思います。
それ以外では、第3引数で呼び出し名を受け取る変数を設定したいとき、端折れないので false と書くぐらいでしょうか。こちらは HTML_QuickForm2_Rule_Callback クラス定義中の記述で確認できます。
ここを true で呼び出している例は、見つけることが出来ませんでした。
No.2
- 回答日時:
すみません、説明不足でした。
is_callableの第二引数をtrueにする使い方に対して、
先に挙げた関数などもあるので、
「意識して使う必要もあまり無い気がします」
ということが言いたかっただけでした。
第二引数をfalseにしての使い道は、質問者さんも分かってらっしゃると思います。
No.1
- 回答日時:
マニュアルに、シンタックスのみを見る、と書いてあるとおり、
array('文字列', '文字列')
'文字列'
array('オブジェクト', '文字列')
という形式になっているものは全部通しますね。(でも'1'とかしても通るのはちょっとダメなんじゃないかとは思います)
呼び出し可能かを調べる方法としては、
function_exists
method_exists
class_exists
など、他のものもあるので、意識して使う必要もあまり無い気がします。
今のところ何に使うかはパッと思いつきませんが、とりあえず知ってさえいれば、
それを使わなくてはならないような何らかの案件があったときに、使えるのではないでしょうか。
この回答への補足
回答ありがとうございます。
>呼び出し可能かを調べる方法としては、
>method_exists
method_exists() だと、private や protected なメソッドを引数に渡したときも bool(true) を返してしまうので、callback を行う際に、そのメソッドが callable であるかどうかのチェックが出来ないのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php文字列中のシングルクオート...
-
PHPのif文でその処理を途中で抜...
-
【file_exists】ファイルが存在...
-
「クラス関数」「メンバ関数」...
-
glob関数で日本語文字が取得で...
-
VB6.0とBASP21を用いてyahooメ...
-
URLの変わらないページをPHPで...
-
FTPClientで転送結果(OKかFAIL)
-
PHPの設定で、 エラーが発生し...
-
VB6にてメールを送信する方法
-
別ファイルの変数を呼び出した...
-
WinXP PHP5 Apache2 初期設定で...
-
DLL のロードの順序
-
LoadLibraryの戻り値(HMODULE)...
-
ボタンのクリック数を合計保存...
-
別サーバのプログラムを起動
-
値の受け渡しが出来ない。
-
サーバ無しでphpを動作させる
-
PHPでファイルをダウンロードさ...
-
phpとpostgreSQLで接続不可?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php文字列中のシングルクオート...
-
getでurl
-
php→JavaScript間の変数受け渡し
-
PHPにおいて、配列データをMySQ...
-
is_callable()の第二引数の使い方
-
PHPでカンマ区切り文字列を数値...
-
PHPのGETとPOSTの処理を学習中...
-
ある文字列の最後の2桁で分解...
-
文字列を大文字の2桁ごとのコン...
-
PHP,Perl の正規表現で”ー"...
-
php 言語について
-
文字列を%+2桁のヘキサ
-
urldecodeについて
-
PHPで4桁の文字コード(SHIFTJI...
-
PHP4から5への移行に伴うFatal ...
-
blob型のデータの変換について
-
【比較演算子】偶数・奇数識別...
-
リダイレクトできません。クエ...
-
秀丸エディタのハイライト(mar...
-
phpでの単語数
おすすめ情報