0

私はこれについて助けが必要です:

$foo = array ('Projects', 'Clients');

そして、プリインストールされたライブラリから関数を実行する必要があります

$bar->getProjects()->data
$bar->getClients()->data 

などなど。

しかし、私はそれをサイクルの中に持っています。だから私は次のようなものが欲しい

foreach($foo as $value)
  $return_value = $bar->get  >>>>$value<<<<  ()->data

これはどのように行うことができますか?

4

3 に答える 3

2

変数に格納されている文字列からPHP関数を呼び出す方法を参照してください。

foreach ($foo as $value) {
  $method = 'get' . $value;
  $return_value = $bar->$method()->data
}

また

foreach ($foo as $value)
  $return_value = $bar->{'get' . $value}()->data;
于 2013-02-14T13:25:55.070 に答える
1

十分に文書化された、魔法のAPIではないリフレクションを使用します。

<?php

$foo = array ('Projects', 'Clients');
$bar = new MyAwesomeClass();

var_dump(invokeMultipleGetters($bar, $foo));


// could also make this a method on MyAwesomeClass...
function invokeMultipleGetters($object, $propertyNames)
{
    $results = array();
    $reflector = new ReflectionClass($object);

    foreach($propertyNames as $propertyName)
    {
        $method = $reflector->getMethod('get'.$propertyName);
        $result = $method->invoke($bar);
        array_push($results, $result)
    }

    return $results;
}
于 2013-02-14T13:28:49.353 に答える
0

そのための魔法のメソッドがあります: __call

function __call($method, $params) {

     $var = substr($method, 3);

     if (strncasecmp($method, "get", 3)) {
         return $this->$var;
     }
     if (strncasecmp($method, "set", 3)) {
         $this->$var = $params[0];
     }
}

あなたも見ることができますcall_user_func

于 2013-02-14T13:28:18.133 に答える