2013-07-16 23 views
-2

我正在爲ZEND認證工程師考試做準備。使用TestPassport-Engine「虛擬考試」,我遇到了這個問題:如何使用關鍵字「靜態」使其按預期工作?

考慮下面的代碼。在粗體標記的行中應該使用哪個關鍵字以使該代碼按預期工作?

abstract class Base { 
    protected function __construct() {} 

    public function create(){ 
     // this line 
     return new self(); 
    } 

    abstract function action(); 
} 

class Item extends Base { 
    public function action() { echo __CLASS__; } 
} 

$item = Item::create(); 
$item->action(); 

正確答案是static。那麼,最終應該如何呢?

+3

隨着給出的答案,關鍵字'靜態'一點點調查應該告訴你在哪裏把它..這是真的更容易花兩分鐘在php.net比輸入整個問題,尤其是如果你正在嘗試學習PHP。我的意思是,靜態方法調用已經存在於代碼中。 – GolezTrol

+7

事實上,你不得不在StackOverflow上提出這個問題,這強化了我個人的觀點,認爲這些認證最終是無用的。 「認證工程師」... – crush

+2

@crush - 你打在頭上的釘,有我的upvote!我完全同意。 –

回答

2

簡單地改變

public function create() { 
    return new self(); 
} 

public static function create() { 
    return new static(); 
} 

here

+0

這是正確答案,我錯了,我刪除了它。 –

+0

這個問題要求對* one *行進行更改,儘管... – phant0m

+1

除了手冊:這裏還簡要介紹'new static()'和'new self()'之間的區別:[New self vs. new static ](http://stackoverflow.com/a/5197655/1456376)。 – insertusernamehere