phpコールバック関数について

このQ&Aのポイント
  • php初心者のものですが、コールバック関数(可変関数)についての質問です。
  • 関数func_callerは与えられた名前を持つ関数が存在すれば呼び出すための関数です。
  • 具体的には、引数として与えられた名前の関数が存在すれば、その関数を呼び出します。
回答を見る
  • ベストアンサー

phpコールバック関数について

php初心者のものですが、コールバック関数(可変関数)についての質問です。 //引数の与えらえられた名前をもつ関数が存在すれば呼び出すための関数 function func_caller($name)(2) { if (function_exists($name)) { (3) $name(); //可変換数をして関数の呼び出し } } function foo() { echo 'foo call', PHP_EOL; } func_caller('foo'); //foo called(1) とあるのですが (1)の関数が(2)に呼ばれて$nameはfooが入ってて (3)が評価されまでわかるのですが次にどうなっていくのかわかりません。 どなたかわかる方いらっしゃいましたらどうか教えていただけないでしょうか? 何卒よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>(3)が評価されまでわかるのですが次にどうなっていくのかわかりません。 評価して「その名前の関数が存在したら」「その関数を呼び出す」だけですが、どのあたりがわからないのでしょうか? if (function_exists($name)) { (3) // 引数で与えられた名前の関数が存在したら $name(); // その関数を呼び出す } http://www.php.net/manual/ja/functions.variable-functions.php

関連するQ&A

  • echo (float)'1e2foo', PHP

    echo (float)'15foo', PHP_EOL; echo (float)'15.33foo', PHP_EOL; echo (float)'1e2foo', PHP_EOL; echo (float)'foo', PHP_EOL; 以上参考書を転記しました 試しに echo '<pre>'; echo (float)'15', PHP_EOL; echo (float)'15.33', PHP_EOL; echo (float)'1e2', PHP_EOL; echo (float)'', PHP_EOL; echo '</pre>';  とfooを省きました、二つのプログラムの実行結果は 以下ですがと同じです。 15 15.33 100 0   一つ目の質問です。   なぜ、参考書はfooをあえて入れてのでしょうか? 二つ目の質問です。  1e2を1e3にすると結果が1000になります。  1eて何ですか!?    宜しくお願いします。

    • 締切済み
    • PHP
  • 【PHP】関数で処理が止まってる??

    お世話になります。 PHPでの質問ですが、PHPに限ったものではないように思いますので、プログラム全般に対しての質問と思って下さって結構です。 ※PHP特有のという意見があれば、それも大歓迎です。 下記のようなコードを組んでみました。 <?php echo "func1の結果["; echo func1(); echo "]"; function func1(){ (内容は割愛) return TRUE; } ?> このコードをアップしてアクセスしてみると   出力結果  func1の結果[ でした。 ブラウザのステータスに「ページが表示されました」とあるので、処理中で出力待ちということはないと思います。 > echo func1(); > echo "]"; の箇所の出力はどうなっていると考えればいいのでしょうか? 「関数の内容次第で・・・」とお答えになる方、どういう内容だとこのような結果になるのかというところでお答えください。 私のプログラムによる根本的な考え方は、プログラムは上から下に順番になので、 上記内容の箇所にどんなコードがあったとしても、func1関数はTRUEを返すので、結果としては「func1の結果[1]」となるはずでした。 でも実際の出力結果をみると処理が途中で(おそらくfunc1()内で)止まっているともいます。 timeoutではないため無限ループに嵌ってっていうのもないと思います。 これはどういうことでしょう???

    • 締切済み
    • PHP
  • ブラウザ上に出せますか!?

    echo (float)'15foo', PHP_EOL;   // 15 echo (float)'15.33foo', PHP_EOL; // 15.33 echo (float)'1e2foo', PHP_EOL; // 100 (1e2) echo (float)'foo', PHP_EOL; // 0 以上ですが、  ブラウザ上に結果を出せますか!? もし、ブラウザ上に出すには、後!どんなプログラムが必要ですか!? 分かりません、宜しくお願いします。

    • ベストアンサー
    • PHP
  • Pythonでcall_user_funcを行う

    お世話になります。 最近Pythonの勉強を始めた初心者です。 GAE/Python2.5で、PHPで言うcall_user_funcを使う方法を探しております。 具体的に言いますと、関数名(メソッド名)を変数に入れて、それを呼び出す方法を探しています。 例えばPHPで言えば下記のようなコードです。 ---------------------- <?php // 呼び出すクラス class CTestClass {   // 呼び出すメソッド   function TestFunc()   {     echo 'Call <CTestClass::TestFunc()>';   } } // 変数にメソッド名を入れて呼び出す $func = 'TestFunc'; $obj = new CTestClass(); call_user_func( array( $obj, $func ) ); // print Call <CTestClass::TestFunc()> ---------------------- Pythonでは上記のような事は可能でしょうか? また、メソッドを呼び出すのと普通のグローバル関数を呼び出すのでやり方が違う場合はそちらも教えて頂けるとあり難いです。 以上、よろしくお願い致します。

  • php 自作関数

    PHPでfunctionによって定義される関数を作っているのですが 引数なしで関数をつくることは可能なのでしょうか? 例えば function hello{ print "HelloPhp"; } 理想ではphp側でhello関数を呼び出せばHelloPhpと出力されます 実際の使い道は関数名が使い辛いので別の名前で関数名を定義したいんです 引数を与えてもいいのですがfunction側で引数が固定されるためphp側と毎回同じ変数:引数にならない 説明し辛いのですが 先ほど述べた理由で使いたいのですが、わかる方いらっしゃったらよろしくお願いします

    • 締切済み
    • PHP
  • PHPにおいて

    コールバック関数とはどのようなものをさすのでしょうか? 配列を扱う関数の第二引数によく関数を渡すものがありますよね? array_walkやusortなどですが この引数に渡す、関数がコールバック関数なのでしょうか? だとしても、いまいちピンときません。 引数に関数を渡してなぜそれがコールバック関数とよばれるものになるのでしょうか? コールバック関数の動きとはどのようなものなのでしょうか? (特定の関数が実行されたときに、 引数に渡された、関数が、その特定の関数内で実行されることが コールバックという動作なのでしょうか?) 以下、URLとうにコールバック関数を渡せる一覧がありました。 http://tm.root-n.com/programming:php:etc:callback_function

    • ベストアンサー
    • PHP
  •  %php stringcast.php 100

    <?php // stringcast.php if (!isset($argv[1])) { exit; } $num = $argv[1]; if ($num == 100) { echo "num is 100", PHP_EOL; } else { echo "num is not 100",PHP_EOL; } このプログラムを %php stringcast.php 100のように実行すると、引数の100は PHPには文字列型として渡されます。・・・  以上参考書にあります。  作業の流れが分かりません。  %php stringcast.php 100とは!何のことなのでしょうか!?  以上宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpで関数の定義について <?php fun

    phpで関数の定義について <?php function say_hello(){ echo "hello world"."\n"; } say_hello(); echoというのはもともと関数ですよね? 関数を定義するとは、関数を新たに作るということですよね? この新たに作った、say_hello();という関数の中に echo "hello world"."\n";という関数を入れてあるということですか?

    • ベストアンサー
    • PHP
  • Jsonpのコールバック関数に内に引数を渡すには?

    APIで返されたJsonpコールバック関数に引数を渡したいのですが、やり方が判りません。 それともそもそも、間違っていて 1.引数を渡さない 2.コールバック関数内のデータを一旦変数にいれてコールバック関数内から取り出す。 3. 2で取り出したコールバック関数内のデータと1で渡そうとしていた引数を使う。 とやったほうがいいのでしょうか。 当方経験が浅いためよくわかっていません。基本的な間違いの可能性が高いと思います。 識者の方ご教授下さい。お願いします。 function start(){ var str = "渡したい引数"; var param = new Object(); param.keyword = '東京'; param.inputcharset = 'utf8'; param.outputcharset = 'utf8'; param.format = 'jsonp'; param.callback = 'jsonp4travelAPI'; var url = 'http://api.4travel.jp/Ver1/SearchAlbum.php?'+obj2query( param ); // script 要素の発行//ここでAPIへリクエストを送る。 var script = document.createElement( 'script' ); script.type = 'text/javascript'; script.src = url; document.body.appendChild( script ); } // 4travel検索終了後のコールバック関数 function jsonp4travelAPI ( data ) { // データが取得できているかチェック // //ここに渡したい引数も持ってきたい。でも str is not definedになります。 alert(str); } // オブジェクトからクエリー文字列を生成する関数 function obj2query ( obj ) { var list = []; for( var key in obj ) { var k = encodeURIComponent(key); var v = encodeURIComponent(obj[key]); list[list.length] = k+'='+v; } var query = list.join( '&' ); return query; } window.onload =start;

  • 【PHP】usort()関数内の引数について

    【PHP】usort()関数内に出てくる関数の引数の意味を教えてください。 usort(ユーザー定義関数) 以下のような配列があります。ここで'score'を小さな順番(昇順)で並べ替えるためにusort()関数を使いたいと思います。 $data= [ ['name' => 'yamada', 'score'=> 80], ['name' => 'suzuki', 'score'=> 60], ['name' => 'tanaka', 'score'=> 70], ['name' => 'okada', 'score'=> 60], ]; usort( $data, function($a, $b){ if ($a['score']=== $b['score']){ return 0; } return $a['score'] > $b['score'] ? 1: -1; } ); echo "<pre>"; print_r($data); echo "</pre>"; ----------------------------------------------------------------- サンプルでは上記のように$a,$bが使用されています。 スコアの数値を比較して、あるスコアの値と別のスコアの値が同じであれば「0」を返す。$aの値が$bより大きければ「1」を返す、そうでなければ「-1」を返す。 返ってきた値、「-1」,「 0」,「 1」と小さな順に並べる… こういうことかと思います。添付画像のように表示された値も合っています。 が、functionの引数($a, $b)の意味がよくわかりません。 foreachなどでループさせ値を一つづつ比較するというよう作業を行うのであればまだ理解できるかもしれませんが、ただ単に引数に function($a, $b)…としただけでscoreの値が$a、$bにどうやって代入されていくのでしょうか?? $a, $bと記述しただけで全てのscoreの値をなぜ比較してくれるのかわかりません。 また、現在$dataの中には4つしか配列がありません。-1,0,1だけで順番をつけられるでしょうが、これが50, 100個と配列データが増えた場合でもこのやり方でできるのでしょうか? 初学者です。分かる方いらっしゃいましたら教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう