我已经使用PHP编写了一段时间,并且我对程序函数(特别是字符串和数组)中的不一致感到相对恼火。
有了对象的支持,我一直希望PHP有一个本机实现的Arrays和Strings作为对象,这样我就可以编写如下代码:
$arr = new Array('foo', 'bar');
$item = $arr->pop();
制作类似于数组的对象并不是一件容易的事,但是,性能会受到很大影响。无论如何,它最终将成为数组构造的包装器。
PHP应该为面向对象的PHP提供 其他 核心对象吗?
编辑添加:
这是关于如何将数组用作对象的 NOT ;事实上,我特意做不想要在答案中讨论数组,因为这不是问题所在。我使用数组作为例子,似乎没有人读过这个问题。我对其他类/对象感兴趣,这些类/对象本身应该存在于核心PHP中。
答案 0 :(得分:2)
修改强> 在PHP 6中可以使用aoutoboxing 是编译器在原始(基本)类型与其对应的对象包装类(例如,数组和ArrayObject,double和Double等)之间进行的自动转换。 会有一个名为__autobox()
的特殊函数 <?php
function __autobox($value) {
return ... /* some object */
}
?>
例如:
function __autobox($value)
{
switch(gettype($value))
{
case 'integer':
return new MyIntegerObject($value);
break;
case 'array':
return new ArrayObject($value);
break;
default:
$stdObj = new stdClass();
$stdObj->value = $value;
return $stdObj;
break;
}
}
使用示例:
var_dump(5 == new MyInteger(5));
bool(true)
答案 1 :(得分:2)
你可以说PHP应该转换或者至少将它的一些本机转换为等价的对象,从容易使用的角度看你是对的,但是SPL提供了我们需要的大部分内容,所以没有人真正抱怨。我们使用数组的方式足够灵活,不会占用不必要的内存。
如果我不得不选择,我宁愿让PHP简化它的数组api而不是只是将所有数组转换为对象。为什么是array_map和asort?为什么不使用array_sort。它宁愿让他们在php6中修复它,并且实际上有几个月前有机会询问Scott McVicar和Derick Rethans并且他们回应说它会破坏向后兼容性并激怒大用户群。愚蠢的答案,但恐怕结束了。
但要回答你的问题,不......我不认为PHP应该采用它的原始类型作为语言对象。