web-dev-qa-db-ja.com

PHPオブジェクトから部分文字列で始まるすべてのメソッド名を取得します

オブジェクトがあり、_bla__で始まるこのオブジェクトのメソッドの量を返すメソッドが必要です。

すべてのメソッド名を返すget_class_methods()を見つけましたが、_bla__で始まる名前のみが必要です。

26
gustavgans

preg_grep() を使用してそれらをフィルタリングできます。

$method_names = preg_grep('/^bla_/', get_class_methods($object));
45
soulmerge

試してください:

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

ここでは_===_が必要であることに注意してください。 _==_は機能しません。これは、一致するものが見つからなかった場合、strpos()falseを返すためです。 PHPの動的型付けにより、これは_0_に等しいため、厳密な(型安全な)等価性チェックが必要です。

6
Emil H

Get_class_methods()から配列をループし、各要素を「bla_」に対してテストし、一致する値ごとに新しいリストを返す独自の関数を作成してみませんか?

1
Samuel

私はこのようなもう少し柔軟なものを提案します(メソッド名が動的であるか不明でない限り):

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
0
Kevin