2012-09-05 27 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"; 
} 
相關問題