PHP: статический класс и синглтон. Who is who.

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.

Поддержите мнение:

Не существует понятий "статический класс" и "синглтон"
0
Голосов нет
Синглтон существует, а статический класс - нет
6
26%
Статический класс === Синглтон
2
9%
Синглтон !== Статический класс
11
48%
А что такое синглтон и что тут вообще происходит? О_о
4
17%
 
Всего голосов: 23

Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: PHP: статический класс и синглтон. Who is who.

Сообщение futbolim »

Код: Выделить всё

<?php
class PersonalHelper {
    public static function getNextLevel($current_level) {
        if($current_level == 4) return '';
        return ++$current_level;
    }

    // функция возвращает, нашли мы спонсора или нет в зависимости от репутации
    public static function rollSponsor($reputation) {
        if($reputation < 2)
            throw new CHttpException(500, 'Внутренняя ошибка. Код 12фул61');

        $percent = Personal::$levels[Personal::TYPE_SPONSOR][$reputation]['percent'];

        return mt_rand($percent / 20, 5) == 5;
    }
}
 
Аватара пользователя
AlexSimp
Сообщения: 568
Зарегистрирован: 2013.04.09, 11:30
Откуда: Киев

Re: PHP: статический класс и синглтон. Who is who.

Сообщение AlexSimp »

flashimage писал(а):AlexSimp, не могли бы вы показать пример реализации хелперов в статическом классе на PHP
Примерно как тут: http://loco.ru/materials/178-yii-helpers
Все функции хелпера используются как методы класса:

Код: Выделить всё

HelperClass::helperMethod() 
Кстати, я тут гуглом нашел тему двухлетней давности на форуме, там как раз реализация хелперов синглтоном.
Но, я согласен с высказыванием коллеги, что в конечном итоге синтаксис вызова методов хелпера получается более громоздким и неудобным.
(я даже было спутал товарищей Skiller и SpiLLeR, ибо у второго в свое время довольно интересные вещи на сайте читал)
Жду, когда на форуме появятся вопросы "как сделать сайт на Yii?" и "как сложить два числа с помощью Yii?"...
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: PHP: статический класс и синглтон. Who is who.

Сообщение flashimage »

То есть если у класса только статические методы, то его можно смело называть статическим, т.к. абсолютно нет необходимости создавать его экземпляр?
Я кажется начинаю понимать о чем вы. Я, оказывается, давно ими пользуюсь, просто не знаю как это называется.))
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
AlexSimp
Сообщения: 568
Зарегистрирован: 2013.04.09, 11:30
Откуда: Киев

Re: PHP: статический класс и синглтон. Who is who.

Сообщение AlexSimp »

flashimage писал(а):То есть если у класса только статические методы, то его можно смело называть статическим, т.к. абсолютно нет необходимости создавать его экземпляр?
Я кажется начинаю понимать о чем вы. Я, оказывается, давно ими пользуюсь, просто не знаю как это называется.))
В яблочко :)

Хотелось бы услышать контраргументы тех двух (UPD: трех!) человек, которые считают, что статических классов не существует...

Господа, приглашаю к диалогу! Я вполне допускаю, что могу быть не прав, однако в своих суждениях полностью основываюсь на открытых и общеизвестных сведениях...
Жду, когда на форуме появятся вопросы "как сделать сайт на Yii?" и "как сложить два числа с помощью Yii?"...
HQ0
Сообщения: 182
Зарегистрирован: 2012.10.17, 17:21

Re: PHP: статический класс и синглтон. Who is who.

Сообщение HQ0 »

Посоны, мне сказали, что хелперы можно реализовать через интерфейсы, это правда или чушь? Изображение
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: PHP: статический класс и синглтон. Who is who.

Сообщение futbolim »

Хелпер - это обычный класс. Так, что без проблем.
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: PHP: статический класс и синглтон. Who is who.

Сообщение Neuromance »

AlexSimp писал(а):
flashimage писал(а):То есть если у класса только статические методы, то его можно смело называть статическим, т.к. абсолютно нет необходимости создавать его экземпляр?
Я кажется начинаю понимать о чем вы. Я, оказывается, давно ими пользуюсь, просто не знаю как это называется.))
В яблочко :)

Хотелось бы услышать контраргументы тех двух (UPD: трех!) человек, которые считают, что статических классов не существует...

Господа, приглашаю к диалогу! Я вполне допускаю, что могу быть не прав, однако в своих суждениях полностью основываюсь на открытых и общеизвестных сведениях...
От того, что вы класс будете называть статическим его сущность не изменится. Он не перестанет быть классом, в котором можно объявлять обычные нестатические методы. Если бы назвав его статическим, вы таким образом запретили объявление в нём нестатических методов и свойств, тогда да, таким понятием можно было оперировать.

Как, например, если создадите абстрактный класс, то не сможете создать его экземпляр. Тут сразу видно отличие от обычного класса. А понятие статический класс - не более чем удобное обозначение для обычного класса, как бы подразумевающее, что все методы класса статические.
Аватара пользователя
AlexSimp
Сообщения: 568
Зарегистрирован: 2013.04.09, 11:30
Откуда: Киев

Re: PHP: статический класс и синглтон. Who is who.

Сообщение AlexSimp »

Neuromance писал(а): От того, что вы класс будете называть статическим его сущность не изменится. Он не перестанет быть классом, в котором можно объявлять обычные нестатические методы. Если бы назвав его статическим, вы таким образом запретили объявление в нём нестатических методов и свойств, тогда да, таким понятием можно было оперировать.

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

Я же не говорил, что статический класс -- это языковая структура, я лишь описал его, как понятие. Точно такое же, как Singleton, ООП, MVC и прочие понятия.

Так почему некоторые называют это бредом, сравнивая с тем же абстрактным классом в PHP, но забывая сравнить с static class в C++?
Ведь таким же бредом можно назвать MVC в PHP, сравнив его с коробочным MVC в asp.net, ибо в PHP понятие MVC не накладывает никаких физических ограничений - грузи себе данные в представлении, или обрабатывай запросы пользователя в модели :)
Жду, когда на форуме появятся вопросы "как сделать сайт на Yii?" и "как сложить два числа с помощью Yii?"...
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: PHP: статический класс и синглтон. Who is who.

Сообщение flashimage »

Я честно говоря тоже подумал что речь идет скорее о паттерне нежели о жестком определении
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: PHP: статический класс и синглтон. Who is who.

Сообщение Neuromance »

ну про бред я вообще ничего не говорил :D
Абстрактный класс в пример приводил, каюсь :lol: но с бредом ничьи слова не сравнивал.

Я лишь ответил на это приглашение
Хотелось бы услышать контраргументы тех двух (UPD: трех!) человек, которые считают, что статических классов не существует...
Господа, приглашаю к диалогу! Я вполне допускаю, что могу быть не прав, однако в своих суждениях полностью основываюсь на открытых и общеизвестных сведениях...
Просто спор по сути ни о чём. Если вы называете статичным класс, в котором все методы статичные, то глупо говорить, что таких классов не существует. Берёшь и создаешь его и вот он уже существует :lol:
А если кто-то таким понятием не пользуется и называет этот класс хелпером, то для него статичных классов не существет, зато существуют хелперы.

Единственное чего я не понял, так это как вы умудрились сравнивать синглтон с (будем называть его так) статическим классом :lol:
Аватара пользователя
AlexSimp
Сообщения: 568
Зарегистрирован: 2013.04.09, 11:30
Откуда: Киев

Re: PHP: статический класс и синглтон. Who is who.

Сообщение AlexSimp »

Neuromance писал(а):ну про бред я вообще ничего не говорил :D
...но с бредом ничьи слова не сравнивал.
тыц
Neuromance писал(а): Единственное чего я не понял, так это как вы умудрились сравнивать синглтон с (будем называть его так) статическим классом :lol:
тыц
Жду, когда на форуме появятся вопросы "как сделать сайт на Yii?" и "как сложить два числа с помощью Yii?"...
BaldaI
Сообщения: 18
Зарегистрирован: 2013.04.07, 05:29

Re: PHP: статический класс и синглтон. Who is who.

Сообщение BaldaI »

Код: Выделить всё

abstract class StaticClass
{
    final private function __construct()
    {
    }
} 
Все потомки этого класса, статические.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: PHP: статический класс и синглтон. Who is who.

Сообщение futbolim »

BaldaI писал(а):

Код: Выделить всё

abstract class StaticClass
{
    final private function __construct()
    {
    }
}
Все потомки этого класса, статические.
Да Вы что !
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: PHP: статический класс и синглтон. Who is who.

Сообщение xoma »

Никто unit-tests не тестирует контроллеры, т..к это бред, за исключением только если это REST, но и тогда все равно нужно тестировать грубо говоря как "конечный автомат".
Контроллеры вполне себе тестируются юнит-тестами, просто это довольно таки не тривиально, приходится создавать кучу моков и т.д.
Полистайте на досуге https://leanpub.com/laravel-testing-decoded там по этой теме есть отдельная глава, все толково и просто написано.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: PHP: статический класс и синглтон. Who is who.

Сообщение samdark »

Вопрос в том, зачем это делать юнитами. Ну и не юниты они будут, если уж придираться.
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: PHP: статический класс и синглтон. Who is who.

Сообщение xoma »

Sam Dark писал(а):Вопрос в том, зачем это делать юнитами. Ну и не юниты они будут, если уж придираться.
Ммм...ну если контроллер (экшн) изолировать от всего внешнего мира, все заменить моками и заглушками и просто проверить, что в экшине дергается (сам факт) такая-то моделька и передаются во вью такие-то переменные - то вполне себе юниты, разве нет ?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: PHP: статический класс и синглтон. Who is who.

Сообщение samdark »

Да, но по мне так это тестировать совершенно бессмысленно и, к тому же, трудозатратно. Эта часть легко покрывается интеграционным тестом без моков через тот же CodeCeption. Быстро и толк будет.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: PHP: статический класс и синглтон. Who is who.

Сообщение lancecoder »

futbolim писал(а):
BaldaI писал(а):

Код: Выделить всё

abstract class StaticClass
{
    final private function __construct()
    {
    }
} 
Все потомки этого класса, статические.
Да Вы что !
теряется смысл в не статических свойствах и методах
Ответить