получить имя класса без экземпляра класса в php - PullRequest
3 голосов
/ 16 декабря 2011

Я ищу следующую php-функцию:

class foo
{
}

echo get_class_special(foo);  // returns the string 'foo'

Имеет ли php функцию для получения имени класса без создания экземпляра класса?

Ответы [ 5 ]

5 голосов
/ 16 декабря 2011
<?php

class Foo {
    const NAME = __CLASS__;
    // or
    public static $NAME = __CLASS__;
    // or
    public static function getName() {
        return __CLASS__;
    }
}

Foo::NAME; // Foo
// or
Foo::$NAME; // Foo
// or
Foo::getName(); // Foo

?>
3 голосов
/ 16 декабря 2011

У меня возникает ощущение, что существует некоторая путаница с динамической типизацией в PHP: в PHP нет такого понятия, как объект типа class, классы выражаются своими именами.Поэтому, если вы напишите foo в своем приложении, вы получите ПРЕДУПРЕЖДЕНИЕ, и foo будет интерпретировано как строка 'foo' - даже если есть класс с таким именем.

Так что если вынужно вызвать статическую функцию для класса, который присутствует в переменной, вы можете сделать это следующим образом:

$class = 'Foo';
$class::staticFuntion(); // will call Foo::staticFunction()

Это идет еще дальше, вы можете ссылаться на переменные с переменными :

$className = 'Foo';
$ref = 'className';
$$ref::staticFunction(); // will call Foo::staticFunction()
1 голос
/ 05 мая 2015

Начиная с PHP 5.5 вы можете использовать foo::class.См. этот ответ .

0 голосов
/ 16 декабря 2011

Я думаю, что невозможно получить имя класса без его объекта. Но если в вашем экземпляре объявлен только один класс, вы можете получить его, используя.

get_declared_classes();
0 голосов
/ 16 декабря 2011

Почему бы не создать статическую функцию, такую ​​как

class foo {

    public static function myClass() {
         return get_class($this);
    }
}

В вашем коде вы можете использовать

foo::myClass();  //return string 'foo'

Но здесь вам нужно знать имя класса, чтобы назвать его, так что это как-то излишне. Было бы целесообразно, например, если бы вы хотели получить свойства класса, не создавая его экземпляры, поскольку они могут изменяться при разработке кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...