PHP:遍历所有对象方法(调用对象中的所有方法)

PHP:遍历所有对象方法(调用对象中的所有方法)

问题描述:

在PHP中,有没有什么方法以编程方式调用对象的所有方法?PHP:遍历所有对象方法(调用对象中的所有方法)

我有一个对象充满包含HTML的片段方法:

class Example { 

    public function introduction(){ 

    ?> 

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 

    public function step_one(){ 

    ?> 

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 

    Etc... 
} 

有没有什么方法来调用所有的这些方法,以便在一个循环?或者我必须通过名字给他们打电话吗?

+1

可以使用get_class_methods从类中获取方法名称,但应该抛弃“order”的概念。您定义了这些方法,但是PHP允许将它们放入任何喜欢的顺序。 – kainaw

+0

除了将每个HTML片段存储在HEREDOC数组值中,有没有什么方法可以对它们进行“排序”? – ibhhvc

如果您不知道在该类中有多少种方法,但您知道每种方法的名称的基础。然后你就可以像这样遍历它们:

<?php 
class Example { 

    public static function loop() { 
    self::introduction(); 
    $name = "step_one"; 
    $int = 2; 
    $formater = new NumberFormatter("en", NumberFormatter::SPELLOUT); 
    while (true) { 
     if (method_exists(get_class(), $name)) { 
      self::$name(); 
      $number = $formater->format($int); 
      $name = "step_" . $number; 
      $int ++; 
     } 
     else { 
      break; 
     } 
    } 
    } 

    public static function introduction(){ 

    ?> 

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 

    public static function step_one(){ 

    ?> 

    <p>1Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 

    public static function step_two(){ 

    ?> 

    <p>2Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 
    public static function step_three(){ 

    ?> 

    <p>3Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 
} 
Example::loop(); 
?> 

或者可以遍历他们声明的顺序是这样的:

<?php 
class Example { 

    public function loop() { 
    $methods = get_class_methods(get_class()); 
    foreach ($methods as $method) { 
     if ($method != "loop") { 
     $this->$method(); 
     } 
    } 
    } 

    public function introduction(){ 

    ?> 

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 

    public function step_one(){ 

    ?> 

    <p>1Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 

    public function step_two(){ 

    ?> 

    <p>2Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 
    public function step_three(){ 

    ?> 

    <p>3Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> 

    <?php 

    } 
} 
$a = new Example(); 
$a->loop(); 
?> 
+0

非常好,谢谢。这非常有帮助。 – ibhhvc

感谢C.Liddell指着我在正确的方向。以下是我在构造函数中完成的操作:

public function __construct(){ 

    $methods = get_class_methods($this); 

    foreach($methods as $method) : 

    if($method === '__construct') : 

     continue; 

    endif; 

    $this->$method(); 

    endforeach; 

}