2013-05-06 2 views
0

Я довольно новичок в ООП, и я пытаюсь получить имя текущего исполняемого класса и метода. Например:Получить текущий исполняемый метод

<?php 

class ParentExample 
{ 
    function __construct() 
    { 
     echo get_class($this) . '<br />'; 
     echo __METHOD__; 
     exit; 
    } 
} 

class ChildExample extends ParentExample 
{ 
    public static function test() 
    { 
     echo 'hello'; 
    } 
} 

call_user_func_array([new ChildExample, test]); 

Это результат я хочу:

ChildExample 
ChildExample::test 

Это результат я получаю:

ChildExample 
ParentExample::__construct 

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

EDIT: Основываясь на ответах, я думаю, что мой вопрос непонятен. Я хочу, чтобы конструктор ParentExample указывал мне имя вызываемого метода. Это возможно?

ответ

1

Я хочу, чтобы конструктор ParentExample сообщил мне имя вызываемого метода. Это возможно?

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


echo __METHOD__; находится в пределах метода __construct. Поскольку __METHOD__ всегда имеет значение метода он находится, он не может печатать `

__construct вызывается, когда вы создать объект. Вы создаете объект с помощью оператора new. Это не, связанный со статическим методом test.

Вы бы поставить echo __METHOD__ в метод test для того чтобы это произошло;)

Вы должны использовать строку, чтобы указать имя метода:

call_user_func_array([new ChildExample, "test"]); 
// Since you're not passing any arguments, this will do: 
call_user_func_array([new ChildExample, "test"]); 
+0

Я обновил свой вопрос. Возможно ли получить вызываемый метод из конструктора родителя? –

+0

@mistermartin Я обновил ответ. Нет, это не сработает. – phant0m

0

Попробуйте с этим:

class ParentExample 
{ 
    function __construct() 
    { 
     echo get_class($this) . '<br />'; 
    } 
} 

class ChildExample extends ParentExample 
{ 
    public static function test() 
    { 
     echo __METHOD__; 
    } 
} 

call_user_func([new ChildExample, 'test']); 

Обратите внимание, что я удалил вызов exit в родительском конструкторе и произнес эхо __METHOD__ с чи ld класс. Если вы не закончите скрипт сразу после создания ParentExample.

Кроме того, если вы не используете параметры для вызова метода, вы должны использовать call_user_func() вместо call_user_func_array().

+0

Я обновил свой вопрос. Возможно ли получить вызываемый метод из конструктора родителя? –