Забыли пароль?
Запросите новый здесь.

Автор темы: Razor
ID темы: 2242
Информация:
Тема содержит 4 сообщения, была просмотрена 1608 раз.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » PHP
 Распечатать тему
trait(примеси)
Razor
Здравствуй мой дорогой любитель php.
В новых версиях появились trait и namespac'ы, лично я trait ждал уже давно, эта штука представляет из себя "примеси", покажу на примере реализации singleton паттерна(фреймворк Bluz)..
Загрузить источник  GeSHi: PHP
  1.  
  2. <?
  3. namespace Bluz\Common;
  4.  
  5. /**
  6. * Singleton
  7. *
  8. * @package Bluz\Common
  9. *
  10. * @author Anton Shevchuk
  11. * @created 16.05.12 14:26
  12. */
  13. trait Singleton
  14. {
  15. /**
  16. * @var static instance
  17. */
  18. protected static $instance;
  19.  
  20. /**
  21. * Get class instance
  22. *
  23. * @throws Exception
  24. * @return static::$instance
  25. */
  26. final public static function getInstance()
  27. {
  28. return isset(static::$instance)
  29. ? static::$instance
  30. : static::$instance = new static;
  31. }
  32.  
  33. /**
  34. * Disabled by access level
  35. */
  36. protected function __construct()
  37. {
  38.  
  39. }
  40.  
  41. /**
  42. * Disabled by access level
  43. */
  44. protected function __clone()
  45. {
  46.  
  47. }
  48. }
  49.  
Добавлено за 0.042 секунд, используя GeSHi 1.0.8.10


Ну и юзается это дело путем подключения в классах таким образом

Загрузить источник  GeSHi: PHP
  1.  
  2. <?php
  3. use Bluz\Common;
  4.  
  5. Class DB {
  6. use Singleton;
  7.  
  8. }
  9.  
Добавлено за 0.034 секунд, используя GeSHi 1.0.8.10

Это делает твой код красивым и читаемым и избавляет от геморроя будущие поколения кодеров, которые будут читать твой код.
Sr. Software developer
plesk.com
x1
 
Rush
конечно повышает реюзабельность кода, но я пока не привык к ним. замыкания сделали больший прорыв имхо, достаточно посмотреть на любой современный фреймворк.
непонятно почему вызывается = new static; разве не должно быть что-то вроде self ?
ну и по хорошему раз закрываешь __clone(), стоило бы закрывать и __destruct(), __sleep(), __wakeup()
 
Web
Razor
Rush написал:

конечно повышает реюзабельность кода, но я пока не привык к ним. замыкания сделали больший прорыв имхо, достаточно посмотреть на любой современный фреймворк.
непонятно почему вызывается = new static; разве не должно быть что-то вроде self ?
ну и по хорошему раз закрываешь __clone(), стоило бы закрывать и __destruct(), __sleep(), __wakeup()

Я вот сам сейчас пытаюсь переписывать, где это возможно с trait.
Про new static - вот здесь.
__sleep() и __wakeup(), я бы тоже добавил, а по поводу __destruct() - зачем, мы же защищаем класс от повторного создания экземпляра, а не уничтожения..
Sr. Software developer
plesk.com
 
Rush
согласен, что спорный момент насчет деструктора. два экземпляра никак не получится конечно, но если экземпляр будет убит и в какой-то момент создан заново - тоже не торт
x1
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Топ 5 пользователей форума
Alex Alex (1,237)   Zaxap Zaxap (1,090)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)