classname — php: получить имя класса методом другого класса.

Я хочу получить название класса Foo методом, который я установил в классе Foo.
Я могу получить имя класса Foo с debug_backtrace () ниже. Есть ли другой способ?

<?php

class Foo{

public function index(){
return (new Bar())->test();
}
}


class Bar{

public function test(){
$info = debug_backtrace();
$info = array_column($info, 'class');
$name = current(array_diff($info, array(__CLASS__)));
return "'$name' class name";
}
}


$foo = (new Foo())->index();
echo $foo; // 'Foo' class name

— ОБНОВИТЬ —
Мой английский не очень хороший, я не сказал.
Я хочу сделать что-то вроде следующего. Пожалуйста, напишите свой ответ соответственно.

index.php
<h1>Hello World</h1>


/view|
|foo|index.php
|    |menu.php
|    |detail.php
|
|user|login.php
|register.php

Я получу файл по указанному выше пути к каталогу. Путь к каталогу и имя класса будут одинаковыми.

<?php
class Foo{

public function index(){
return (new Template())->view('index.php');
}
}


class User{

public function index(){
return (new Template())->view('login.php');
}
}


class Template{

public function view($file_name){
$info = debug_backtrace();
$info = array_column($info, 'class');
$name = current(array_diff($info, array(__CLASS__)));
include("view/$name/$file_name");
}
}


$foo = (new Foo())->index();

//Hello World

0

Решение

использование get_class чтобы получить имя класса объекта.

class a {};
print get_class(new a());
# prints a

Или вы можете использовать __CLASS__ константа в пределах класса:

class Foo {
public function getClassName() {
return __CLASS__;
}
}

print (new Foo())->getClassName();
# prints Foo
2

Другие решения

Если я тебя ясно понимаю …

Вы можете использовать следующую константу.
__CLASS__

 1 <?php
2 class Foo{
3   public function index(){
4        return __CLASS__;
5   }
6 }
7
8 echo (new Foo())->index()."\n";

 1 <?php
2 class A
3 {
4         public $name=__CLASS__;
5         public function get_name()
6         {
7             return $this->name;
8         }
9 }
10 class B
11 {
12         public $name=__CLASS__;
13         public function get_name()
14         {
15            return $this->name;
16         }
17 }
18
19 echo (new A)->get_name();
20 echo "\n";
21 echo (new B)->get_name();
0

По вопросам рекламы [email protected]