我有20个对象的数组都是一样的。这些对象都是相同的,包含一些属性和一些getter和setter。我将属性数据转换为HTML表格,如下所示:
=SUM(A2:A6)-SUMIF(C2:C10,"Yes",B2:B10)
我遍历我的对象数组,然后我得到每个对象的所有方法,我只过滤了getter(使用strpos)。该功能有效,但检索所有对象方法是浪费时间。我能想到的解决方案是获取第一个对象并检索其所有方法(getter)并在我的addBody函数中使用它。
这会是一个更好的解决方案吗?
答案 0 :(得分:2)
检查一下:
public function addBody($objects) {
$ret = '';
$obectMethods = get_class_methods(current($objects));
$methods = array_filter($obectMethods, function($method) {
return strpos($method, 'get') !== false;
});
foreach($objects as $object) {
$ret .= '<tr>';
foreach($methods as $method) {
$ret .= '<td>' . call_user_func(array($object, $method)) . '</td>';
}
$ret .= '</tr>';
}
return $ret;
}
首先,我们从第一个对象中检索方法,并在foreach循环中使用它们。
答案 1 :(得分:0)
我不确定你的定义是否更好,但确定还有另外一个...更少的代码和一个getter访问任何属性为您的具体情况。
我们简单的实体:
class myEntity {
private $name;
private $age;
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
return null;
}
}
然后在你的方法中:
public function addBody($entities, $properties) {
$ret = '';
foreach($entities as $entity) {
$ret .= '<tr>';
foreach($properties as $property) {
$ret .= '<td>' . $entity->__get($property) . '</td>';
}
$ret .= '</tr>';
}
return $ret;
}
你有一个实体列表:
$entities = array ( new myEntity(), new myEntity());
$properties = array ('name', 'age');
var_dump($object->addBody($entities, $properties));