Platton
@Platton

Определение имени текущего (последнего) класса php?

Есть такой пример кода:
error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
class A
{
	private static $obj = array();
	public function __get($name)
	{
		if(isset(self::$obj[$name]))
			return(self::$obj[$name]);
		
		$class = ucfirst($name);
		self::$obj[$name] = new $class();
		return self::$obj[$name];
	}
}

class B extends A
{
	public $name;
	
	public function set() 
	{	
		return $this->name = __CLASS__;
	}
}

class C1 extends A
{
	public function test()
	{
		$this->b->set();
	}
}

class C2 extends A
{
	public function test()
	{
		$this->b->set();
	}
}

$c1 = new C1();
$c1->test();
echo $c1->b->name;

print '<br><br>';

$c2 = new C2();
$c2->test();
echo $c2->b->name;


Мне нужно чтобы метод set, который передает значение имени класса в свойство public $name - определял имена классов в которых он выполняется ( это C1 и C2). В данном случаи он определяет только имя класса В .
Читал мануал о позднем стат. здесь, но как это применить на практике в нестатическом контексте? Или возможно есть другие пути?
  • Вопрос задан
  • 708 просмотров
Пригласить эксперта
Ответы на вопрос 1
27cm
@27cm
TODO: Написать статус
Вы пытаетесь определить, в каком классе был вызван метод объекта другого класса. Простого способа это сделать нет, разве что смотреть php.net/manual/ru/function.debug-backtrace.php

Вы нагородили какую-то странную кашу, почему бы не сделать просто вот так:
<?php

class A
{
    public $name;
  
    public function set() 
    {	
        return $this->name = static::class;
    }

    public function test()
    {
        $this->set();
    }
}

class C1 extends A { }
class C2 extends A { }

$c1 = new C1();
$c2 = new C2();

$c1->test();
$c2->test();

echo $c1->name;    // C1
echo $c2->name;    // C2
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы