Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP. Как узнать имя объекта или класса, который вызвал функцию.

MalkoR Гуру (2706), закрыт 14 лет назад
class A {
func();
}

class B{
func();
}

ca=new A();
cb=new B();

function func() {
$class=????// тут нужно узнать, объект какого класса, вызвал эту функцию?
}
Лучший ответ
Антон - Мыслитель (5315) 14 лет назад
function func() {
$backtrace = debug_backtrace();
$class = null;
if(isset($backtrace[1]['class']))
{
$class = $backtrace[1]['class'];
}
echo $class;
}
MalkoRГуру (2706) 14 лет назад
Да, оно! спасибо! :)
Остальные ответы
Алексей Арыков Мудрец (13123) 14 лет назад
Интересно к чему этот индийский говнокод вообще?

function func($class)
{
...
}

class A {
func($this);
}

class B{
func($this);
}

...
простой вызов из скрипта
func(false);
MalkoRГуру (2706) 14 лет назад
Такой вариант не подойдет. Слишком в большом количестве мест, эта функция должна вызываться..
MalkoRГуру (2706) 14 лет назад
function html() {
$args=func_get_args();
$classname=""; // вот тут он и нужен
if(str_contains("controller", $classname)) {
$file=DS.S::route()->getController().DS.S::route()->getAction();
} else {
$file=DS.S::route()->getController().DS."model".DS.S::route()->getAction();
}
switch (func_num_args()) {
case "2":
return S::render()->HTML($args[0],$args[1]);
break;
case "1":
if(is_array($args[0])) {
return S::render()->HTML($file,$args[0]);
} else {
return S::render()->HTML($args[0]);
}
break;
case "1":
return
S::render()->HTML($file);
break;
}
}
Смородин Антон Профи (980) 14 лет назад
А ничего, что вызов функции класса надо делать через экземпляр (объект) ?
ca->func(); например...
Κότ μάτρόϛκϰΗ Просветленный (21386) 14 лет назад
function func() {
$class=????// тут нужно узнать, объект какого класса, вызвал эту функцию?
Да никак. Потому что это глобальная функция, может быть вызвана из любого места, и к классам абсолютно ни какого отношения не имеет
}

class A {
publuc function func() {
Это метод класса;
}
}

$a = new A();
$a->func();
А здесь будет вызван метод класса, а не глобальная функция
MalkoRГуру (2706) 14 лет назад
Школьников в школу иди учить, умник..
Ответ правильный уже дали
Κότ μάτρόϛκϰΗ Просветленный (21386) Я очень рад за вас. Не школьник пытается накатать совсем не школьный говнокод.
Похожие вопросы