| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Как получить имя класса внутри статической функции |
| Автор: Bog d`An 2.10.2009, 12:36 | ||||||
| Как можно получить имя класса внутри статической функции этого класса? или посоветуйте, пожалуйста, какой-нибудь другой метод дабы
преобразовать в нечто такое
чтобы результат был одинаков:
|
| Автор: sTa1kEr 2.10.2009, 13:14 |
| Для того, что бы получить имя класса в статическом методе необходимо вызвать метод http://ru.php.net/get_class без параметров или воспользоваться http://ru.php.net/manual/en/language.constants.predefined.php __CLASS__ Если же необходимо получить имя класса-наследника, то это возможно только в PHP >= 5.3 при помощи http://ru.php.net/lsb и метода http://ru.php.net/get-called-class |
| Автор: Bog d`An 2.10.2009, 14:05 |
| Да, нужно было именно последнее. Как жаль что самое вкусное ещё не скоро можно будет использовать широко) |
| Автор: sTa1kEr 3.10.2009, 12:46 | ||||
|
| Автор: youri 3.10.2009, 15:33 |
| могу привести авторитетное мнение http://phpclub.ru/talk/showthread.php?postid=871184#post871184 могу даже свои мысли по этом поводу высказать: это как минимум "неправильно", нестандартно/неочевидно (синглтон обычно узнают по методу get_instance в классе, а не по extends Singleton), кроме того будут небольшие сложности при необходимости унаследовать B от кого-то еще. И это сложно назвать Singleton'ом. Зато удобно. еще интересная дискуссия на тему правильности http://phpclub.ru/talk/showthread.php?s=&threadid=112864&highlight=static+singleton+%ED%E0%F1%EB%E5%E4%EE%E2%E0%ED%E8%E5 |
| Автор: sTa1kEr 3.10.2009, 15:44 |
| Где вы увидели в названии класса "A" слово "Singleton"? |
| Автор: youri 3.10.2009, 21:01 |
| ну как-то напоминает... а вы согласны что теоретически так делать не стоит? Это скорее удобно (практически). В любом случае, я бы не сказал, что late static binding очень нужная штука /* интересно, можно ее синтаксическим сахаром назвать :-? */ |
| Автор: sTa1kEr 5.10.2009, 09:52 |
Согласен, что наследоваться, исключительно ради синглтона бессмысленно. Разве late binding вносит какой-то новый синтаксис в PHP? |
| Автор: youri 5.10.2009, 11:38 | ||
тогда я не совсем понимаю. Если A - Singleton, то там наследование исключительно ради Singleton'а. Если A - не Singleton, то как будет выглядеть наследование ради Singleton'а? И ради чего еще можно наследоваться? ну если считать, что это должен быть обязательно синтаксис, то, конечно, нельзя |
| Автор: sTa1kEr 5.10.2009, 13:21 |
| А - Singleton с некоторым функционалом, который (функционал) мы хотим унаследовать. |
| Автор: youri 5.10.2009, 14:17 |
| а почему наследоваться исключительно ради Sinleton'а бессмысленно? Слишком мало кода, причем код стандартный? |
| Автор: nerezus 5.10.2009, 14:43 | ||
Была такая проблема, решается паттерном AbstractFactory.
|
| Автор: sTa1kEr 5.10.2009, 15:39 |
По тем же причинам, что вы приводили в своем посте. А в некоторых случаях можно решить ее проще - наследованием. Действительно, есть такая буква в этом слове. |
| Автор: youri 6.10.2009, 09:30 |
т.е. если наследоваться только ради Singleton, то плюсы этого решения (исключение дублирования кода), не перевешивают минусы, потому что кода немного и он стандартный. Если же есть дополнительная функциональность, то это может иметь смысл. Но еще есть альтернативный вариант - агрегация. Все зависит от цели наследования: наследование реализации/интерфейса. Для наследования реализации, думаю, лучше подойдет агрегация. В общем пример до сих пор слишком абстрактный p.s. а как тут AbstractFactory поможет? |