2015-09-14 6 views
17

Ich habe diesen Code:Warum verhalten sich Strings in PHP 5.3 wie ein Array?

$tierHosts['host'] = isset($host['name']) ? $host['name'] : $host; 

Es funktioniert gut in PHP 5.5, aber in PHP 5.3 die Bedingung gibt true zurück, während $host eine Zeichenfolge wie pjba01 enthält. Es gibt den ersten Buchstaben $tierHosts['host'], also p zurück.

Was ist falsch an meinem Code?

+2

Sie können dieses Verhalten umgehen mit '(is_array ($ host) && isset ($ host [" name "]))'. Überprüfen Sie immer den Typ, den Sie benötigen, wenn nicht klar ist, welchen Typ Sie erhalten. Weitere Informationen zu dem von Ihnen beschriebenen Verhalten finden Sie in der Antwort von Rizier123. – TobiasJ

+0

Wenn Sie an anderen Dingen interessiert sind, die Sie in PHP unvorbereitet treffen können, lesen Sie dies. http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ – Almo

+1

Warum verhalten sich Strings wie ein Array ...? Weil sie ein Array sind ... – SnakeDoc

Antwort

23

You can access strings like an array und vor PHP 5.4 Offsets wie Ihr name lautlos auf 0 abgegeben wurden, bedeutet, dass Sie das erste Zeichen dieser Zeichenkette zugegriffen:

character | p | j | b | a | 0 | 1 | 
----------------------------------- 
index  | 0 | 1 | 2 | 3 | 4 | 5 | 

Nach 5,3 solche Offsets wird eine Mitteilung werfen, wie Sie auch lesen können im Handbuch:

Ab PHP 5.4 müssen String Offsets entweder ganze Zahlen oder ganze Zahlen sein, sonst wird eine Warnung ausgegeben. Zuvor wurde ein Offset wie "foo" automatisch in 0 umgewandelt.