PHP-Fusion Russian Support Site
 NETCK.RU - Сетевое сообщество : Клуб вебмастеров
Главная · Форумы · Статьи · Каталог ссылок · Mod&Plugins
Support php-Fusion RU
Официальный сайт поддержки русских пользователей
Скачать последнюю версию php-fusion
Скачать
Навигация
Главная
Форумы
Статьи
Каталог ссылок
Файлы
Photo

F.A.Q.
Контакты
Поиск


Support Sites
Карта сайта
Последние статьи
ТИЦ и ВИЦ Яндекc
Общие принципы рабoт...
Шаблоны для цифровой...
SEO оптимизация и пр...
Интернет зависимость
Наши спонсоры
Последние ссылки
SiNG cms
  SiNG cms - свободная...

My-Torrent.Net
  Открытый торрент-трекер

каталог сайтов Самары
  В нашем каталоге раз...

Бесплатные шаблоны д...
  Качественные ВЕКТОРН...

Сервис регистрации к...
  Оригинальный каталог...

Сейчас на сайте
Гостей: 5

Пользователей: 0

Всего пользователей: 1,723
Новый пользователь: Reel
Счетчики

Рейтинг Mail.ru

RSS новости
Просмотр темы
 Распечатать тему
Странное наследование
bambr
#1 Распечатать сообщение
Опубликовано 21-07-2010 20:21
Аватар пользователя

Пользователь

Сообщений: 171
Зарегистрирован: 09.03.08

Загрузить источник  PHP
  1. <?php
  2.  
  3. echo "Script start<br>";
  4.  
  5. class Singleton
  6. {
  7.     protected static $m_Instance;
  8.     
  9.     public static function Instance()
  10.     {
  11.         if( !isset( $m_Instance ) )
  12.         {
  13.             $name = static::__CLASS__;
  14.             $m_Instance = new $name;
  15.             echo "Singleton construct<br>";
  16.         }
  17.         return $m_Instance;
  18.     }
  19. }
  20.  
  21.  
  22. class A extends Singleton
  23. {
  24.     private function __construct()
  25.     {
  26.         echo "A construct<br>";
  27.     }
  28.     
  29.     public function foo()
  30.     {
  31.         echo "A::Foo called!<br>";
  32.     }
  33. }
  34.  
  35. class B extends Singleton
  36. {
  37.     private function __construct()
  38.     {
  39.         echo "B construct<br>";
  40.     }
  41.     
  42.     public function foo()
  43.     {
  44.         echo "B::Foo called!<br>";
  45.     }
  46. }
  47.  
  48. A::Instance()->foo();
  49. B::Instance()->foo();
  50. ?>
  51.  


Не выводит ничего. Даже текст "Script start". Включение отображения всех ошибок ничего не меняет. По-прежнему пусто. В чем прикол?

PHP Version 5.3.2-1ubuntu4.2
Не бойся прыгнуть в пустоту
 
bambr
#2 Распечатать сообщение
Опубликовано 21-07-2010 21:48
Аватар пользователя

Пользователь

Сообщений: 171
Зарегистрирован: 09.03.08

Порывшись нашел такую реализацию: [url]http://habrahabr.ru/blogs/php/85852/[/url]

Добавил костыль-псевдоконструктор, получилось такое:
Загрузить источник  PHP
  1. <?php
  2. abstract class Singleton
  3. {
  4.     // Экзепляры создаваемых классов
  5.     private static $m_Instance = array();
  6.     
  7.     // Закрываем конструктор
  8.     protected function __construct() {}
  9.     // Закрываем клонирование
  10.     final private function __clone() {}
  11.  
  12.     // Собственно получение экземпляра
  13.     public static function Instance()
  14.     {
  15.         $class_name = get_called_class();
  16.  
  17.         if( !isset( self::$m_Instance[ $class_name ] ) )
  18.             self::$m_Instance[ $class_name ] = new $class_name;
  19.  
  20.         self::$m_Instance[ $class_name ]->Init();
  21.         
  22.         return self::$m_Instance[ $class_name ];
  23.     }
  24.     
  25.     // Заменитель конструктора
  26.     public function Init()
  27.     {
  28.         echo "Singleton Init<br>";
  29.     }
  30. }
  31.  
  32.  
  33. class A extends Singleton
  34. {
  35.     public function foo()
  36.     {
  37.         echo "A::Foo called!<br>";
  38.     }
  39.     
  40.     public function Init()
  41.     {
  42.         echo "Init A<br>";
  43.     }
  44. }
  45.  
  46. class B extends Singleton
  47. {
  48.     public function foo()
  49.     {
  50.         echo "B::Foo called!<br>";
  51.     }
  52. }
  53.  
  54. A::Instance()->foo();
  55. B::Instance()->foo();
  56. ?>

Конечно было бы приятнее иметь просто закрытый конструктор в наследниках. Может кто сможет что придумать?
ЗЫ: по-нормальному конструкторы наследоваться не должны, в пхп наследуются :(
Не бойся прыгнуть в пустоту
 
Olegat
#3 Распечатать сообщение
Опубликовано 22-07-2010 20:15
Аватар пользователя

Пользователь

Сообщений: 473
Зарегистрирован: 01.02.06

Вы скажите, что вам надо, может без классов и конструкторов уже есть…Smile
 
http://x-vim.info/forum-volgograd.php
bambr
#4 Распечатать сообщение
Опубликовано 05-08-2010 17:13
Аватар пользователя

Пользователь

Сообщений: 171
Зарегистрирован: 09.03.08

Да я так - извилинами поскрипеть иногда охота Smile
Не бойся прыгнуть в пустоту
 
Olegat
#5 Распечатать сообщение
Опубликовано 05-08-2010 21:54
Аватар пользователя

Пользователь

Сообщений: 473
Зарегистрирован: 01.02.06

bambr написал:
Да я так - извилинами поскрипеть иногда охота Smile


Fusion, пока, позволяет себя ковырять только со знаниями процедурного программирования. За это его и ценят. Очевидно, создатели поняли, что напрягаться в изучении ООП ни кто не хочет…
…т.к. выгода для многих нулевая. В основном все можно сделать без ООП. Для кого есть от ООП выгода – те строят свою CMS.
 
http://x-vim.info/forum-volgograd.php
admin
#6 Распечатать сообщение
Опубликовано 10-08-2010 08:26
Аватар пользователя

Супер Администратор

Сообщений: 4424
Зарегистрирован: 05.11.04

Согласен, скрип мозгов способствует прогрессу))))
Какой вопрос - такой ответ!
 
http://netck.ru
Olegat
#7 Распечатать сообщение
Опубликовано 10-08-2010 10:30
Аватар пользователя

Пользователь

Сообщений: 473
Зарегистрирован: 01.02.06

У меня ошибку показал в стр.13 $name = static::__CLASS__;
заругался на слово static
потом заругался на стороки 48 и 49
Увидеть Script start и достать строки из классов А и B удалось только из под модификатора public


Script start
A::Foo called!
B::Foo called!


Загрузить источник  PHP
  1. <?php 
  2.   
  3. echo "Script start<br>"; 
  4.   
  5. class Singleton 
  6. { 
  7.     protected static $m_Instance; 
  8.      
  9.     public static function Instance() 
  10.     { 
  11.         if( !isset( $m_Instance ) ) 
  12.         { 
  13.             $name = __CLASS__; 
  14.             $m_Instance = new $name; 
  15.             echo "Singleton construct<br>"; 
  16.         } 
  17.         return $m_Instance; 
  18.     } 
  19. } 
  20.   
  21.   
  22. class A extends Singleton 
  23. { 
  24.     private function __construct() 
  25.     { 
  26.         echo "A construct<br>"; 
  27.     } 
  28.      
  29.     public function foo() 
  30.     { 
  31.         echo "A::Foo called!<br>"; 
  32.     } 
  33. } 
  34.   
  35. class B extends Singleton 
  36. { 
  37.     private function __construct() 
  38.     { 
  39.         echo "B construct<br>"; 
  40.     } 
  41.      
  42.     public function foo() 
  43.     { 
  44.         echo "B::Foo called!<br>"; 
  45.     } 
  46. } 
  47.   
  48. echo A::foo(); 
  49. echo B::foo(); 
  50. ?> 

Изменил(а) Olegat, 10-08-2010 10:33
 
http://x-vim.info/forum-volgograd.php
bambr
#8 Распечатать сообщение
Опубликовано 16-08-2010 18:20
Аватар пользователя

Пользователь

Сообщений: 171
Зарегистрирован: 09.03.08

Дело в том, что __CLASS__ в одиночке всегда будет равен Singleton
Не бойся прыгнуть в пустоту
 
Olegat
#9 Распечатать сообщение
Опубликовано 18-08-2010 18:22
Аватар пользователя

Пользователь

Сообщений: 473
Зарегистрирован: 01.02.06

Мой хостинг не потянул static::__CLASS__;
выдал ошибку...
 
http://x-vim.info/forum-volgograd.php
admin
#10 Распечатать сообщение
Опубликовано 19-08-2010 07:50
Аватар пользователя

Супер Администратор

Сообщений: 4424
Зарегистрирован: 05.11.04

Хостинг должен все тянуть!

Слава богу щас хостеров как....выбирай, но осторожно))
Какой вопрос - такой ответ!
 
http://netck.ru
bambr
#11 Распечатать сообщение
Опубликовано 21-08-2010 15:10
Аватар пользователя

Пользователь

Сообщений: 171
Зарегистрирован: 09.03.08

Olegat написал:
Мой хостинг не потянул static::__CLASS__;
выдал ошибку...

это и есть ошибка Smile
я тоже думал сначала, что так можно Smile
Не бойся прыгнуть в пустоту
 
foxfolder
#12 Распечатать сообщение
Опубликовано 26-08-2010 09:08
Пользователь

Сообщений: 273
Зарегистрирован: 11.11.07

Olegat написал:
bambr написал:
Да я так - извилинами поскрипеть иногда охота Smile


Fusion, пока, позволяет себя ковырять только со знаниями процедурного программирования. За это его и ценят. Очевидно, создатели поняли, что напрягаться в изучении ООП ни кто не хочет…
…т.к. выгода для многих нулевая. В основном все можно сделать без ООП. Для кого есть от ООП выгода – те строят свою CMS.


потроллю немного)))

Olegat, извини, но сказал ты полнейшую глупостьSmile
Плагины и моды для php-fusion. Перенос на другие CMS.
Техническая поддержка и платные консультации.
foxel.ru
 
http://foxel.ru/
Olegat
#13 Распечатать сообщение
Опубликовано 29-08-2010 19:04
Аватар пользователя

Пользователь

Сообщений: 473
Зарегистрирован: 01.02.06

Olegat, извини, но сказал ты полнейшую глупость


Вы не обратили внимание - тема уже старая, а в ней только «тролли» в ООП, и вы не стали исключением? Т.к. люди ждут решения, а не придури и клоунад.

И это всё при вашем то стаже в ООП…Smile
Изменил(а) Olegat, 29-08-2010 19:06
 
http://x-vim.info/forum-volgograd.php
Перейти на форум:
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Голосование
Как вам новый релиз Фьюжина?







Вы должны авторизироваться, чтобы голосовать.
Fusion7
cms php-fusion 7
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

08.09.10 18:54
Privet Vsem!!!

03.09.10 07:40
m_a_f, да ты поэт Smile

03.09.10 07:04
ух, как все грустно

03.09.10 03:37
:-) Осень настала, холодно стало, сайты бабло перестали давать..

31.08.10 07:29
Всегда пожалуйста!

26.08.10 19:13
Спасибо! Pfft

26.08.10 17:08
сделано

26.08.10 14:29
активируйте меня на сайте седьмой версии пожалуйста!

16.08.10 08:17
Скоро осень, за окнами август...

07.08.10 09:26
Все еще актуален))))

Наша кнопка
Будем благодарны, за размещение нашей кнопки или ссылки на наш портал.