Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]ReflectionFunctionAbstract::getNumberOfParameters
Forum PHP.pl > Forum > Przedszkole
olechafm
Jak poprawnie używać ReflectionFunctionAbstract::getNumberOfParameters ?
blooregard
Cytat(olechafm @ 24.11.2011, 18:17:59 ) *
Jak poprawnie używać ReflectionFunctionAbstract::getNumberOfParameters ?


Nie da się jej użyć, bo to jest klasa abstrakcyjna, możesz użyć albo dziedziczącej po niej klasy ReflectionFunction, albo własnej klasy dziedziczącej po ReflectionFunction, coś w ten deseń:

  1. function test($a, $b) {
  2. return $a+$b;
  3. }//test
  4.  
  5. class myReflectionFunction extends ReflectionFunction {
  6.  
  7. public function __contruct($function_name) {
  8. $this->name = $function_name;
  9. }
  10.  
  11.  
  12. public function __toString() {
  13. return;
  14. }
  15.  
  16. public static function export() {
  17. return;
  18. }
  19.  
  20. }//class
  21.  
  22. $myReflectionFunction = new myReflectionFunction('test');
  23. echo $myReflectionFunction->getNumberOfParameters(); // wynik: 2



BTW, nie udało mi się napisać klasy 'myReflectionFunction' dziedziczącej bezpośrednio po ReflectionFunctionAbstract, co mnie lekko zastanowiło, mimo, że zaimplementowałem wszystkie metody abstrakcyjne :/

olechafm
rozumiem, że ::getNumberOfRequiredParameters używamy tak samo?


czy działa ona w przypadku tylko funkcji czy również metod klas? jeśli tak to w jakiej formie przekazać do konstruktora nazwę tej metody, którą chcemy sprawdzić? zakładając że znajduje się ona w innej przestrzeni nazw w dodatku?
blooregard
Tak, każdej metody z tej klasy używasz w podobny sposób.

Do badania klas i udostępnianych przez nie metod oraz właściwości służy klasa ReflectionClass:

http://pl.php.net/manual/pl/class.reflectionclass.php

olechafm
a która z metod tej klasy będzie odpowiednikiem getNumberOfRequiredParameters?

chcę wyciągnąć informację o metody danej klasy, o tym ilu argumentów ona wymaga
Crozin
Od metod masz ReflectionMethod
blooregard
Klasa ReflectionMethod nie posiada takiej metody,ale dziedziczy po ReflectionFunctionAbstract, co oznacza, że można jej użyć tak samo w przypadku metody klasy, jak zwykłej f-cji:

  1. <?php
  2.  
  3. class test {
  4.  
  5. public function foo($a, $b) {
  6. return 1;
  7. }
  8. }
  9.  
  10. $myRefClass = new ReflectionClass('test');
  11. $methods = $myRefClass->getMethods();
  12.  
  13. foreach ($methods as $key => $method) {
  14. echo $method->getNumberOfRequiredParameters(); //wynik: 2
  15. }
  16.  
  17.  
  18. ?>
olechafm
no tak wyciągasz z danej klasy wszystkie jej metody i sprawdzasz , sądziłem, że można będzie to zrobić nie pobierając wszystkich metod danej klasy tylko od razu przekazać jej nazwę klasy i metody by ominąć ten etap, bo w momencie gdy chcę sprawdzić ile argumentów wymaga dana metoda, to dokładnie wiem którą metodę chce sprawdzić
blooregard
Cytat(olechafm @ 25.11.2011, 14:45:10 ) *
no tak wyciągasz z danej klasy wszystkie jej metody i sprawdzasz , sądziłem, że można będzie to zrobić nie pobierając wszystkich metod danej klasy tylko od razu przekazać jej nazwę klasy i metody by ominąć ten etap, bo w momencie gdy chcę sprawdzić ile argumentów wymaga dana metoda, to dokładnie wiem którą metodę chce sprawdzić


Musisz jakoś pokombinować z metodami klasy ReflectionFunctionAbstract, myślę, że jkaoś jest to do zrobienia.
Crozin
Na prawdę nie rozumiem w czym problem:
  1. <?php
  2.  
  3. class Foo {
  4. public function bar($baz, $foobar) {
  5.  
  6. }
  7. }
  8.  
  9. $class = new ReflectionClass('Foo');
  10. var_dump($class->getMethod('bar')->getNumberOfRequiredParameters()); // int(2)
  11.  
  12. // ---------
  13.  
  14. $method = new ReflectionMethod('Foo', 'bar');
  15. var_dump($method->getNumberOfRequiredParameters()); // int(2)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.