Как наследуются функций в PHP? Класс single - типичный синглетон. baseClass наследует сингл, в нем есть некие функции:abstract class baseClass extends single { public function func1() { return __CLASS__; } } Так же есть класс наследующий baseClassclass class1 extends baseClass { public function func2() { $this->func1(); //return - baseClass , а должен, маму его, т.е. папу, т.е. меня за ногу - class1; echo __CLASS__; // здесь выдаст class1 } } Возвращает baseClass, я голову сломал. Я не понимаю ООП? Базовый класс мною создан дабы не писать каждый раз одни и те же функции и переменные. Т.е если class1 and class2 наследуют baseClass то и func1 разные (в моем случае разность в возвращаемых именах) Пойду перекурю.....
Проблема здесь не в наследовании функций, а в том, что метод func1 в базовом классе baseClass использует специальную магическую константу CLASS, которая возвращает имя класса, в котором был вызван данный метод. Поскольку метод func1 вызывается из класса baseClass, то он вернет имя этого класса, а не класса, в котором он был унаследован (в данном случае class1).
Если вы хотите, чтобы метод func1 возвращал имя класса, в котором он был унаследован, вам следует использовать метод get_class($this), который вернет имя текущего объекта, независимо от того, из какого класса он был вызван.
Пример исправленного базового класса baseClass:
abstract class baseClass extends single { public function func1() { return get_class($this); } }
Теперь при вызове метода func1 из класса class1, он должен вернуть имя класса class1.
Проблема здесь не в наследовании функций, а в том, что метод func1 в базовом классе baseClass использует специальную магическую константу CLASS, которая возвращает имя класса, в котором был вызван данный метод. Поскольку метод func1 вызывается из класса baseClass, то он вернет имя этого класса, а не класса, в котором он был унаследован (в данном случае class1).
Если вы хотите, чтобы метод func1 возвращал имя класса, в котором он был унаследован, вам следует использовать метод get_class($this), который вернет имя текущего объекта, независимо от того, из какого класса он был вызван.
Пример исправленного базового класса baseClass:
abstract class baseClass extends single {public function func1() {
return get_class($this);
}
}
Теперь при вызове метода func1 из класса class1, он должен вернуть имя класса class1.