Прошедшей ночью затеял я игру в шахматы с компом. Кстати здорово усыпляет. Проснулся после шести, сделал пару ходов и опять уснул. Проснулся уже в 10 часов, продолжил играть и проиграл: допустил одну ошибку (хотя переиграв партию с того места где просчитался - выиграл). Потом сел писать этот топик.
Crazy,
на практике я давно использую вместо родных PHP массивов - свой класс. В этом случае, результат SQL запроса выглядит лаконично:
Также, номер телефона хорошо держать не в обычной переменной: $phone = '123-456-7890', а в специальном объекте. Объект не допустит неверных входных данных, например: $phone->set('bla-bla') - выдаст ошибку. Программе не надо знать что $phone это String (инкапсуляция). Исходя из этих предпосылок, я решил что простые типы тоже можно заменить на объекты. Мне это уже помогло сделать код компактнее.
Единственный недостаток - нагрузка процессора. Но ИМХО она возрастет линейно (liniar):
O(NC), где С - коффициент, во сколько раз объект медленнее переменной простого типа.
см. Big O Notation
_________________ Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Есть такая штука: структурное программирование. Которое никто не отменял. И никто не заставляет выбирать между ООП-кодом и грязным неструктурированным кодом -- есть и другие альтернативы.
То же ООП нужно использовать правильно. Например, создание класса Phone вполне может быть разумно, если он соответствует сущности предметной области. В отличие от создания бессмысленного враппера вокруг абстрактного понятия "строка".
Создание скоих врапперов для примитивных типов не решает ни одной задачи, которую не решает банальное структурное программирование в форма тупого создания необходимых функций.
Код будет работать только если fetchArray() вернет объект (например Array).
Без класса-враппера тут не обойтись.
Врапперы возможно не решают задач, которые не решает структурное программирование,
но правильное их использование делает PHP программу более читабельной. Это и есть моя цель.
_________________ Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Код будет работать только если fetchArray() вернет объект (например Array).
Определенно. Но это вовсе не означает, что возвращенный объект должен быть враппером над array. Здравый смысл говорит, что при нормальном проектировании метод должен называться не fetchArray, а fetchRow и возвращать объект, представляющий строку выборки. И array здесь ни при чем.
Что касается читабельности, то здесь помогает правильное проектирование, а не слепое оборачивание примитивов в объекты.
Здравый смысл говорит, что при нормальном проектировании метод должен называться не fetchArray, а fetchRow и возвращать объект, представляющий строку выборки. И array здесь ни при чем.
Но мы должны иметь возможность производить итерацию объекта Row.
Поэтому логично предположить что он наследует Array.
Только что нашел что PHP имеет класс: ArrayObject.
и какие то экспериментальные разработки, вроде Integer объекта.
_________________ Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Но мы должны иметь возможность производить итерацию объекта Row. Поэтому логично предположить что он наследует Array.
Первое утверждение неверно. Второе утверждение не следует из первого. И вот почему:
1. Нам нужно иметь возможность итерирования по выборке. При этом Row является одним из элементов выборки.
2. Для итерирования нам нужно иметь возможность проверить наличие следующего элемента и перейти к нему. Хорошим примером организации итерирования по выборке является RecordSet из JDBC. Там для этого введен единственный метод next():boolean. Никакие массивы здесь не нужны.
Соответственно, если отбросить примеры очевидно неуместного использования, то врапперы вокруг примитивных типов дадут нам исключительно syntactic sugar. Не имею ничего против того, чтобы кто-то лично для себя такое создавал. Вот только нужно осознавать, что ни на скорости разработки, ни на читабельности кода они существенно не сказываются.
Заголовок сообщения: Re: Заменить простые типы на объекты в PHP? Добавлено: 31 Октябрь 2008, 05:19:01
Затея - ерунда. Потому что много несовместимостей с существующим кодом и вообще с языком:
if else - не работает: любой объект (в том числе и String) оценивается как TRUE. Объект Integer не будет работать с циклами как: for
Поддержка примитивных типов ввиде объектов врятли пойдет дальше существующей функции __toString(). В PHP6 осознанно не будут это развивать, потому что это Weak typed язык: http://www.php.net/~derick/meeting-note … tive-types
Наверно поэтому нет Type Hinting как: function foo(String $string) {}
Сама по себе __toString полезная функция, например для таких объектов как Phone (см. выше).
Вообщем я успокоился.
P.S. Но объект массив - имхо это очень удобно
_________________ Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.