2015-03-09 5 views
1

Как заголовок, $a является классом A и вызывает функцию foo.Как узнать, какой метод класса вызывается в PHP?

$a->foo(); 

Однако класс А имеет много подклассов и подклассы. И некоторые из них используют десятки черт, реализуя множество интерфейсов. Я не уверен, какой подкласс $a есть. Мой вопрос: как я могу узнать, какая функция foo вызывается? Я определенно могу вызвать foo(), используя неправильные параметры,

$a->foo('error'); 

И я собираюсь получить стек трассировки ошибок. Но как я могу получить имя класса или имя признака напрямую? Спасибо заранее!

ответ

0

Проверить этот пример:

<?php 

class Foo 
{ 
    protected $who; 

    public function printItem($string) 
    { 
     echo 'printItem (' . __CLASS__ . '): ' . $string . PHP_EOL; 
     $this->who = __CLASS__; 
    } 

    public function getClass() 
    { 
     echo $this->who . PHP_EOL; 
    } 


} 

class Bar extends Foo 
{ 
    public function printItem($string) 
    { 
     echo 'printItem (' . __CLASS__ . '): ' . $string . PHP_EOL; 
     $this->who = __CLASS__; 
    } 
} 

$a = new Foo(); 
$b = new Bar(); 
$a->printItem('baz'); // Output: 'printItem (Foo): baz' 
$a->getClass(); // Output: Foo 
$b->printItem('baz'); // Output: 'printItem (Bar): baz' 
$b->getClass(); // Output: Bar 
?> 

Вы можете прочитать в:

http://php.net/manual/en/language.oop5.inheritance.php

+0

Спасибо за комментарии. Но он не может определить, какой printItem() вызывается. Он просто печатает текущее имя класса. printItem можно получить из любых суперклассов. – WikiOops

+0

@WikiOops Если вы видите $ a-> printItem ('baz'); вывод - 'printItem (Foo): baz' - это printItem из Foo, который вызывается. Разве это не то, чего вы хотите? –

+0

@WikiУ вас у вас есть продвижение? –

0
Here is the demo ,try this 
<?php 
class myclass { 
function myclass() { 
    return(true); 
} 
function myfunc1(){ 
    return(true); 
} 
function myfunc2(){ 
    return(true); 
} 
} 
$class_methods = get_class_methods('myclass'); 
// or 
$class_methods = get_class_methods(new myclass()); 
foreach ($class_methods as $method_name) { 
echo "$method_name\n"; 
} 

// output :myclass myfunc1 myfunc2 
+0

это не ответит на вопрос, прочитайте его снова –

+0

Это, вероятно, не то, что я хочу. – WikiOops

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