Articole similare
Clasele pot conține metode dinamice, prezența cărora nu este evidentă pentru dezvoltatorul extern. În plus, în procesul de exploatare, pot fi create matrice eterogene de obiecte, care pot conține diferite metode. Pentru astfel de situații, sunt necesare instrumente pentru testarea existenței metodei în clasă. Deoarece un astfel de instrument în PHP este funcția "method_exists ()".
Funcția ia numele clasei sau obiectului ca primul parametru, iar al doilea nume al metodei returnează "true" dacă obiectul sau clasa are această metodă și "false" altfel.
Demonstrăm activitatea funcției "method_exists ()" și creăm clasa "myExists", care va conține două metode deschise și închise.
În exemplul folosind funcția „method_exists ()“ în „myExists“ clasă obiect controale pentru metodele existente „method_public ()“, „method_private ()“ și nu este o metodă existentă „method_protected ()“. rezultat:
După cum se vede din rezultatul verificării, funcția returnează „true“ pentru fiecare metodă, indiferent de specifier sale de acces, „false“ este returnat numai în cazul în care obiectul nu are nici închisă și nici metoda deschisă cu același nume.
Primul argument al funcției „method_exists ()“ folosește obiectul de clasă „$ _Class_myExists“, dar pentru a testa metoda nu creează în mod necesar un obiect, treci numele clasei este suficient. exemplu:
Atunci când se lucrează cu funcția „method_exists ()“ ar trebui să se țină seama de faptul că nu se poate detecta prezența unor metode dinamice create prin utilizarea unei metode speciale „__call ()“, „__callStatic ()“.
În plus față de funcțiile funcției „method_exists ()“, puteți utiliza o alternativă „is_callable ()“, care, spre deosebire de „method_exists ()“, cu excepția validarea metodei de clasă vă permite să verificați existența unor funcții care nu fac parte din clasa.
Lucrul cu o clasă terță parte, dezvoltatorul de multe ori nu cunoaște bine toate metodele din această clasă. Pentru a obține o listă completă, puteți utiliza funcția "get_class_methods ()". Ca primul parametru, funcția ia numele clasei și returnează o serie de metode deschise. Trebuie subliniat faptul că metodele închise nu returnează această funcție. exemplu:
După cum puteți vedea, metoda închisă "method_private ()" nu este inclusă în matricea rezultată. Metodele dinamice care sunt emulat prin intermediul unei metode speciale „__call ()“, „__callStatic ()“, și nu în lista obținută folosind „get_class_methods ()“ funcții.