2010-09-08 2 views
1

Я не занимаюсь программированием в php, а сам php. Возможно ли, что создатели php сделают эхо-дамп, например массивы вроде var_dump?Возможно ли, что эхо в php будет работать как var_dump?

+4

Почему они должны быть, если есть соответствующая функция, а именно 'var_dump'? – joschi

+4

Почему существуют переменные var_dump и print_r? – Chris

+3

Изменение эха, чтобы сделать то же самое, что и var_dump(), сломало бы много существующего PHP-кода, оставив только print (printf и т. Д.) Для отображения значений переменных, а не переменной информации. –

ответ

4

Возможно ли, что создатели РНР сделать эхо дамп, например, массивы как и var_dump делает ?

Я думаю, что вы имеете в виду, если echo получает передается переменная, которая не может быть отображена в виде строки, показать дамп, вместо текущего поведения, показывающий его тип данных (например, Array)?

Это действительно имеет смысл, но также и быть опасным: что, если объект содержит данные, которые конечный пользователь не должен видеть?

Я сомневаюсь, что функция echo (или, точнее, функции синтаксического анализа строк) будет претерпевать такие радикальные изменения именно по этой причине.

+1

@stereofrog Я говорю о обратной совместимости. Изменение вывода из 'array' в полный дамп переменной * будет * радикальным изменением. –

+0

Да. Запрет на отображение, если не отображается. Обратная совместимость была бы проблемой, о которой я не думал. – Jask

2

Такое радикальное изменение существующей функциональности было бы рецептом для большого количества сломанного кода. Поэтому я бы сказал нет.

Тем не менее, это PHP мы говорим, так что Wouldnt удивить меня ....

+2

Что? PHP имеет тенденцию откладывать много обратной совместимости. Несмотря на то, что это катастрофа, 'register_globals' все еще доступен. Если вам нужен массивный обратный разрыв совместимости, см. Python. – Artefacto

2

В php вы можете создать объект, который ходит как массив и quacks как массив, но все же является объектом с настраиваемым методом __toString.

class ary implements ArrayAccess 
{ 
function __construct() { 
    $this->a = func_get_args(); 
} 
function offsetExists($k) { 
    return isset($this->a[$k]); 
} 
function offsetGet($k) { 
    return $this->a[$k]; 
} 
function offsetSet($k, $v) { 
    $this->a[$k] = $v; 
} 
function offsetUnset($k) { 
    unset($this->a[$k]); 
} 
function __toString() { 
    return implode(', ', $this->a); 
} 
} 

$a = new ary(11, 22, 33); 
$a[1] = 66; 
echo $a; 

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

Смежные вопросы