2012-05-01 15 views
2

好的,這是非常意外的,它讓我很煩惱。我在所有的類中都有一個名爲default()的函數。但是,由於某種原因,我不能稱它。我想這是因爲switch語句中的'default:'(我根本不使用它)。不能在php中有名爲default的函數

這是真的,我不能在PHP中命名我的函數default()或我做錯了什麼?

這裏的錯誤:

Parse error: syntax error, unexpected T_DEFAULT, expecting T_STRING in 
C:\Users\Jinxed\Desktop\WebTrgovina\app\c\Controller.c.php on line 8 

而這裏的問題代碼:當我重命名默認爲別的

<?php 
abstract class Controller { 
    protected $view; 
    function __construct() { 
    } 
    abstract function default(); 
    function getView(){ 
     return $this->view; 
    } 
} 

代碼工作正常,但是這很討厭,有什麼解決辦法有函數名爲default()?

回答

5

不能將保留字用作類函數。你可以,但是,使用__call

<?php 
abstract class Controller { 

    public function _default($some, $args) {} 

    public function __call($name, $arguments) { 
     if ($name === 'default') { 
      //return call_user_func_array(array($this, '_default'), $arguments); // has args 
      return $this->_default(); // simpler 
     } 
    } 
} 

將允許你做$foo->default()。儘管如此,一個更好的主意是不要選擇依賴方法名稱的保留字的實現/ api。

+3

更好的主意是讓PHP修復他們愚蠢的解析器,這樣人們就可以編寫出合理的OOP代碼,而不必訴諸於黑客魔法只是爲了使用合理的方法名稱。 –

2

是的,你不能有一個名爲default的函數。惱人的,但那是PHP。

+0

這是[完整列表](http://uk3.php.net/manual/en/reserved.keywords.php)。 – cmbuckley

+0

@你說過我不能正常調用它,但是如何異常呢? +這是爲什麼?在文檔中找不到任何內容。 – Jinx

+0

閱讀本手冊的保留關鍵字頁面列表 - 如果您確實需要它們,請提供變通方法示例。 – Cylindric

3

這是對list of reserved keywords,所以沒什麼意外出現。如果您需要需要這些名稱,則可以使用__call - 有關示例,請參閱關鍵字頁面上的註釋。

0

我想貢獻給AD7six的答案(這應該是一個評論,我不能),並補充說,如果你使用支持PHPDoc的IDE,你可以在類聲明前添加它以使其自動完成知道這些假方法存在。

/** 
* show off @method 
* @method whateverItReturns default() 
*/ 
class foo { 
... 
相關問題