![]() |
![]() |
![]()
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:
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Cytat PHP follows Perl's convention when dealing with arithmetic operations on character variables and not C's. For example, in Perl 'Z'+1 turns into 'AA', while in C 'Z'+1 turns into '[' ( ord('Z') == 90, ord('[') == 91 ). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported. http://www.php.net/manual/en/language.oper...s.increment.php Ten post edytował Kicok 12.05.2008, 22:03:11 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 22:41 |