我需要帮助:
$foo = array ('Projects', 'Clients');
我需要从预装的库中运行函数
$bar->getProjects()->data
$bar->getClients()->data
等等等等
但我在循环中有它。所以我想要类似的东西
foreach($foo as $value)
$return_value = $bar->get >>>>$value<<<< ()->data
如何才能做到这一点?
我需要帮助:
$foo = array ('Projects', 'Clients');
我需要从预装的库中运行函数
$bar->getProjects()->data
$bar->getClients()->data
等等等等
但我在循环中有它。所以我想要类似的东西
foreach($foo as $value)
$return_value = $bar->get >>>>$value<<<< ()->data
如何才能做到这一点?
foreach ($foo as $value) {
$method = 'get' . $value;
$return_value = $bar->$method()->data
}
或者
foreach ($foo as $value)
$return_value = $bar->{'get' . $value}()->data;
我会使用反射,一个有据可查的,没有神奇的 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;
}
有一个神奇的方法:__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