Какие фундаментальные объекты отсутствуют в объектно-ориентированном PHP? - PullRequest
4 голосов
/ 24 февраля 2011

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

С поддержкой объектов яхотел, чтобы в PHP была встроенная реализация массивов и строк как объектов, чтобы я мог писать такой код:

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

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

Есть ли другие базовые объекты, которые PHP должен иметь для объектно-ориентированного PHP?

ИЗМЕНИТЬ, чтобы добавить:

Это НЕ о том, как вы можете использовать массивы в качестве объектов;на самом деле, я специально не хочу обсудить массивы в ответе, так как вопрос не в этом.Я использовал массивы в качестве примера, и, кажется, никто не читал вопрос.Меня интересуют другие классы / объекты, которые должны существовать изначально в ядре PHP.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

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

Если бы мне пришлось выбирать, я бы предпочел оптимизировать PHP, это массив api, а не просто конвертировать все массивы в объекты. Почему это array_map и asort? Почему бы не array_sort например. Скорее всего, они исправят это в php6 и на самом деле имели возможность спросить Скотта МакВикара и Дерика Ретанса несколько месяцев назад, и они ответили, что это нарушит обратную совместимость и разозлит большую базу пользователей. Тупой ответ, но конец истории, я боюсь.

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

2 голосов
/ 24 февраля 2011

Изменить: Это будет возможно в PHP 6 с atotoboxing это автоматическое преобразование, которое компилятор делает между примитивными (базовыми) типами и соответствующими им классами обертки объектов (например, array и 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...