Variable's variable in function?
本问题已经有最佳答案,请猛点这里访问。
我需要帮助:
1 |
我需要从预装的库中运行函数
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]; } } |
你也可以看看