2013-02-20 2 views
3

Есть ли встроенный статический метод или свойство для ссылки на класс PHP, чтобы он был контекстуально представлен в виде строки? Например:Имя класса PHP в виде строки

Вместо этого:

$obj->tempFn('MyClass') //MyClass being the name of the class 

Я хочу, чтобы это сделать:

$obj->tempFn(MyClass) //Directly references the class name, instead of a string representation 
+0

$ obj-> tempFn (новый MyClass()) или $ MyClass = новый MyClass(); // что-то сделать с этим объектом $ obj-> tempFn ($ myClass); – sanj

+0

Обратите внимание, что новый MyClass() создает экземпляр класса MyClass, его не то же самое, что ссылка на класс. Но зачем вам это делать? – cernunnos

+0

Пожалуйста, объясните, что вы подразумеваете под «контекстуально представлять в виде строки». Что вы пытаетесь сделать? Вопрос может интерпретироваться несколькими способами. –

ответ

6

No. Но вы можете определить константу в классе, который содержит имя класса, как:

class foo{ 
    const 
    NAME = 'foo'; 
} 

И доступ к нему, как foo::NAME.

В PHP 5.5, вы будете иметь возможность использовать:

foo::class 
+1

Это был подход, который я собирался взять, но я хотел убедиться, что не было лучшего способа. Удивленный он еще не доступен. Спасибо! – astonius

1

echo get_class($this); должен работать внутри класса.

echo __CLASS__; Я считаю, что это статическое свойство

+0

Спасибо, но мне нужно обратиться к нему за пределами самого класса и без создания экземпляра класса. – astonius

+0

Вы можете вернуть ' __CLASS__' свойство внутри статического метода (т.е. статическая функция getName()) – Husman

+0

@astonius это шутка? Если вы не создаете экземпляр класса, вы можете получить к нему доступ только с помощью статических методов и переменных. Чтобы получить доступ к статическим вещам, вы должны знать, имя класса. Как 'Math :: sum()'. Просто напишите вручную 'echo 'Math" '?? – vikingmaster

0

Если действительно хочет, чтобы избежать статику я думаю класс Reflection может работать.

function getClassName(ReflectionParameter $param) { 
    preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches); 
    return isset($matches[1]) ? $matches[1] : null; 
} 

Это из комментариев на http://www.php.net/manual/en/reflectionparameter.getclass.php

Смежные вопросы