1. Вставлять с существующим решением
я бы просто заменить array_filter
с array_map
для более эффективной фильтрации внутреннего. Объявление типа параметра функции при его управлении 100% не требуется, но замедляет PHP. Также substr()
должен появиться быстрее, чем str_replace()
.
Позволь мне поддерживать короткий пример из совершенно так же, но все же-другого кода:
$class = 'Application\Entity\ExamplePhalconModel';
// ure filtering those with "get" only
$exclude = array_flip(['getSource', 'getId']);
$result = array_map(function($v) { return substr($v->name, 3); } , array_filter((new \ReflectionClass($class))->getMethods(\ReflectionMethod::IS_PUBLIC), function ($v) use ($class, $exclude) {
return (strpos($v->name, 'get') === 0 && $v->class === $class) && !array_key_exists($v->name, $exclude);
}));
разбив его, во-первых, я создаю Отражение класса проверяемый с (new \ReflectionClass($class))->getMethods(\ReflectionMethod::IS_PUBLIC)
, как вы делали. Помещая это как первый параметр в array_filter()
, я могу опустить некоторые объявления переменных. Как второй параметр, только в функции if
:
function ($v) use ($class, $exclude) {
return (strpos($v->name, 'get') === 0 && $v->class === $class) && !array_key_exists($v->name, $exclude);
}
для проверки, если он начинается с «получить» на всех, если он находится в надлежащем классе и, наконец, если это не в exluded имен методов.
Наконец, целое array_filter()
приводит к удалению до array_map()
только для их преобразования из объектов в строки, не содержащие слова «get»;
PS: В основном оптимизация и запутывания еще дальше;)
2. Phalcon Модель :: columnMap
Или просто:
$props = array_map(function($str) {
return \Phalcon\Text::camelize($str);
}, array_values(Application\Entity\ExamplePhalconModel::columnMap()));
но вам может понадобиться фильтр- поле «Id»;
60 гетры/сеттеры ಠ_ಠ –