Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
81 / 25 / 19
Регистрация: 27.10.2014
Сообщений: 420
1

Правильное ли написание синглтона?

30.10.2016, 17:04. Показов 722. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Это будет правильное написание синглотона?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Singleton{
 
    protected static $instance;
 
    protected function __construct(){
 
    }
 
    private function __clone(){
 
    }
 
    public static function getInstance(){
 
        if(static::$instance === null)
            static::$instance = new static();
 
        return static::$instance;
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2016, 17:04
Ответы с готовыми решениями:

Правильное написание
У меня есть меню <a href="{home}" class="menu"><div class="menuf">ГЛАВНАЯ</div></a> ...

Правильное написание ссылок
Имеем <b>КЛЮЧЕВОЕ СЛОВО</b> как правильно расставить ссылки: Вариант 1 <div>Код</div><div>на...

Правильное написание компаратора
Всем привет. Есть обычный компаратор public class GuestNameComparator implements Comparator<Guest>...

Правильное написание скобок
Уважаемые эксперты! Памагите разобраться.... надо чтобы при вводе любого математического выражения...

12
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
30.10.2016, 17:50 2
забыли про метод __wakeup

Добавлено через 3 минуты
а вообще на вики все уже давно есть, можно оттуда просто скопировать.. https://ru.wikipedia.org/wiki/... %8F)#PHP_5
либо же с использованием трейтов - https://ru.wikipedia.org/wiki/... F)#PHP_5.4
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
30.10.2016, 18:38 3
еще забыли про наследование и когда статическая переменная объявлена в функции
Singleton - это шаблон, реализация на плечах разработчика
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
30.10.2016, 20:16 4
Цитата Сообщение от Fedor Vlasenko Посмотреть сообщение
забыли про наследование
Спросить стесняюсь -- а наследование при чём?
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
30.10.2016, 20:21 5
PHP
1
class Foo extends Singlenton {}
ведь трейт понятен был
PHP
1
2
3
4
class Foo 
{
    use \TSingleton;
}
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
30.10.2016, 20:26 6
Цитата Сообщение от Fedor Vlasenko Посмотреть сообщение
class Foo extends Singlenton
Это понятно. Пока понять не могу, почему Вы про наследование упомянули?
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
30.10.2016, 20:50 7
потому, что это как один из способов, не писать 100 раз один и тот-же код а наследоваться от Singlenton
сам предпочитаю трейты
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
30.10.2016, 20:59 8
Теперь картина проясняется. Изначально у меня было неверное понимание из-за этого:
Цитата Сообщение от KOPOJI Посмотреть сообщение
забыли про метод __wakeup
Цитата Сообщение от Fedor Vlasenko Посмотреть сообщение
еще забыли про наследование
Т.е. KOPOJI сообщил о логическом недочёте и мне показалось, что Вы тоже про недочёт какой-то говорите.

Хотя, по идее, у автора темы и за наследование продумано -- не зря же там static, а не self
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
30.10.2016, 21:42 9
если смотреть так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Singleton
{
        private static $instance = null;
 
        final private function __construct() { }
 
        final private function __clone() { }
 
        final private function __wakeup() { }
 
        public static function getInstance()
        {
                if (!self::$instance)
                {
                        self::$instance = new self;
                }
 
                return self::$instance;
        }
}
 
$oneInstance    = Singleton::getInstance();
$secondInstance = Singleton::getInstance();
 
$cloner        = function ()
{
        return clone $this;
};
$thirdInstance = $cloner->bindTo($oneInstance, 'Singleton')->__invoke();
 
var_dump($oneInstance === $secondInstance);
var_dump($oneInstance === $thirdInstance);
var_dump($oneInstance, $secondInstance, $thirdInstance);
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
31.10.2016, 07:44 10
Не понимаю Вас. Сначала про наследование говорили, теперь Closure задействовали.
Всё ровно также отработает, если задействовать trait. Поэтому не ясно, что Вы донести пытаетесь.
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
31.10.2016, 12:06 11
Para bellum, последний код это хак Singleton
я показал, что можно создать копию одиночки(хак $thirdInstance)
что говорит о том, что в php нет "чистой реализации" Singleton
1
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
31.10.2016, 12:29 12
Цитата Сообщение от Fedor Vlasenko Посмотреть сообщение
что говорит о том, что в php нет "чистой реализации" Singleton
с дуру можно <censored> сломать и пальцы при этом вывихнуть. Если стоит задача сломать программу - программа ломается в любой среде
 Комментарий модератора 
Использование нецензурных выражений запрещено в любом виде
0
81 / 25 / 19
Регистрация: 27.10.2014
Сообщений: 420
01.11.2016, 00:58  [ТС] 13
Цитата Сообщение от KOPOJI Посмотреть сообщение
забыли про метод __wakeup
При unserialize, если в строке есть обьект класса одиночки, то он создастся, а обьявляя wakeup приватным мы лишаем его такой возможности. Я таки правильно понял?
0
01.11.2016, 00:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2016, 00:58
Помогаю со студенческими работами здесь

Проверить правильное написание IP
Пытаюсь проверить верное написание IP, нужно из строки взять четыре числа и проверить их на...

Правильное написание браузера на QT
В книге Макса Шлее Qt 5.3. Профессиональное программирование на C++ есть пример простого браузера:...

Правильное написание 2х окон
Всем привет, недавно я начал изучать java, пишу на netbeans 8(соответственно рисую gui:)) Сюда...

Правильное написание кода
Привет народ,я с таким вопросом. Хотелось бы приучать себя к правильному коду на ранних...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru