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 13:03:44
  • 終了:2009/11/04 16:40:32

ベストアンサー

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262009/11/04 14:16:11

ポイント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

y-kawaz回答回数1421ベストアンサー獲得回数2262009/11/04 14:16:11ここでベストアンサー

ポイント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

b-wind回答回数3344ベストアンサー獲得回数4402009/11/04 14:41:08

ポイント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

y-kawaz回答回数1421ベストアンサー獲得回数2262009/11/04 15:36:08

ポイント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行で同じ事ができますか?」で新しい質問を立ててみては?

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません