
いつもお世話になっています。
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 ech...
-
PHP8でWarning:Undefined varia...
-
PHPを使って、別サイトの一部を...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
フォームで戻った際に入力済み...
-
php でqiitaのサイトにあったフ...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
index.phpって何ですか? 具体...
-
PHPでのパスワード制限のセキュ...
-
phpのクラスメソッドの定義が長...
-
csvファイルについて教えて下さ...
-
PHPの構文で間違えが分からない
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
複数のパソコンの中の1つのパソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php文字列中のシングルクオート...
-
GETの値について
-
include/require文へのバリデー...
-
特定の漢字に\\マークが入って...
-
PHP3の文字化け
-
外部参照のランダムリンクについて
-
PHPにおいて16進数のアスキー文...
-
0dで始まる文字列の比較がうま...
-
PHPのGETとPOSTの処理を学習中...
-
PHPのエスケープシーケンスに関...
-
PHPでカンマ区切り文字列を数値...
-
パラメーター付きのURLをリダイ...
-
urldecodeについて
-
リダイレクトできません。クエ...
-
PHPでPが2個あるので分かりず...
-
PHPにおいて、配列データをMySQ...
-
検索に関する文字コード
-
仕様ならしようがない(洒落)
-
hexdec(uniqid())でE+15が付く
-
if ('0.0'=='0'){ の0.0とは何
おすすめ情報