PHP: isimde bir nesneden tüm yöntem isimleri olsun "bla_"

4 Cevap php

Ben bir nesne var ve bu nesne "bla_" ile bu bir başlangıç ​​var ne kadar yöntem döndüren bir yöntem istiyorum.

Tüm yöntem adları get_class_methods () hangi döner bulundu, ama sadece "bla_" ile başlar hangi isimleri istiyorum

4 Cevap

Deneyin:

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

=== burada gerekli olduğunu unutmayın. strpos() döner false eşleşme bulunamadı olsaydı bu yana ==, çalışmaz. Nedeniyle PHPs dinamik yazarak bu 0 eşittir ve bu nedenle sıkı bir (tip güvenli) eşitlik kontrolü gereklidir.

Neden sadece get_class_methods gelen dizi () döngüsü ve "bla_" karşı her öğe test ve her eşleşen değeri ile yeni bir liste döndürür kendi işlevini yapmazlar?

Ben bu gibi biraz daha esnek şey (yöntem adları dinamik veya bilinmeyen olmadıkça) öneririm:

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";
}

Çıkışlar:

blah_test
blah_test2