Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kolejność wykonywania kodu przy przypisaniu wartości.
Forum PHP.pl > Forum > Przedszkole
mrok
Ech już myślałem, że dużo wiem o PHP i znów wyłożyłem się na podstawach.
Jaka jest kolejność wykonywania kodu przez php przy operacji przypisania wartości do zmiennej? czy najpierw jest obliczana prawa strona a później lewa? Dotychczas myślałem ze jest na odwrót (np przy ifach z andem jeśli pierwszy człon nie spełniał warunku to 2 nie był sprawdzany)

Może trochę kodu dla przykładu:

  1.  
  2. $array = array('a', 'b');
  3.  
  4. $response = new stdClass();
  5. $i = 0;
  6. foreach ($array as $element ) {
  7. $response->rows[$i]['id'] = $i;
  8. $response->rows[$i]['cell'] = array($i + 1, $element);
  9. $i++;
  10. }
  11. var_dump($response);
  12.  
  13.  
  14. $response = new stdClass();
  15. $i = 0;
  16. foreach ($array as $element ) {
  17. $response->rows[$i]['id'] = $i;
  18. $response->rows[$i]['cell'] = array(++$i, $element);
  19. }
  20. var_dump($response);

Przyznam się, gdyby ktoś mnie zapytał czy powyższy kod wygeneruje 2 razy to samo - potwierdziłbym
wynik jest inny:

  1. object(stdClass)#1 (1) {
  2. ["rows"]=>
  3. array(2) {
  4. [0]=>
  5. array(2) {
  6. ["id"]=>
  7. int(0)
  8. ["cell"]=>
  9. array(2) {
  10. [0]=>
  11. int(1)
  12. [1]=>
  13. string(1) "a"
  14. }
  15. }
  16. [1]=>
  17. array(2) {
  18. ["id"]=>
  19. int(1)
  20. ["cell"]=>
  21. array(2) {
  22. [0]=>
  23. int(2)
  24. [1]=>
  25. string(1) "b"
  26. }
  27. }
  28. }
  29. }
  30. object(stdClass)#2 (1) {
  31. ["rows"]=>
  32. array(3) {
  33. [0]=>
  34. array(1) {
  35. ["id"]=>
  36. int(0)
  37. }
  38. [1]=>
  39. array(2) {
  40. ["cell"]=>
  41. array(2) {
  42. [0]=>
  43. int(1)
  44. [1]=>
  45. string(1) "a"
  46. }
  47. ["id"]=>
  48. int(1)
  49. }
  50. [2]=>
  51. array(1) {
  52. ["cell"]=>
  53. array(2) {
  54. [0]=>
  55. int(2)
  56. [1]=>
  57. string(1) "b"
  58. }
  59. }
  60. }
  61. }


Wychodzi na to ze linia
  1. $response->rows[$i]['cell'] = array(++$i, $element);

jest wykonywana od tyłu (najpierw część na prawo od = a potem lewa). Ok czy to jest jakiś magiczny feature, czy ja po prostu nie umiem znaleźć w dokumentacji zadnych szczegółów na ten temat?
darko
Operator przypisania ma znacznie niższy priorytet niż preinkrementacji priorytety operatorów . Stąd można wywnioskować, że najpierw interpreter musi obliczyć wartość wyrażenia ++$i, dalej następuje przypisanie ( po wykonaniu [ ) itd.
JoShiMa
a pisze się ++$i czy $i++? A poza tym dla mnie to oczywiste, że najpierw się obliczy ++$i a potem przypisanie.
darko
~JoShiMa wiesz jaka jest różnica pomiędzy pre- i post-inkrementacją? Wiesz, że w ogóle jest?
JoShiMa
Miałam własciwie na myśli czy autor z premedytacją próbował wykorzystać ++$i ?

Tak na marginesie. Pisałam w C/C++ jeszcze pod DOSem smile.gif to chyba wyczerpująca odpowiedź na Twoje pytanie. oneeyedsmiley02.png
mrok
JoShiMa
Tak z premedytacją potrzebowałem tam użyć ++$i

darko
Dziękuję - teraz widzę, że aż wstyd takie pytanie było zadawać wink.gif

BTW w międzyczasie wertowałem dokumentację i znalazłem jeszcze kilka innych fajnych przykładów
http://www.php.net/manual/en/language.oper...s.increment.php - w komentarzach
JoShiMa
Cytat(mrok @ 20.02.2011, 01:44:50 ) *
JoShiMa
Tak z premedytacją potrzebowałem tam użyć ++$i

To nie wiem czemu się dziwisz, że dostałeś taki wynik jaki dostałeś smile.gif
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.