2013-04-30 13 views
10

dostałem trochę kodu php tutaj:php numer ciąg konkatenacji pomieszane

<?php 
echo 'hello ' . 1 + 2 . '34'; 
?> 

który wyprowadza 234,

ale kiedy dodać numer 11 przed "hello":

<?php 
echo '11hello ' . 1 + 2 . '34'; 
?> 

Wydaje 1334 zamiast 245 (czego się spodziewałem), dlaczego tak jest?

+0

Dlaczego żadna odpowiedź nie jest akceptowana? @JetLaggy wydaje się być nowa ... zaakceptuj odpowiedź, aby wątek został zamknięty, a osoba udzielająca odpowiedzi zyska reputację! ;) :) – coderunner

Odpowiedz

11

To dziwne ...

Ale

<?php 
echo '11hello ' . (1 + 2) . '34'; 
?> 

LUB

<?php 
echo '11hello ', 1 + 2, '34'; 
?> 

ustalające problem.


UPDv1:

Wreszcie udało się uzyskać właściwą odpowiedź:

'hello' = 0 (zawierający bez początkowych cyfr, więc PHP zakłada, że ​​jest zero).

Więc 'hello' . 1 + 2 upraszcza do 'hello1' + 2 jest 2, ponieważ bez początkowych cyfr 'hello1' wynosi zero zbyt.


'11hello ' = 11 (zawiera czołowe cyfr tak, to zakłada, PHP jedenaście).

Tak więc '11hello ' . 1 + 2 upraszcza do '11hello 1' + 2 jako 11 + 2 jest 13.


UPDv2:

http://www.php.net/manual/en/language.types.string.php

wartość jest dana przez początkowej części łańcucha. Jeśli ciąg znaków zaczyna się od prawidłowych danych liczbowych, będzie to używana wartość. W przeciwnym razie wartość będzie wynosić 0 (zero). Prawidłowe dane liczbowe są opcjonalnymi znakami , po których następuje jedna lub więcej cyfr (opcjonalnie zawierająca dziesiętną kropkę ), po której następuje opcjonalny wykładnik. Wykładnikiem jest "e" lub "E", po których następuje jedna lub więcej cyfr.

+0

Cześć, stary. Dziękuję za szybką odpowiedź. 245 jest tym, co oczekiwałem, że wyjdzie, ale pokazało 1334. Po prostu nie rozumiem, dlaczego zmieniło się pierwszeństwo, jeśli dodam liczbę przed łańcuchem powitania. – JustinHo

+0

PHP bardzo lubi konwertować wszystko na liczby. Przeczytaj [tutaj] (http://stackoverflow.com/a/15856770/2269749). – BlitZ

+0

@JetLaggy, zaktualizowano. Rozważać. – BlitZ

4

trzeba użyć () w operacji matematycznej

echo 'hello ' . (1 + 2) . '34'; // output hello334 
echo '11hello ' . (1 + 2) . '34'; // output 11hello334 
+0

Nadal nie wyjaśnia, dlaczego 'php' ignoruje operator' concat' i typecast 'string' na' int' podczas porównywania. Działając jako suma, ale nie jako konkat. – BlitZ

1

jeśli nienawidzisz oddanie operatorów pomiędzy przypisz je do wartości:

$var = 1 + 2; 

echo 'hello ' . $var . '34'; 
5

Operator kropki ma s ame precedence jako + i -, co może dać nieoczekiwane wyniki.

To technicznie odpowiedź na twoje pytanie ... jeśli chcesz, aby liczby były traktowane jako liczby podczas konkatinacji, po prostu umieść je w nawiasach.

<?php 
echo '11hello ' . (1 + 2) . '34'; 
?> 
+0

+1. Wyjaśnia prawie wszystko tutaj. – BlitZ

+0

Pozdrawiam, to pomaga. Naprawdę powinienem trzymać się podręcznika php. coz ten, który czytałem wcześniej mówi, że konkatenacja ma wyższy priorytet niż dodawanie ... co za wstyd ...... – JustinHo