Php 从实体调用所有getter

Php 从实体调用所有getter,php,symfony,dynamic,call,getter,Php,Symfony,Dynamic,Call,Getter,使用后: $queryResult = $this ->getDoctrine() ->getRepository('EtecsaAppBundle:Paralizacion') ->createQueryBuilder('e') ->getQuery(); ->setDQL($myOwnQuery) ->getResult(); 我有一个实体数组,我想

使用后:

$queryResult = 
    $this
        ->getDoctrine()
        ->getRepository('EtecsaAppBundle:Paralizacion')
        ->createQueryBuilder('e')
        ->getQuery();
        ->setDQL($myOwnQuery)
        ->getResult();
我有一个实体数组,我想使用它们的所有属性getter。我是这样做的:

foreach ($queryResult as $index => $itemEntity)
{
    $objWorksheet->SetCellValue('A'. ($index + 17 ), $index + 1);
    // ... The itemEntity class has entity relationships associations 
    $objWorksheet->SetCellValue('B'. ($index + 17 ), $itemEntity->getSomeRelatedProperty()->getSomeProperty());
    // ... it also has properties with several types (date, string, etc)
    $objWorksheet->SetCellValue('C'. ($index + 17 ), $itemEntity->getSomeProperty));
    // Also some of the values obtained from his respective getter require some processing
    $objWorksheet->SetCellValue('D'. ($index + 17 ), getProcessedValue($itemEntity->getSomeSpecificProperty));
}
SetCellValue函数中使用的字母也将增加。我举个例子。 有没有一种方法可以动态调用实体的所有getter,这样我就不必逐个调用它们了?比如说:

foreach ($queryResult as $index => $itemEntity)
{
    $columnLetter = 'A';
    $objWorksheet->SetCellValue($columnLetter++ . ($index + 17 ), $index + 1);

    arrayOfGetters = getArrayOfGetters(itemEntity);
    foreach (arrayOfGetters as $getterMethod)
    {
        // properties that reference an entity relationship association would have the __ToString function
        $objWorksheet->SetCellValue($columnLetter++ . ($index + 17 ), /* get value of getterMethod */);
    }
}

这是一个PHP通用答案,应该适用于您的情况。试试这个:

<?php

class Entity
{
    public function setFoo($foo)
    {
        $this->foo = $foo;
    }

    public function getFoo()
    {
        return $this->foo;
    }
}


$entity = new Entity();
$entity->setFoo('foo!');

$getters = array_filter(get_class_methods($entity), function($method) {
    return 'get' === substr($method, 0, 3);
});

var_dump($getters);
现在可以动态调用getter,如下所示:

foreach ($getters as $getter) {
    echo $entity->{$getter}(); // `foo!`
}

希望这有帮助:)

问题是?@JovanPerovic抱歉。。。我在寻求一种方法来动态调用实体的所有getter,所以我不必逐个调用它们。我认为人们对你的问题投了反对票,因为它有点模糊。我认为你的问题的关键在标题上是清楚的(因此我提交了答案),但是下面的“SetCellValue函数中使用的字母也会增加”是问题的一部分吗?如果是这样,请澄清,我将尝试相应地更新我的答案。感谢您的回答@Darragh我刚刚更新了我的问题,以显示我在这里试图实现的目标。我想我可以很好地利用你的答案。需要注意的是,
get\u class\u methods()
也会返回静态方法的名称。在您的情况下可能不是问题,因为您不太可能有静态getter和setter。但值得指出的是!有一个问题@Darragh我在哪里可以得到一些关于{}在这个
$entity->{$getter}()
上使用的信息,实际上,在这种情况下它是完全冗余的,所以你可以使用
$entity->$getter()
。我本来打算对它进行编辑,但后来我想它可能会说明,可以使用字符串值作为对象上可调用对象的占位符。有时人们看不到
->$
:)在任何情况下,您都可以在中找到更多信息。查找标题复杂(卷曲)语法(没有页面锚,这让我对PHP文档感到厌烦)。它提供了一些示例,说明
{$myvar}
语法如何“允许使用复杂表达式”。重申一下,由于函数和方法名的语法规则,它实际上是完全多余的,所以请随意删除它!
foreach ($getters as $getter) {
    echo $entity->{$getter}(); // `foo!`
}