Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Kolejność wykonywania kodu przy przypisaniu wartości.
mrok
post
Post #1





Grupa: Zarejestrowani
Postów: 258
Pomógł: 17
Dołączył: 22.05.2007

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


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?
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: 24.08.2025 - 15:27