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 :: позднее статическое связывание [3]

 PHP.SU

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


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

> Описание: ну фигли оно не работает
DlTA
Отправлено: 16 Октября, 2012 - 23:22:26
Post Id



Постоянный участник


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


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




DeepVarvar пишет:
abstract class ....


http://php.net/manual/ru/languag...op5.abstract.php
Цитата:
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в классе-потомке


я вообщет хочу сократить код а не раздувать его
(Добавление)
armancho7777777 пишет:
я к тому, что именуйте синглоны именем getInstance.
И будет ясно, что это синглтон.


а где тут ясность то?
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Октября, 2012 - 23:24:44
Post Id



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


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


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




Да, но я считаю что наследовать от сингтона - это моветон.
Абстрактный класс сам по себе выполняет роль синглтона.
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Октября, 2012 - 23:26:00
Post Id



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


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


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




DlTA пишет:
а где тут ясность то?

Ну это как внегласное соглашене что-ли, если можно так выразиться ))
Все так именуют синглтоны, если не ошибаюсь, в любом фреймворке...
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Октября, 2012 - 23:27:09
Post Id



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


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


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





Ушел я делать свой роутер дальше Закатив глазки
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Октября, 2012 - 23:27:28
Post Id



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


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


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





К словам прошу не придираться, -
думаю всем ясно что я имел в виду ))

DeepVarvar пишет:
Ушел я делать свой роутер дальше Закатив глазки


Неужели на мысль натолкнул ?)
Или показалось ... ))

(Отредактировано автором: 16 Октября, 2012 - 23:28:56)

 
 Top
DlTA
Отправлено: 16 Октября, 2012 - 23:31:46
Post Id



Постоянный участник


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


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




armancho7777777 пишет:
Все так именуют синглтоны, если не ошибаюсь, в любом фреймворке..
не по теме, но все же: вот как в запроса к без сокращать название до одной буквы, та это норма, а как метод назвать так сразу десяток букаф, чтоб скучно небыло.

теперь как обошол появившуюся прежде проблему:

PHP:
скопировать код в буфер обмена
  1. class CSingleton {
  2.         /*
  3.          * !!!!!!!
  4.          * не забываем переопределить в классах потомках, а то ловим ошибку!!))
  5.          */
  6.         static private $_item = null;
  7.         // ....
  8.         /**
  9.          * возвращает указатель на объект
  10.          *
  11.          */
  12.         static protected function init() {
  13.                 /*
  14.                  * ошбка? значит не переопределили в калссе потомке))
  15.                  */
  16.                 if (static::$_item == null){
  17.                         $className = static::getClassName() ;
  18.                         //var_dump($className);
  19.                         static::$_item = new $className();
  20.                 }
  21.                 return static::$_item;
  22.         }
  23. }
  24. class CTest extends CSingleton {
  25.         static protected $_item = null;
  26.         /**
  27.          * @return CTest Description
  28.          */
  29.         public static function o() {
  30.                 return self::init();
  31.         }
  32. }
  33.  
  34. class CB extends CSingleton {
  35.         static protected $_item = null;
  36.         /**
  37.          * @return CB Description
  38.          */
  39.         public static function o() {
  40.                 return self::init();
  41.         }
  42. }
  43. CB::o();
  44. var_dump(CTest::o());


object(CTest)[2]

красота затерялась, хотя ....

ну и опыта более стало.)
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Октября, 2012 - 23:31:47
Post Id



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


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


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





armancho7777777 пишет:
Неужели на мысль натолкнул ?)
Нее, все мысли уже были.
 
 Top
caballero
Отправлено: 17 Октября, 2012 - 00:59:10
Post Id


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


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


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




Цитата:
теперь как обошол появившуюся прежде проблему:

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

PHP:
скопировать код в буфер обмена
  1. public static function o() {
  2.                 return self::init();
  3.         }
  4. }
  5.  

про функцию у которой очень информативное имя о уже молчу


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DlTA
Отправлено: 17 Октября, 2012 - 10:42:32
Post Id



Постоянный участник


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


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




caballero пишет:
вроде собирался избежать копипаста а в каждом наследнике

это для того чтоб было удобно в IDE использовать, подсказки корректно выдаются, а иначе искренне примимает рез элемент класса родителя, и не выдает подсказки. выше об этом писал.

а именно для корректного позднего связывания для одиночки нужно в каждом наследнике переопределять вот это:
DlTA пишет:
static protected $_item = null;

(Добавление)
а можно и так
PHP:
скопировать код в буфер обмена
  1. /**
  2.  * @method CTest o() возвращает экземпляр
  3.  */
  4. class CTest extends CSingleton {
  5.         static protected $_item = null;
  6.         // ...
  7. }
 
 Top
caballero
Отправлено: 17 Октября, 2012 - 11:07:21
Post Id


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


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


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




Цитата:
это для того чтоб было удобно в IDE использовать, подсказки корректно выдаются, а иначе искренне примимает рез элемент класса родителя, и не выдает подсказки. выше об этом писал.

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DlTA
Отправлено: 17 Октября, 2012 - 11:22:23
Post Id



Постоянный участник


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


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




caballero пишет:
я уже не говорю про лучшую читабельность кода.
если вопрос в имени методов то тут "на в кус и цвет фломастеры разные", у меня свои доводы и т.д.
а вот если вопрос в структурировании кода, тогда не понятно что не так.
 
 Top
caballero
Отправлено: 17 Октября, 2012 - 12:50:05
Post Id


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


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


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




Цитата:
если вопрос в имени методов то тут "на в кус и цвет фломастеры разные"

нет
Цитата:
у меня свои доводы и т.д.

не можеть быть доводов назвать метод буквой о

Цитата:
а вот если вопрос в структурировании кода, тогда не понятно что не так.

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

выглядит конешно круто - базовый класс, синглетон, статическое связывание и все такое
но на самом деле это, извиняюсь, говнокод

а то что в програме нужно стопицот синглетонов говорит еще и о проблеммах с архитектурой.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 17 Октября, 2012 - 13:34:02
Post Id



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


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


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





Этот странный момент, я полностью согласен с caballero.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 17 Октября, 2012 - 14:33:20
Post Id



Постоянный участник


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


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




ну коль начали тыкать пальцами, то хоть c направлением, почему это плохо?
 
 Top
caballero
Отправлено: 17 Октября, 2012 - 14:45:44
Post Id


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


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


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




потому что половина кода, в частнсти наличие базового класса, не имеет смысла


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB