Если пользователь передает объект в myprintr(), то вы можете использовать
if (is_object($arg)) {
$className = get_class($arg);
}
, чтобы получить имя типа объекта, который был принят, который затем можно кормить отражения
но конструктор отражения будет принимать либо имя класса , либо объект в качестве аргумента, так что вам не нужно даже имя класса экземпляр класса Reflection
EDIT
Просто ради игры немного с этим понятием (а не создавать какую-либо зависимость на глобалов), или от того, аргументы являются переменными, значения, возвращаемые из функций, строки и т.д.:
class Test{};
function myTest() {
$some_object = new Test();
myprintr($some_object);
}
function myprintr(){
$callStack = debug_backtrace();
$calledAt = $callStack[0];
$callingFile = file($calledAt['file'],FILE_IGNORE_NEW_LINES);
$callingLine = $callingFile[$calledAt['line']-1];
$callingLine = substr($callingLine,strpos($callingLine,__METHOD__));
$calledWithArgNames = trim(substr($matches[0],1,-1));
var_dump($calledWithArgNames);
$args = func_get_args();
foreach($args as $arg) {
var_dump($arg);
}
}
myTest();
$some_object = new Test();
$some_other_object = &$some_object;
$t = 2;
$gazebo = "summer house";
$visigoth = pi()/2; myprintr($some_other_object,pi(), atan2(pi(),$t), $visigoth, "Hello $t World", $gazebo); $t = log($t/$visigoth);
Это возвращает все аргументы, передаваемые в вызывающей функции в $ calledWithArgNames, поэтому для первого звонка у вас есть:
'$some_object'
и для второго вызова:
'$some_other_object,pi(), atan2(pi(),$t), $visigoth, "Hello $t World", $gazebo'
Это все еще требует расщепления вниз в отдельные аргументы (в preg_split на запятые, кроме случаев, когда они в фигурные скобки), но это, безусловно, шаг ближе к о чем вы на самом деле просите.
Вы не можете, если вы не используете что-то вроде debug_backtrace(), и вам не должно быть никакой необходимости в этом ... это бизнес-требование? или просто изучать PHP? –
Я пытаюсь создать функцию print_r/var_dump для моего API и нуждаюсь в этом имени, если пользователь передает объект, и я перечисляю методы объекта. Я хочу добавить имя переменной к именам методов при их отображении, например $ object-> method ... – Alex
Возможно, ответ на этот вопрос: http://stackoverflow.com/questions/255312/how-to-get-a-variable -name-as-a-string-in-php –