Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]function __call - może ktoś wyjaśni
MESSIAH :)
post
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Szukam wyjaśnienia funkcji __call. Wiem że ona woła obiekty następne po niej i w sposób niejawny je może przeładować czyli edytować w locie. Znalazłem taki kod lecz nie za bardzo go rozumiem - nie wiem czy jest on poprawny:
  1.  
  2. class MethodTest {
  3.  
  4. public $xy = NULL;
  5.  
  6. public function __call($name, $arguments)
  7. {
  8. $arguments = (array) $arguments;
  9. $arguments['dsd'] = 'mt';
  10. $fname = 'pots'.ucfirst($name); /*dodaje przedrostek "pots" i podnosi pierwszą literę*/
  11. echo $arguments;
  12.  
  13. return $this->xy->$fname($arguments);
  14. }
  15. }
  16.  
  17. $obj = new MethodTest;
  18. $obj->runTest();

Mam pytanie dlaczego (array) jest w nawiasach zwracając tym samym NULL?

Wypluwa taki błąd:
Cytat
Notice: Array to string conversion in C:\xampp\htdocs\Untitled-2.php on line 11
Array
Fatal error: Call to a member function doRunTest() on null in C:\xampp\htdocs\Untitled-2.php on line 13


Ten post edytował MESSIAH :) 5.01.2015, 21:34:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mls
post
Post #2





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


__call i (array) to dwa całkowicie odrębne i niepowiązane tematy.
Opis __call masz w dokumentacji.
Opis (array) również, i to są podstawy:
Cytat
In other words, (array)$scalarValue is exactly the same as array($scalarValue).


Ten post edytował mls 6.01.2015, 19:01:44
Go to the top of the page
+Quote Post
MESSIAH :)
post
Post #3





Grupa: Zarejestrowani
Postów: 249
Pomógł: 0
Dołączył: 22.12.2011

Ostrzeżenie: (10%)
X----


Cytat
In other words, (array)$scalarValue is exactly the same as array($scalarValue).


Niestety (array)$var to nie to samo co array ($var)

Jak widać w moim przykładzie mam funkcję __call, która nadpisuje metody zdefiniowane później i dodaje wartości z $arguments:
  1. $arguments = (array) $arguments[0];

I gdy zmienię ten kod na przykład podany z cytatu:
  1. array($arguments[0])

Nie zostaną prawidłowo dodane argumenty.

Sądzę że istnieje jakaś różnicy między (array) a array().
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Cytat(MESSIAH :) @ 9.01.2015, 23:08:46 ) *
Niestety (array)$var to nie to samo co array ($var)


A wg. mnie tak. Dowód:
Kod:
  1. <?php
  2.  
  3.  
  4. echo '<pre>';
  5. $scalar = 'sting';
  6. var_dump((array)$scalar);
  7. var_dump(array($scalar));
  8.  
  9. echo '========='.PHP_EOL;
  10.  
  11. $scalar = array('sting');
  12. var_dump((array)$scalar[0]);
  13. var_dump(array($scalar[0]));


Wynik:
Kod
array(1) {
  [0]=>
  string(5) "sting"
}
array(1) {
  [0]=>
  string(5) "sting"
}
=========
array(1) {
  [0]=>
  string(5) "sting"
}
array(1) {
  [0]=>
  string(5) "sting"
}
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 07:25