Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pierwszeństwo operatorów, Dodawanie i konkatenacja
vonski
post
Post #1





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Witam.
Przerabiam sobie właśnie książeczkę z przykładowymi testami do ZCE i natrafiłem na pewną niejasność.
Jest takie pytnianie:

What will the following script output?

  1. echo 'Testing ' . 1 + 2 . '45';


Prawidłowa odpowiedź to: 245
Zgadza się, z tym że wyjaśnienie już jest dla mnie nie do końca jasne:

The concatenation operator has a higher precenedce than the addition operator. Therefore, PHP will interpret this expression as if it were written ('Testing' . 1) + (2 . '45').

I tutaj mam wątpliwości, bo wg manuala obydwa te operatory mają taki sam priorytet i decyduje kolejność ich występowania w wyrażeniu, czyli PHP chyba interpretuje to w ten sposób:
1) 'Testing ' . 1 => 'Testing 1'
2) 'Testing 1' + 2 => 2
3) 2 . '45' => '245'

Czy może mi ktoś wytłumaczyć o co chodziło autorowi? (IMG:style_emoticons/default/smile.gif) Czy może po prostu aż tak się pomylił?
Z góry dzięki.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  1. <?php
  2. echo 'Testing ' . 1 + 2 . '45';
  3. ?>


W tym przypadku do stringa czyli Testing dołączasz 1 ponieważ kropka powoduję łączenie i wychodzi 'Testing 1' potem do tego dodajesz 2 a ze do tekstu nie można dodać to wychodzi 2 i do dwójki dołączasz string 45 to wychodzi 245

tutaj to samo
'Testing ' . 1 => 'Testing 1'

Do Testing za pomocą kropki łączysz 1 i wychodzi Testing 1

tutaj
'Testing 1' + 2 => 2 wychodzi 2 ponieważ 'Testing 1' to nie liczba i dla tego 2

tutaj
2 . '45' => '245' wychodzi 245 ponieważ do 2 łączysz string '45'

Ten post edytował kefirek 13.02.2012, 13:52:48
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #3





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


Cytat(vonski @ 13.02.2012, 13:32:17 ) *
The concatenation operator has a higher precenedce than the addition operator. Therefore, PHP will interpret this expression as if it were written ('Testing' . 1) + (2 . '45').

I tutaj mam wątpliwości, bo wg manuala obydwa te operatory mają taki sam priorytet i decyduje kolejność


When operators have equal precedence, their associativity decides whether they are evaluated starting from the right, or starting from the left ...

Kiedy operatory mają równe pierwszeństwo o ich zespoleniu decyduje czy są ewaluowane od prawej czy od lewej ..

I wedle tabelki:

Zespolenie | Operatory
lewa | + - .

Ten post edytował rocktech.pl 13.02.2012, 14:01:57
Go to the top of the page
+Quote Post
vonski
post
Post #4





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


@kefirek Dzięki za odpowiedź. Dokładnie, właśnie taki jest mój tok rozumowania (IMG:style_emoticons/default/smile.gif) Nie rozumiem natomiast o co chodziło autorowi w wyjaśnieniu, bo jest całkiem inne, mimo że prowadzi do takiej samej odpowiedzi:

"The concatenation operator has a higher precenedce than the addition operator. Therefore, PHP will interpret this expression as if it were written ('Testing' . 1) + (2 . '45')."

Chodzi mi o to, że wg niego to wygląda mniej więcej tak:

'Testing' . 1 => 'Testing 1'
2. '45' => '245'

i dopiero teraz:
'Testing 1' + '245' => 245

Wydaje mi się, że autor się pomylił, ale po pierwsze jest to dla mnie dziwne, bo nie jest to literówka, tylko dość poważny błąd, który w innym przykładzie może być tragiczny w sktukach, a po drugie chce mieć wszystkie wątpliwości rozwiane na 100% (IMG:style_emoticons/default/smile.gif)

Cytat
When operators have equal precedence, their associativity decides whether they are evaluated starting from the right, or starting from the left ...

Kiedy operatory mają równe pierwszeństwo o ich zespoleniu decyduje czy są ewaluowane od prawej czy od lewej ..


No właśnie, czyli można przyjąć chyba, że jest to pomyłka (autora, nie mauala (IMG:style_emoticons/default/wink.gif) ).
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
bo jest całkiem inne, mimo że prowadzi do takiej samej odpowiedzi
No nie. Nie do takiej samej.

wg, kodu autora wynik to liczba 245.
wg. poprawnego interpretowania to tekst 245
(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
vonski
post
Post #6





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

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


Cytat(nospor @ 13.02.2012, 14:16:57 ) *
No nie. Nie do takiej samej.

wg, kodu autora wynik to liczba 245.
wg. poprawnego interpretowania to tekst 245
(IMG:style_emoticons/default/smile.gif)


Hehe, no fakt (IMG:style_emoticons/default/smile.gif) Tego nie zauważyłem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 23.08.2025 - 16:20