
No.2ベストアンサー
- 回答日時:
No.1
- 回答日時:
関数を引数に取る関数を一般に高階関数と呼ぶ。
高階関数:
https://ja.wikipedia.org/wiki/%E9%AB%98%E9%9A%8E …
そして、高階関数に与える引数になる関数をコールバック関数、って呼ぶんだ。
PHP自体は知らんのだけど、callfuncの引数はcallableと言うキーワード(?多分)によって関数が指定されている。恐らく、文字列callfunc + "Hello"と言うコンビネーションが関数Helloを呼び出す仕組みになってて、それがcallfuncの本体で実行されてる、ってだけの話だろう。
うーん、多分PHPは「関数がファーストクラスオブジェクト」じゃない、んでcallable + "関数名"って書式になってんだろうね。
第一級オブジェクト:
https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80 …
他の主だった「関数がファーストクラスオブジェクト」な言語だと次のようになる。
;; Scheme:
(define (Hello)
(display "こんにちわ")
(newline))
(define (callfunc $f)
($f) ;; ここで引数で受け取った関数fを実行
(display "しおりさん")
(newline))
(callfunc Hello)
// JavaScript(ただしconsole.logは実装依存/ブラウザのAPI):
function Hello() {
console.log("こんにちわ");
}
function callfunc(f) {
f(); // ここで引数で受け取った関数fを実行
console.log("しおりさん");
}
callfunc(Hello);
## Python
def Hello():
print("こんにちわ")
def callfunc(f):
f() ## ここで引数で受け取った関数fを実行
print("しおりさん")
callfunc(Hello)
繰り返すが、高階関数とは関数を引数に取る関数、コールバック関数とは高階関数の引数として与える関数だ(callfuncは高階関数、Helloはコールバック関数となる)。
概念は簡単だし、「関数がファーストクラスオブジェクト」なプログラミング言語だと、データとして関数をそのまま与えられるし、そのまんまの関数名が使える。
一方、PHPは恐らく「関数がファーストクラスオブジェクト」と言う設計じゃないんて、引数で与えるキーワードとしてcallableが必要になり、関数名を直接引数として渡せないんで文字列で与えなければならない、と言うそれだけの話じゃないのかな。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
PHPの勉強してます。 配列のところですが、 実行結果は、9になりますが、 そのロジックを教えてくだ
PHP
-
HTML&CSSとHTML5&CSS3の違いについて。
HTML・CSS
-
index.htmlがうまく反映されない
HTML・CSS
-
-
4
プログラマー達は何故、プログラムを入れるフォルダーに容量制限があるのを知らない?
C言語・C++・C#
-
5
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
6
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
7
EJSを仕事でなんとなくで使っているので、もっと体系的に学びたいのですが、おすすめの本やサイトを教え
HTML・CSS
-
8
フロントエンドエンジニアをしていますが、スキルアップのための転職、異動は3年目では早すぎますか? 今
その他(プログラミング・Web制作)
-
9
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
10
アルゴリズムとコードとは何ですか 現代はネットでコードを探してドラクエ3が作れるとか?
その他(プログラミング・Web制作)
-
11
HTML&CSSとHTML5&CSS3の違いについて。
HTML・CSS
-
12
Webサイトの「デザインのみ(コーディング不要)」を依頼されました。 「レスポンシブデザイン」を希望
HTML・CSS
-
13
覚えることが少ないプログラミング言語を教えて下さい。
その他(プログラミング・Web制作)
-
14
perl の open について教えてください。
Perl
-
15
htmlの<input type=”file”>でアップロードする場合にファイルを設定していないとき
HTML・CSS
-
16
プログラミングに興味があるのですが、作りたいものはありません。 ゲーム機とかパソコンの中身(ソースコ
その他(プログラミング・Web制作)
-
17
C言語 関数、変数の宣言について
C言語・C++・C#
-
18
C言語について(初心者)
C言語・C++・C#
-
19
html 階層を下げると3分割画面が1画面になる
HTML・CSS
-
20
アセンブリ言語について。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFを(htmlのように)無限に縦...
-
1枚の画像をクリックすると複数...
-
入力フォームの値をQRコードで...
-
正規表現で、特定の文字列を含...
-
バッチファイル 特定ウインドウ...
-
C言語のflagの使い方が分かりま...
-
GASでスプレッドシートの一番上...
-
ダブルクリックと2回クリックの...
-
Base64に変換したHTMLの<script...
-
富士通のオフコンの部品交換
-
これってなんの電話かわかりま...
-
ワードでA3横の画面にして、文...
-
webページの特定の部分だけ消し...
-
HTML タグへのstyle記載の違い
-
時間表示で0:48:17と入力すると...
-
bxsliderで複数のvimeoスライド...
-
php コールバック関数
-
ナイトボットのAliasについて
-
VBAでクイズゲームの作り方
-
以下のURL入れますか?皆さんは↓
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
PDFを(htmlのように)無限に縦...
-
正規表現で、特定の文字列を含...
-
入力フォームの値をQRコードで...
-
1枚の画像をクリックすると複数...
-
GASでスプレッドシートの一番上...
-
ワードでA3横の画面にして、文...
-
C言語のflagの使い方が分かりま...
-
b75h2-m2 biosアップデートした...
-
ダブルクリックと2回クリックの...
-
jQuery を外部ファイルから呼び...
-
時間表示で0:48:17と入力すると...
-
日本語版アンサイクロペディア...
-
同一ページ移動時ハンバーガー...
-
データ受け渡しについて
-
非同期通信を使うタイミングが...
-
webページの特定の部分だけ消し...
-
jQueryを使いformでsubmitした...
-
VBA コンボボックスの値をスピ...
-
これってなんの電話かわかりま...
おすすめ情報