Пожалуйста скажите, что же я делаю не так. Пытаюсь разобраться в ООП уже полдня, уже голова пухнет.Может плюнуть на него и писать в процедурке.... Код (Text): <?php class Text { var $txt = Array(); function Text ($c) { $a = 0; $b = 1; $d = $a + $b + $c; $this->txt[] = $d; } } function summ() { return $this->txt; } ?> Код (Text): <html> <head> <title>OOP</title> </head> <body> <?php require_once 'oop.php'; $su =& new Text(10); $r = $su->summ(); echo ($r); ?> </body> </html> Пожалуйста посоветуйте какую-нибудь книгу...
PHP4 старьё. http://php.net/__autoload http://phpclub.ru/detail/article/2000-12-10 http://phpclub.ru/detail/article/zend_changes
Вот может сейчас меня закидают помидорами, но мне кажется, что это зависит от того, что ты делаешь. Если какую-нибудь маленькую программульку и пишешь её один ты, то как тебе удобнее - так и делай, можешь и процедурным. А если что-то серьёзное и особенно если пишешь не ты один, а есть ещё разработчики, то ООП удобнее...
imho: 1. Zend и PHP не одно и тоже. 2. Различия между 4 и 5 не революционные (кстати, в чем глубина идеи называть теперь конструктор __construct а не именем класса ? ) alexander.pro Изучайте принцип ООП и мышление по ООП, реализация вторична.
Как я понял в 4 версии не было защищённых данных в классах а в 5 ой прототип взят с С++ классов.В 4 версии как сами разработчики называли заумный массив был а не ООП. Да и неявных ссылок внутри класса стало больше что и увеличило производительность.
obsrv, интерестно как изучать принцип ООП и мышление по ООП в PHP4 при: Отсутствии protected, private, abstract. и много другого. Я уже не говорю о дурацком принципе работы $new = MegaClass(); $new2 = $new; ИМХО в php4 ООП не было.
Процитирую фрагментик из книги: В версии PHP4 конструкторы имеют те же имена, то и сам класс. В версии PHP5 внесены изменения, направленные на унификацию исользования конструкторов. Золотые слова.
Ну если так говорят разрабы . Может в 4 и не было private, public, protected (а разве не было?). Просто я пришел наверное сразу в 5ую) Если рассматривать пример в шапке темы, то он абсолютно нормален для ООП.
dAllonE При отсутствии будут все паблик, какие проблемы ? доп: кстати, вид $new = MegaClass() - очень даже красив с точки зрения АБСТРАКЦИИ, но плох в унификации (как sobachnik писал выше). imho: PHP просто вырос из штанишек скриптового языка с сишной реализацией и хочет двигаться куда-то далее. Мне предпочтительнее реверансы в сторону Java.
Greg1978 Я согласен полностью, просто я против категоричности dAllonE. Начинать можно и с пабликов. В реальной жизни паблики (и тд) дают бонус в раскладывании 'добра' по полочкам, чтобы в крупных проектах не плодилась свалка.
В PHP4 не было интерфейсов, разделения доступности переменных/методов, клонирования объектов. PS. Пока писал уже настрочили постов )
obsrv, знаешь Википедия, например, относит инкапсуляцию в ООП к одному из основных понятий. И я с ней (и с многими другими считающими так же). Полностью согласен. UPD: Плюс интерфейсы, клонирование, abstract, final, static(в явном виде) и т.д. Не было в php4 нормального ООП (ИМХО разумеется)
Я вроде как слышал клонирование было однако именно клонирование а не создание новой ссылки на одно и то же пространство в оперативной памяти что и позволило повысить производительность и в этом.
Заклевали с четверкой - отступлюсь. Значит я приехал в PHP сразу в пятерку. dAllonE красивые слова (инкапсуляция) в ход пошли . Ну ок: PHP: class A { var $b = ''; setB( $n ) { $this->b = $n; } } class B { private $b = ''; setB( $n ) { $this->b = $n; } } Какая для вас, как для разработчика принципиальная разница? Только та, о которой я писал выше: не будет в дальнейшем свалки (+еще разные фичи но не критичные). Зато, отдавая код, вы обременены в любом случае созданием документации (а-ля javadoc).