web-dev-qa-db-ja.com

配列値として機能

これは何も見つからないようで、関数または関数参照を配列要素の値として格納できるかどうか疑問に思っていました。例:.

array("someFunc" => &x(), "anotherFunc" => $this->anotherFunc())

ありがとう!

13
user784446

任意の関数を「参照」できます。関数参照は、「メモリ内のアドレス」などの意味での参照ではありません。これは単に関数の名前です。

<?php

$functions = array(
  'regular' => 'strlen',
  'class_function' => array('ClassName', 'functionName'),
  'object_method' => array($object, 'methodName'),
  'closure' => function($foo) {
    return $foo;
  },
);

// while this works
$functions['regular']();
// this doesn't
$functions['class_function']();

// to make this work across the board, you'll need either
call_user_func($functions['object_method'], $arg1, $arg2, $arg3);
// or
call_user_func_array($functions['object_method'], array($arg1, $arg2, $arg3));
14
rodneyrehm

pHPのcall_user_funcをチェックしてください。以下の例を考えてみましょう。

2つの機能を検討する

function a($param)
{
    return $param;
}

function b($param)
{
    return $param;
}


$array = array('a' => 'first function param', 'b' => 'second function param');

これで、すべての関数を順番に実行したい場合は、ループで実行できます。

foreach($array as $functionName => $param) {
    call_user_func($functioName, $param);
}

plus arrayは、関数呼び出し、ネストされた配列、オブジェクト、文字列、整数など、あらゆるデータ型を保持できます。

5

PHPは変数関数の概念をサポートしているため、次のようなことができます。

function foo() { echo "bar"; }
$array = array('fun' => 'foo');
$array['fun']();

manual で他の例を確認できます。

5
Paulo Rodrigues

はい、できます:

$array = array(
    'func' => function($var) { return $var * 2; },
);
var_dump($array['func'](2));

もちろん、これにはPHP 無名関数 サポートが必要です。これはPHPバージョン5.3.0で提供されます。これは、ただし、コードはまったく読めません。

4
Treffynnon