面向对象PHP中缺少哪些基本对象?

时间:2011-02-23 21:02:15

标签: php oop object

我已经使用PHP编写了一段时间,并且我对程序函数(特别是字符串和数组)中的不一致感到相对恼火。

有了对象的支持,我一直希望PHP有一个本机实现的Arrays和Strings作为对象,这样我就可以编写如下代码:

$arr = new Array('foo', 'bar');
$item = $arr->pop();

制作类似于数组的对象并不是一件容易的事,但是,性能会受到很大影响。无论如何,它最终将成为数组构造的包装器。

PHP应该为面向对象的PHP提供 其他 核心对象吗?

编辑添加:

这是关于如何将数组用作对象的 NOT ;事实上,我特意做想要在答案中讨论数组,因为这不是问题所在。我使用数组作为例子,似乎没有人读过这个问题。我对其他类/对象感兴趣,这些类/对象本身应该存在于核心PHP中。

2 个答案:

答案 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应该采用它的原始类型作为语言对象。