关于php:变量在函数中的变量?


Variable's variable in function?

本问题已经有最佳答案,请猛点这里访问。

我需要帮助:

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

我需要从预装的库中运行函数

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

等。

但我在这个循环中。所以我想要类似的东西

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

怎么能做到?


请参阅如何从存储在变量中的字符串调用php函数:

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

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


我会使用反射,一个有良好记录的,没有魔力的API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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;
}


有一种神奇的方法可以做到这一点:

1
2
3
4
5
6
7
8
9
10
11
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