2012-09-05 23 views
1

有一种方法可以在类初始化后调用类中的所有方法吗?例如,假设我有一个名为todo的类,并且一旦我创建了一个todo类的实例,那么其中的所有方法/函数都将被执行,而无需在构造函数中调用它?自动调用类中的所有方法php

<?php 
    class todo 
    { 
     function a() 
     { 
     } 
     function b() 
     { 
     } 
     function c() 
     { 
     } 
     function d() 
     { 
     } 
    } 

    $todo = new todo(); 
?> 

在这里我创建了一个类todo的一个实例,以便方法abcd将被执行。这可能吗?

+0

是的,这是可能的 - 你使用构造函数来实现这一点。为什么你不想使用构造函数? – maialithar

+0

嗯,我只是想知道是否反正,我只是不想调用它的每一个功能,让我说我有一个100功能? – avien

+0

如果您不想在构造函数中调用所有方法,还可以使用[Reflection](http://www.php.net/manual/en/book.reflection.php) – Havelock

回答

1

使用__construct()方法(如您所述),它在对象实例化上被调用。任何其他的东西都会是陌生的和意想不到的(要让构造函数立即执行随机方法)。

您的类代码看起来像您正在使用PHP4,如果是这种情况,请将您的构造函数命名为类名。

+0

如果是这样的话,他应该更新他的PHP服务器。来吧,已经是2007年了。 – Sherlock

1

是否这样?我使用这种模式有时会注册关于类的元数据。

<?php 
    class todo 
    { 
     public function __construct() 
     { 
      $this->a(); 
      $this->b(); 
      $this->c(); 
      $this->d(); 
     } 
     function a() 
     { 
     } 
     function b() 
     { 
     } 
     function c() 
     { 
     } 
     function d() 
     { 
     } 
    } 

    $todo = new todo(); 
?> 
1

,你在你的问题建议没有,我能想到的任何方式,总之将其放入构造。所有方法将在foreach中调用PHP Iterator

2

我认为你可以使用迭代器:

<?php 
class todo { 
    public static function init() { 
     self::a(); 
     self::b(); 
     self::c(); 
     self::d(); 
    } 
    function a() 
    { 
    } 
    function b() 
    { 
    } 
    function c() 
    { 
    } 
    function d() 
    { 
    } 
} 

todo::init(); 
4

这会输出'abc'。

class Testing 
{ 
    public function __construct() 
    { 
     $methods = get_class_methods($this); 

     forEach($methods as $method) 
     { 
      if($method != '__construct') 
      { 
       echo $this->{$method}(); 
      } 
     } 
    } 

    public function a() 
    { 
     return 'a'; 
    } 

    public function b() 
    { 
     return 'b'; 
    } 

    public function c() 
    { 
     return 'c'; 
    } 
} 
1

我复制及以下从php.net类粘贴...

我认为这将是有益的,因为方法不使用对象调用,而不是使用get_class_method(0函数):

class myclass { 
    function myclass() 
    { 
     return(truenter code heree); 
    } 

    function myfunc1() 
    { 
     return(true); 
    } 

    function myfunc2() 
    { 
     return(true); 
    } 
} 

$class_methods = get_class_methods('myclass'); 
foreach ($class_methods as $method_name) { 
    echo "$method_name\n"; 
} 
相关问题