Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не понимаю ООП [6]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (8): « 1 2 3 4 5 [6] 7 8 »   

> Без описания
EuGen Администратор
Отправлено: 16 Апреля, 2013 - 12:30:43
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




XelaNimed пишет:
Но что если в производных классах понадобиться расширить метод?!

Поясните, что значит "расширить". Воспользоваться кодом из родительского класса (возможно, дополнив его чем-то ещё)? Вам поможет обращение через parent::
PHP:
скопировать код в буфер обмена
  1. class Foo
  2. {
  3.    public function __construct()
  4.    {
  5.       echo('Used code from Foo');
  6.    }
  7. }
  8. class Bar extends Foo
  9. {
  10.    public function __construct()
  11.    {
  12.       parent::__construct();
  13.       echo('Used code from Bar');
  14.    }
  15. }

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DelphinPRO
Отправлено: 16 Апреля, 2013 - 12:46:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




объяви таой же метод.
если нужно вызови родительский


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
XelaNimed
Отправлено: 16 Апреля, 2013 - 12:54:18
Post Id


Частый гость


Покинул форум
Сообщений всего: 136
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




EuGen, это я и искал!
Другими словами, при необходимости дополнить метод наследуемого родительского класса специфичными особенностями производного класса, мне нужно будет явно вызвать метод. Правильно ли я понял?!
И еще... Если я явно не вызову метод __call в производном классе, будет ли он так-же вызываться при вызове несуществующих методов?!

P.S.: Возникала мысль, что это как-то хитрее реализовано.

(Отредактировано автором: 16 Апреля, 2013 - 13:04:04)

 
 Top
DelphinPRO
Отправлено: 16 Апреля, 2013 - 13:07:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




XelaNimed пишет:
мне нужно будет явно вызвать метод. Правильно ли я понял?!

родительские методы нужно вызывать явно. иначе код в них не выполняется при переопределении

XelaNimed пишет:
Если я явно не вызову метод __call в производном классе, будет ли он так-же вызываться при вызове несуществующих методов?!

Если в производном классе есть метод __call, то будет вызван именно он. Из него вы можете вызвать родительский код, если нужно.
Если в производном классе не определен метод __call, но определен в родительском, то будет вызван родительский метод.

(Отредактировано автором: 16 Апреля, 2013 - 13:07:58)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
LIME
Отправлено: 16 Апреля, 2013 - 13:07:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




XelaNimed пишет:
Если я явно не вызову метод __call в производном классе,
а он и не может быть явно вызван
только описан
наследуется и используется все из родительского
вернее вызывается код родителя если он не переопределен в наследнике
 
 Top
DelphinPRO
Отправлено: 16 Апреля, 2013 - 13:08:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




LIME пишет:
а он и не может быть явно вызван
имеется ввиду конструкция parent::method()


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
html-ka
Отправлено: 08 Мая, 2013 - 02:22:32
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Vinyl пишет:
armancho7777777 пишет:
Всё придёт с опытом
Здравствуйте, armancho7777777. Я помню, тот же вопрос задавал здесь. Так ответы вроде Вашего жутко раздражали Радость Это я сейчас понимаю, что ответ-то верный, а тогда казалось, что ООП это тайна покрытая мраком и никто ею делиться не хочет)

igosja, у меня в арсенале два мною недописанных движка. Первый кагбэ готов, но там говнокода много, он не расширяем толком, + ещё тысяча и один недостаток. А второй просто не дописал, т.к. пропала нужда и свободное время. Когда-нибудь обязательно второй допишу.
Так вот, к чему я это. Первый я начинал писАть в далекие времена, когда Е.Попов был для меня кем-то на уровне Бьёрна Страуструпа. Но главное, как я его начал писать...

Создал файл index.php в корне, в нем написал <?php и начал по мере поступления идей в мозг, их реализовывать. В итоге получил черт-ногу-сломит архитектуру с хрен-че-найди реализацией. Оно-то работает, но когда нужно что-то изменить/доделать/переделать - капец.

А ко второму я подошел серьезнее. Сначала я начал продумывать архитектуру приложения. Я нарисовал на бумаге, что и как у меня будет работать. Схема не из сложных: несколько блоков, соединенных линиями, каждый из которых за что-то отвечает. Один - за пользователей (авторизацию|регистрацию|бан и т.д.), другой - за текущую страницу, третий - за работу модулей, четвертый - за базу данных, и т.д.. Так вот когда есть такой "план", а он должен быть, если Вы собираетесь разрабатывать что-либо более-менее серьезное, то в данном случае как минимум удобно для каждого блока нашей схемы написать класс.

Представьте себе, что Ваш сайт это предприятие. Классы - это работники. И цех - один php-файл, допустим, init.php. В нем работают объекты классов, проходит весь "процесс" работы на более высоком уровне, а все глубинные процессы описаны в самих классах. Это очень удобно. Важно понимать, что класс это не набор функций и переменных, а будущая сущность, которая что-то умеет и обладает какими-то свойствами. Опять же, преимущества становятся очевидными, когда поработаешь над чем-то более-менее крупным. А если ещё и в команде, то сразу видно разницу.

Спойлер (Отобразить)



Сейчас прочитал слова, которые хорошо описывают преимущества ООП

habrahabr пишет:
Вкусив запретного плода расширенного синтаксиса, программисты не остановились и возжелали модульности: ведь это так удобно — вызывать отдельно написанный модуль программы и не вникать в его алгоритм. Главное — это знать как он принимает на вход данные и как возвращает результат.


]классная метафора в связи с ней есть ряд уточняющих вопросов, мы можем здесь их обсудить?

(Отредактировано автором: 08 Мая, 2013 - 02:28:19)

 
 Top
Vinyl
Отправлено: 08 Мая, 2013 - 06:05:34
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 645
Дата рег-ции: Янв. 2012  
Откуда: Армавир, Краснодарский край


Помог: 15 раз(а)




html-ka пишет:
мы можем здесь их обсудить?

Конечно


-----
Пессимисты пользуются die(), оптимисты - exit()
 
 Top
sc2r2bey
Отправлено: 08 Мая, 2013 - 11:04:09
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




.

(Отредактировано автором: 08 Мая, 2013 - 11:04:51)

 
 Top
html-ka
Отправлено: 08 Мая, 2013 - 11:06:43
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




html-ka пишет:

Представьте себе, что Ваш сайт это предприятие. Классы - это работники. И цех - один php-файл, допустим, init.php. В нем работают объекты классов, проходит весь "процесс" работы на более высоком уровне, а все глубинные процессы описаны в самих классах. Это очень удобно. Важно понимать, что класс это не набор функций и переменных, а будущая сущность, которая что-то умеет и обладает какими-то свойствами. Опять же, преимущества становятся очевидными, когда поработаешь над чем-то более-менее крупным. А если ещё и в команде, то сразу видно разницу.

Мэтт Зандстра рекомендует думать, как вы предлагаете, т.е. интерфейсами, одна сущность - одно действие, ну это в идеале. Получается работники стоит на конвейере и выполняет одну операцию, далее деталь идет к следующему, который выполняет над ней другую операцию из технологической цепочки. Над ними стоит начальник цеха. А таких цехов несколько, а над ними еще подразделения и т.д. Как-то очень громоздка получается.
 
 Top
caballero
Отправлено: 08 Мая, 2013 - 11:25:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Получается работники стоит на конвейере и выполняет одну операцию, далее деталь идет к следующему, который выполняет над ней другую операцию из технологической цепочки. Над ними стоит начальник цеха. А таких цехов несколько, а над ними еще подразделения и т.д. Как-то очень громоздка получается.

не придумывай лишнего чего там не написано тогда и не будет громоздко
тем более что аналогия не слишком удачная.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
html-ka
Отправлено: 08 Мая, 2013 - 16:25:18
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




caballero пишет:
Цитата:
Получается работники стоит на конвейере и выполняет одну операцию, далее деталь идет к следующему, который выполняет над ней другую операцию из технологической цепочки. Над ними стоит начальник цеха. А таких цехов несколько, а над ними еще подразделения и т.д. Как-то очень громоздка получается.

не придумывай лишнего чего там не написано тогда и не будет громоздко
тем более что аналогия не слишком удачная.

не понимаю про то, чего не написано
предложите свою Улыбка
 
 Top
PHPLamer
Отправлено: 20 Мая, 2013 - 06:42:25
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Сент. 2008  
Откуда: Russia, Krasnodar


Помог: 2 раз(а)




Ранее не использовал ООП, сейчас испытываю необходимость.

Не могу понять как правильно сделать получение и хранение данных для иттерационной обработки.
К примеру: есть класс пользователь и класс для доступа к БД.
В итоге чтобы вывести список всех пользователей потребуется сформировать массив содержащий интересующие поля в экземпляре класса доступа к БД и получить этот массив через метод класса. Вызов метода правильнее сделать в методе класса пользователь. Для того чтобы в дальнейшем обработать данные и встроить их в дизайн необходимо разобрать полученный массив данных.
Получается памяти будет использовано в 3 раза больше чем при процедурном методе с конструкцией.

Скорее всего я неправильно проектирую алгоритм в случае с ООП. Не подскажите как правильнее реализовать такие методы?

PHP:
скопировать код в буфер обмена
  1. while ($row = mysql_fetch_assoc($connect_sth)) {
  2.                echo($row['username']);
  3.         }
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Мая, 2013 - 16:00:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHPLamer пишет:
Скорее всего я неправильно проектирую алгоритм в случае с ООП.
Не, не - все ты правильно делаешь. Даешь больше объектов!
ООП (объекты) ради ООП (объектов)!
Почитай вот эту старенькую статью, слегка остынь.
И продолжи в меру юзать ООП и АОП.
 
 Top
caballero
Отправлено: 20 Мая, 2013 - 16:24:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Ранее не использовал ООП, сейчас испытываю необходимость

и в чем эта необходимость выражается?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (8): « 1 2 3 4 5 [6] 7 8 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB