- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть такой кода:
Мне нужно чтобы метод set, который передает значение имени класса в свойство public $name - определял имена классов в которых он выполняется ( это C1 и C2). В данном случаи он определяет только имя класса В .
Возможно для этого случая поможет позднее стат. св. здесь, но как это применить на практике в нестатическом контексте? Или возможно есть другие пути?
http://php.net/manual/ru/function.get-class.php и get_called_class() пробовали?
http://php.net/manual/ru/function.get-class.php и get_called_class() пробовали?
Тот же результат: имя B
Osavul,
Это немного извращенческий варинт, но
{ $t=end(debug_backtrace());
return $this->name = $t['class'];
}
Osavul,
Это немного извращенческий варинт, но
Сейчас определяет так как нужно, но выдаются также предупреждения:
Strict Standards: Only variables should be passed by reference in C:\OpenServer\domains\test2.loc\index.php on line 25
C1
Strict Standards: Only variables should be passed by reference in C:\OpenServer\domains\test2.loc\index.php on line 25
C2
Эм, а ничего, что у вас по коду свойство класса b и должно быть объектом класса B?
У вас же здесь композиция получается, а не наследование, т.е. грубо говоря экзмепляр класса B не знает, что он - просто переменная или свойство класса C1 например. т.е. вот только через такие костыли получить имя вызываемого класса.
Вы чисто теоретически интересуетесь или какую-то практическую задачу решаете?
Вы чисто теоретически интересуетесь или какую-то практическую задачу решаете?
Практическую задачу. Мне нужно чтобы каким-то образом знать в каком конкретно классе вызывается метод set, и передавал эту информацию классу B, где на основе этого будет строится дальнейшая логика.
Сейчас определяет так как нужно, но выдаются также предупреждения:
А раньше не выдавалось что-ли? Тогда сначала присваивайте, потом возвращайте. Хотя не критично как по нам.
Практическую задачу. Мне нужно чтобы каким-то образом знать в каком конкретно классе вызывается метод set, и передавал эту информацию классу B, где на основе этого будет строится дальнейшая логика.
Правильным ответом на эту ситуацию будет явная передача классу откуда его вызывают.
Не $this->b->set(); , а $this->b->set('class:b'); и дальше уже строить логику на основе переданной переменной, а не на основе вычислений источника вызова.
Если у Вас класс должен "догадываться" откуда он вызван, то рано или поздно это приведет к эпик фэилу. Вызовите Вы его напрямую (не через c1) или еще шагом дальше (через d01 extends c01) и начнется чехарда. Плюс для последующих программеров код будет не очевиден.
Правильным ответом на эту ситуацию будет явная передача классу откуда его вызывают.
Не $this->b->set(); , а $this->b->set('class:b'); и дальше уже строить логику на основе переданной переменной
У меня есть множество подобных классов C1,C2,C3...Cn, в которых в свою очередь содержатся десятки методов set. На данный момент у меня в метод set передается параметр - но это не удобно в каждый метод set передавать одно-и тоже значение параметра. Вот я и решил это автоматизировать, чтобы не писать одно и тоже по 100 раз.