2010-09-08 27 views
1

我不在PHP编程,但PHP本身。 有没有可能PHP的创建者将回声转储为例如 var_dump这样的数组?是否有可能在php中使用echo会像var_dump一样工作?

+4

为什么他们应该有一个合适的函数,即'var_dump'? – joschi 2010-09-08 12:14:32

+4

为什么当var_dump和print_r都存在这样做? – Chris 2010-09-08 12:14:32

+3

更改回显与var_dump()相同会破坏很多现有的PHP代码,只留下print(printf等)来显示变量值而不是变量信息 – 2010-09-08 12:24:10

回答

4

有没有可能是PHP的创造者将回声倾倒例如数组喜欢做的var_dump ?

我想你的意思是,如果echo被传递,而不是显示它的数据类型(例如Array)的当前行为,不能作为一个字符串显示,显示转储的变量,?

这确实有意义,但也是危险的:如果一个对象包含最终用户不应该看到的数据,该怎么办?

我怀疑echo函数(或者更准确地说,PHP的字符串解析函数)会经历如此根本性的变化,正是出于这个原因。

+1

@stereofrog我正在谈论向后兼容性。将'array'的输出更改为完全变量转储*将是彻底的改变。 – 2010-09-08 13:55:58

+0

Yes.Dump,如果不能显示变化。向后兼容性是我没有想过的问题。 – Jask 2010-09-10 11:17:32

2

对现有功能的这种彻底改变将成为大量破碎代码的秘诀。所以我会说不。

这就是说,这是我们谈论的PHP,所以它wouldnt让我感到吃惊....

+2

什么? PHP往往会推迟很多向后兼容性。即使这是一场灾难,“register_globals”仍然可用。如果你想要大规模的向后兼容性破解,请参阅python。 – Artefacto 2010-09-08 13:05:12

2

在php中,您可以创建一个像数组一样行走并像数组一样呱呱叫的对象,但仍然是一个带有可自定义的__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; 

当然,最好是数组已经是其他语言中的普通对象,但我不认为这会在最近的将来发生。

相关问题