![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
przede wszystkim, to mój pierwszy post tutaj, więc mam nadzieję, że przyjmiecie mnie ciepło ![]() Mam następujący problem : jako, że wcześniej pisałem trochę w C/C++, a kiedyś także w PHP, to stwierdziłem, że przypomnę sobie ten język, bo może mi się przydać. Napisałem sobie zatem poniższy kawałek kodu :
Problem w tym, że pętla ta zamiast wyświetlać dziesięć napisów "Iteration no. 1", "Iteration no. 2" itd., wyświetla mi po prostu 10 jedynek, każdą w innej linii. Domyślam się, że chodzi tutaj o precedencję operatorów, ale nie wiem, w czym problem. Szczególnie, że jeśli ujmę w nawiasy wyrażenie $i+1 to wszystko działa jak powinno. Czy mógłby mi ktoś wyjaśnić, w czym problem ? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 10.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
raczej to nie zadziała bo będzie podwójnie zwiększane $i, zrób poprostu:
Kod for ($i=1; $i<=10; $i++)
{ echo "Interation nr $i <br />"; } |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi, chciałbym jednak dowiedzieć się, dlaczego tak się dzieje.
W celu znalezienia odpowiedzi szukałem w "Programming PHP" i znalazłem tam przykłady na wykorzystanie operatora ".". m.in. taki :
Powyższe zwraca liczbę, podobno typu float, o wartości 1001. Piszą tam, że ma to związek z tym, że w stringu po lewej stronie znajduje się "E". Kompletnie nie mam pojęcia, dlaczego tak to działa. A wracając do mojego przykładu, powiedzmy, że rozumiem, że operator "." przekształci te stringi na 0 (bo . ma większy priorytet niż + ) ale dlaczego PHP nie zwiększa wartości zmiennej $i ? Wiem, że to może bezsensowne z jednej strony tak rozważać, ale już widzę swoje problemy, gdy będę np. pobierał coś z bazy danych, a tu nagle nic mi się nie będzie wyświetlało i kompletnie nie będę wiedział dlaczego ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Bez użycia nawiasów w print'cie, PHP rozumiał to jako jedno wyrażenie, a ponieważ nie miał podanego typu wyrażenia (string, int itp.) to sam automatycznie próbował coś dopasować. Dopasował widocznie do typu INT i potraktował to:
Kod 'Iteration no. ' . $i+1 . '<br />'; Jako liczbę. Gdy zrobisz to w nawiasie, to ($i+1) zostanie potraktowane jako INT, a całość jako STRING i wyświetlać się będzie poprawnie. -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
OK, dzięki, choć ja sam napisałem powyżej, że wersja z nawiasami działa
![]() Szkoda tylko, że w sumie nie mam pojęcia dlaczego tak jest, wkońcu do tego chyba służy operator "." żeby łączyć ze sobą wartości zmiennych i stringi (gdy np. nie chce się używać apostrofów podwójnych) ? W każdym razie, dzięki za odp. (choć problem nie do końca rozwiązany ![]() EDIT : Spróbowałem przed chwilą wpisać po prostu to otrzymuję (bo to jest w pętli) wyniki typu "Iteration no. 0+1", "Iteration no. 1+1", itd. Tutaj nie działa nawet, jak wpiszę $i+1 w nawiasach, będzie się to samo wyświetlać, tyle, że z nawiasami. Dlaczego wobec tego teraz PHP nie zwiększa mi wartości $i ? Nie używam już przecież operatora ".", a jedynie samo dodawanie. EDIT 2 : Oczywiście, $i się zwiększa, ale dodawanie jakby nie działa, to miałem na myśli. Ten post edytował radi_boss 10.12.2008, 16:46:06 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 076 Pomógł: 62 Dołączył: 6.03.2005 Skąd: Wroc Ostrzeżenie: (0%) ![]() ![]() |
To jest naturalne działanie dla PHP że nie wykonuje działań w takich przypadkach, bo zastanówmy się co by się działo, gdyby jednak takie rzeczy robił - jak wtedy celowo napisać takie wyrażenie ? np listując miejsca w 1500-set autobusach $+1 (dla kierowcy) dało by w wyniku liczbę zamiast wyrażenia x+1 ?
-------------------- The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1 MySQL Client API version : 5.0.27 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przyznam, że trochę nie kumam tego, delikatnie mówiąc
![]() Chodzi mi po prostu o to, że logicznym dla mnie byłoby, gdyby PHP najpierw patrzyło na wyrażenie w " ", w którym jeśli znalazła by się zmienna $i+1 to najpierw by zwiększyło wartość zmiennej, a dopiero później wyświetliło. Bynajmniej, podobnie dzieje się w C++, choć oczywiście tam wyświetla się (mówię o konsoli) zupełnie inaczej. Fakt faktem, że gdy użyję funkcji printf() to wszystko działa tak, jak bym się tego spodziewał (tj. tak jak printf() w C). Szkoda tylko, że jednak nie czaję, dlaczego PHP w tym drugim przypadku wyświetla wartość poprawnie, a przy użyciu samego printa nie ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
A nie możesz po prostu?
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 10.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mogę, oczywiście, chodziło mi tylko o niuans, bo pomyślałem sobie, że pewnie kiedyś będę robił coś podobnego i też spotkam się z takim problemem i nie będę wiedział ocb
![]() OK, dzięki za wszystkie odpowiedzi. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 07:19 |