Tak więc, method_exists()
wymaga obiektu, aby sprawdzić, czy istnieje metoda. Ale chcę wiedzieć, czy istnieje metoda z tej samej klasy.Sprawdź, czy metoda istnieje w tej samej klasie.
Mam metodę, która przetwarza pewne informacje i może otrzymać akcję, która uruchamia metodę dalszego przetwarzania tych informacji. Chcę sprawdzić, czy metoda istnieje przed wywołaniem go. Jak mogę to osiągnąć?
przykład:
class Foo{
public function bar($info, $action = null){
//Process Info
$this->$action();
}
}
Poniższe odpowiedzi są w porządku, tylko dodatkowa uwaga: czy zadałeś sobie pytanie, dlaczego musisz się dowiedzieć, czy metoda istnieje? Ta sytuacja _may_ powstaje, jeśli masz metodę odziedziczoną po klasie nadrzędnej lub nie masz pewności, z czego dziedziczy aktualna klasa. Oba przypadki można załatwić za pomocą interfejsu lub definicji metody abstrakcyjnej. Co jest bardziej przejrzyste i przenosi błąd od środowiska wykonawczego do czasu kompilacji, dlatego jest lepsze. – arkascha
Ponieważ mam inne metody, które są publiczne i dalej przetwarzają te informacje i zwracają przetworzone dane, pierwsza metoda nie zwraca, ponieważ może odbierać dane, które muszą zostać przetworzone i nie musi zwracać niczego. Ale myślałem, że to oszczędność czasu, aby wywołać inną metodę z metody fisrt w razie potrzeby, ale nadal być w stanie wywoływać je osobno. – Rafael
Ale w samej klasie, dlaczego nie jest jasne, czy istnieje metoda? Mam na myśli albo to, że jest zadeklarowane/zaimplementowane w klasie, albo nie jest. Jak i dlaczego powinna to zmieniać w czasie wykonywania? Powiedziałbym, że wiesz dokładnie, czy metoda istnieje. – arkascha