PHP: получить все имена методов из объекта с именем "bla_" - PullRequest
23 голосов
/ 01 декабря 2009

У меня есть объект, и я хочу метод, который возвращает количество методов этого объекта, которые начинаются с "bla _".

Я нашел get_class_methods (), который возвращает все имена методов, но я хочу только имена, начинающиеся с "bla _"

Ответы [ 4 ]

43 голосов
/ 01 декабря 2009

Вы можете использовать preg_grep() для их фильтрации:

$method_names = preg_grep('/^bla_/', get_class_methods($object));
6 голосов
/ 01 декабря 2009

Попробуйте:

$methods = array();
foreach (get_class_methods($myObj) as $method) {
    if (strpos($method, "bla_") === 0) {
        $methods[] = $method;
    }
}

Обратите внимание, что === необходимо здесь. == не будет работать, поскольку strpos() возвращает false, если совпадений не найдено. Из-за динамической типизации PHP это равно 0, и поэтому необходима строгая (безопасная для типов) проверка на равенство.

1 голос
/ 01 декабря 2009

Почему бы вам просто не сделать свою собственную функцию, которая проходит через массив из get_class_methods () и проверяет каждый элемент на "bla_" и возвращает новый список с каждым совпадающим значением?

0 голосов
/ 01 декабря 2009

Я бы предложил что-то более гибкое (например, если имена методов не являются динамическими или неизвестны):

interface ITest
{
    function blah_test();
    function blah_test2();
}

class Class1 implements ITest
{
    function blah_test()
    {
    }

    function blah_test2()
    {
    }

    function somethingelse()
    {
    }
}

$obj = new Class1();

$methods = array_intersect( get_class_methods($obj), get_class_methods('ITest') );
foreach( $methods as $methodName )
{
    echo "$methodName\n";
}

Выходы:

blah_test
blah_test2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...