странный вывод в php - PullRequest
       6

странный вывод в php

3 голосов
/ 06 января 2012
$a = '86';
var_dump($a); //ouput string(2) "86"
var_dump($a['wtf']); //output string(1) "8" 

Второй вывод странный, хотя это эквивалентно

var_dump($a[0]); ////output string(1) "8" 

Может кто-нибудь объяснить мне, почему var_dump ($ a ['wtf']); выходная строка (1) «8»?

Ответы [ 3 ]

7 голосов
/ 06 января 2012

$ a - это строка.
Строка в php может рассматриваться как массив символов (поэтому $ a [0] == '8' и $ a [1] == '6')
Теперь вы попытались получить доступ к строке в месте ['wtf'], так как PHP ожидает число там, он попытается преобразовать 'wtf' в число.Поскольку в этой строке нет цифры, она рассматривается как 0.

'wtf1' преобразуется в 0 при проверке первых символов (благодаря грустному кубу)
'1wtf' преобразуется в 1
'100' преобразуется в 100
'dfsdgrgergregr' преобразуется в 0

1 голос
/ 06 января 2012

PHP имеет слабую типизацию, т. Е. Если вы передадите строку, где он ожидает целое число, он будет прозрачно преобразовывать его в целое число, что, в большинстве случаев, хорошо, так как позволяет более чистый код.Но, конечно, это также допускает больше ошибок.

Это (вероятно) причина, по которой сложение и конкатенация выполняются разными операторами (+ преобразует оба операнда в числа, . преобразуеткак для строк).

Как уже указывалось ранее, вы пытаетесь получить доступ к строковому индексу, который может быть только целым числом, поэтому 'wtf' правильно преобразуется в 0 и возвращается первая буква.Если вы передадите, скажем, '1o1wut', оно будет преобразовано в 1.

0 голосов
/ 06 января 2012

Возможно, он преобразует строку 'wtf' в целое число 0 ... или что-то связанное. Но почему вы должны использовать $ a ['wtf']?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...