PHP【callback関数の使い方】


配列要素がオブジェクトの時、
全要素に、要素自身のメソッドを実行させることはできるのでしょうか?
ただし、独自関数/クラスを書くのではなく、標準的な方法で。

<?php
class A
{
public function f() {
return 'x';
}
}
$objects = array(new A, new A, new A);

// これを
$wants = array();
foreach ($objects as $obj) {
$wants[] = $obj->f();
}

// こんな感じでできますか?
$wants = array_walk($objects, array(★, 'f'));

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/04 16:40:32
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント40pt

こんな感じでしょうか?

<?php
$wants = array_walk($objects, create_function('$o,$i', 'return $o->f();'));
?>
id:nannde

ありがとうございます!!

2009/11/04 16:38:37

その他の回答2件)

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226ここでベストアンサー

ポイント40pt

こんな感じでしょうか?

<?php
$wants = array_walk($objects, create_function('$o,$i', 'return $o->f();'));
?>
id:nannde

ありがとうございます!!

2009/11/04 16:38:37
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント20pt
<?php
class A
{
public function f() {
return 'x';
}
}
$objects = array(new A, new A, new A);

$wants = array();
$callback = create_function('$array,$index','$wants[] = $array[$index]->f()');
array_walk($objects,$callbak);

print_r($wants);

PHP: create_function - Manual

こんな所かな。テストはしてないので多少ミスはあるかもしれないが。

id:nannde

とてもわかりやすく書いていただきましたおかげで、

y-kawazさまのご回答と合わせて理解できました。

ありがとうございました!!

2009/11/04 16:35:23
id:y-kawaz No.3

回答回数1422ベストアンサー獲得回数226

ポイント20pt

蛇足ですが、PHP6になるとクロージャが使えるようになるので以下のような感じに書くことが出来るようになるらしいですね。

<?php
$wants = array_walk($objects, function($o,$i){return $o->f();});
?>
id:nannde

情報ありがとうございます!

PHP6 触る際には確実に思い出せそうです。

2009/11/04 16:38:20
  • id:standard_one
    そんな感じでは出来ないので「どうしたら1行で同じ事ができますか?」で新しい質問を立ててみては?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません