从一个实体中调用所有的 getter
Calling all the getters from an entity
使用后:
$queryResult =
$this
->getDoctrine()
->getRepository('EtecsaAppBundle:Paralizacion')
->createQueryBuilder('e')
->getQuery();
->setDQL($myOwnQuery)
->getResult();
我有一组实体,我想为其使用所有 属性 吸气剂。我这样做是这样的:
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);
给定任何普通的旧 PHP 对象,您可以使用 get_class_methods()
获取对象上所有方法的列表,这些方法在调用 get_class_methods()
的范围内可见 - 在这种情况下所有 public
方法。
然后我们过滤这个值数组,只过滤 return 吸气剂。
对于上面的例子,这会产生:
array(1) {
[1] =>
string(6) "getFoo"
}
现在您可以动态调用您的 getter,如下所示:
foreach ($getters as $getter) {
echo $entity->{$getter}(); // `foo!`
}
希望对您有所帮助:)
使用后:
$queryResult =
$this
->getDoctrine()
->getRepository('EtecsaAppBundle:Paralizacion')
->createQueryBuilder('e')
->getQuery();
->setDQL($myOwnQuery)
->getResult();
我有一组实体,我想为其使用所有 属性 吸气剂。我这样做是这样的:
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);
给定任何普通的旧 PHP 对象,您可以使用 get_class_methods()
获取对象上所有方法的列表,这些方法在调用 get_class_methods()
的范围内可见 - 在这种情况下所有 public
方法。
然后我们过滤这个值数组,只过滤 return 吸气剂。
对于上面的例子,这会产生:
array(1) {
[1] =>
string(6) "getFoo"
}
现在您可以动态调用您的 getter,如下所示:
foreach ($getters as $getter) {
echo $entity->{$getter}(); // `foo!`
}
希望对您有所帮助:)