Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]inkrementacja i dekrementacja zmiennej typu string
qpanas
post 12.05.2008, 21:28:24
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 2
Dołączył: 12.05.2008

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


Rozpocząłem niedawno naukę programowania w PHP i napotkałem problem, którego rozwiązania nie zdołałem znaleźć w żadnym posiadanym podręczniku ani znanym mi kursie internetowym. Wyjaśniam w czym rzecz.
Ćwiczyłem stosowanie operatorów na zmiennych. Kiedy doszedłem do etapu inkrementacji i dekrementacji napisałem sobie taki mały kawałek kodu:
  1. <?php
  2. $_a = "z";
  3. echo('1) zmienna typu '.gettype($_a).': '.$_a."
  4. ");
  5.  
  6. $_a = ++$_a;
  7. echo('2) zmienna typu '.gettype($_a).': '.$_a."
  8. ");
  9.  
  10. $_b = $_a++;
  11. echo('3) zmienna typu '.gettype($_b).': '.$_b."
  12. ");
  13. echo('4) zmienna typu '.gettype($_a).': '.$_a."
  14. ");
  15. $_a = --$_a;
  16. echo('5) zmienna typu '.gettype($_a).': '.$_a."
  17. ");
  18.  
  19. $_b = $_a--;
  20. echo('6) zmienna typu '.gettype($_b).': '.$_b."
  21. ");
  22. echo('7) zmienna typu '.gettype($_a).': '.$_a."
  23. ");
  24.  
  25. ?>

Jako wartość zmiennej $_a wstawiałem początkowo liczby i wszystko ładnie działało, ale potem dla testu wstawiłem literę i okazało się, że nie działa dekrementacja tej wartości string. Oto co wyświetla się w przeglądarce:
Cytat
1) zmienna typu string: z
2) zmienna typu string: aa
3) zmienna typu string: aa
4) zmienna typu string: ab
5) zmienna typu string: ab
6) zmienna typu string: ab
7) zmienna typu string: ab

Zacząłem szukać odpowiedzi dlaczego i okazało się, że we wszystkich przykładach operacje są wykonywane wyłącznie na liczbach. Znajomy znajomego stwierdził coś takiego:
Cytat
 trzeba by się wczytać, jak interpretuje php wartość 1 dla ciągu string - może to być kod znaku, albo jego index w tablicy znaków. ++ dodaje kolejny znak, -- nie odejmuje, bo wypada wartość mniejsza od 0 (a ma wartość 0 w tablicy znaków, -1 to nie ma znaku - więc się nie zmienia)
++ i -- nie wykonuje działań w zakresie liczb dodatnich, tylko całkowitych - więc 0 - 1 daje -1, a żaden znak nie ma takiego indeksu
oczywiście, przy założeniu, że a ma indeks 0 ale wątpię, żeby ktoś się zastanawiał, aby na stringach odpowiednio jakieś operacje arytmetyczne przebiegały - skoro nie ma żadnej dokumentacji ...

Sam nie wiem co o tym sądzić. Poza tym jeśli inkrementacja i dekrementacja służą do wykonywania operacji na liczbach, dlaczego inkrementacja działa na literach (zmiennych string). A jeśli można inkrementować literę to czemu niemożliwa jest jej dekrementacja? Błąd w samym php? Nie wierzę w to!

Ten post edytował qpanas 13.05.2008, 21:47:49
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 04:57