Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Singleton]Lista argumentów do przekazania
Forum PHP.pl > Forum > PHP
daniel1302
Witam, mam problem, jeśli w nagłówku 1 funkcji podaję 5 argumentów(Singleton::instance('KlasaTest', $arg1, $arg2, $arg3, $arg4, $arg5)winksmiley.jpg to jak mam przekazać te 5 argumentów($arg[1-5]) do instancji klasy new $class ($args).

Próbowałem zrobić tak
  1. <?php
  2. function foo2($arg1, $arg2, $arg3)
  3. {
  4.    echo $arg1.':'.$arg2.':'.$arg3;
  5. }
  6.  
  7. function foo()
  8. {
  9.    $arg_list = func_get_args();
  10.    
  11.    if (isset($arg_list[0]))
  12.        $arg_list2 = array_shift($arg_list);
  13.        
  14.    if (isset($arg_list[1]))
  15.        foreach ($arg_list as $k) {
  16.            $arg_list2 .= ', '.$k;
  17.        }
  18.        
  19.    foo2 ($arg_list2);
  20. }
  21.  
  22. foo(1, 2, 3);
  23. ?>
daniel1302
Właśnie znalazłem
podaje rozwiązanie
  1. <?php
  2. function foo2($arg1, $arg2, $arg3)
  3. {
  4.    echo $arg1.':'.$arg2.':'.$arg3;
  5. }
  6.  
  7. function foo()
  8. {
  9.    $arg_list = func_get_args();
  10.    
  11.    call_user_func_array('foo2', $arg_list);
  12. }
  13.  
  14. foo(1, 2, 3);
  15. ?>

Kurde po 5 godzinach wpadło


Sorry wookieb masz + właśnie przeglądałem manuala na temat callback i wpadło

Mogę wiedzieć jeszcze jak zastosować to na klasach.
Nigdzie niema opisane a nie mogę sam znaleźć rozwiązania
wookieb
Jest kolego tylko nieuwaznie czytasz
  1. <?php
  2. call_user_func(array('nazwa_klasy', 'metoda_statyczna'), $argumenty); // == nazwa_klasy::metoda_statyczna($argumenty)
  3.  
  4. call_user_funct(array($egzemplarz, 'metoda'), $argumenty); // == $egzemplarz->metoda($argumenty);
  5. ?>
daniel1302
Niema przynajmniej ja nie widzę. Dzięki jeszcze raz
wookieb
http://pl2.php.net/callback Rzuca sie w oczy jak... facet do kobiety smile.gif
lesiuk
Właśnie miałem o to pytać, a jak to wykonać na nie statycznym konstruktorze?

Próbowałem tak
call_user_func_array(new Test, $args);
call_user_func_array(array($testInstance', ''), $args);
call_user_func_array(array('Test', '__construct'), $args);

W tym ostatnim przypadku wyskakuje, że konstruktor nie może być ujemny
wookieb
http://pl.php.net/manual/pl/language.oop5.basic.php
Przykład 5
lesiuk
Ale proszę o pomoc jak to wykorzystać, bo jak w dam poza call_user_func_array() new XXX
to zwraca errory bo konstruktor wykonuje się bez wartości
wookieb
Pokaz kod bo troche dziwnie piszesz.
lesiuk
  1. <?php
  2. Class Test
  3. {
  4.    function __construct($arg1, $arg2, $arg3)
  5.    {
  6.        echo $arg1.':'.$arg2.':'.$arg3;
  7.    }
  8. }
  9.  
  10. function foo(array $arg = null)
  11. {    
  12.    $class = new Test();
  13.    call_user_func_array($class, $arg);
  14. }
  15.  
  16. foo(array(1,2,3));
  17. ?>



A to błędy

Kod
[b]Warning[/b]:  Missing argument 1 for Test::__construct(), called in D:\Program Files\WebServ\httpd\test.php on line 19 and defined in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]10[/b]

[b]Warning[/b]:  Missing argument 2 for Test::__construct(), called in D:\Program Files\WebServ\httpd\test.php on line 19 and defined in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]10[/b]

[b]Warning[/b]:  Missing argument 3 for Test::__construct(), called in D:\Program Files\WebServ\httpd\test.php on line 19 and defined in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]10[/b]

[b]Notice[/b]:  Undefined variable: arg1 in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]12[/b]

[b]Notice[/b]:  Undefined variable: arg2 in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]12[/b]

[b]Notice[/b]:  Undefined variable: arg3 in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]12[/b]
::
[b]Catchable fatal error[/b]:  Object of class Test could not be converted to string in [b]D:\Program Files\WebServ\httpd\test.php[/b] on line [b]19[/b]
wookieb
  1. <?php
  2. Class Test
  3. {
  4.   function __construct($arg1, $arg2, $arg3)
  5.   {
  6.       echo $arg1.':'.$arg2.':'.$arg3;
  7.   }
  8. }
  9.  
  10.  
  11.  
  12. $cl= new ReflectionClass('Test');
  13. print_r($cl);
  14.  
  15. $cl2=$cl->newInstanceArgs(array('hehe', 'lol', 'ble'));
  16. print_r($cl2);
  17. ?>
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.