2012-09-19 75 views
1

假設這樣的情況:一個特質應該放在一個單獨的文件中嗎?

interface IFoo 
{ 
    public function Bar(); 
} 

trait Foo 
{ 
    public function Bar() 
    { 
    echo 'Bar'; 
    } 
} 

class FooBar implements IFoo 
{ 
    use Foo; 
} 

$foobar = new FooBar(); 
$foobar->Bar(); //echos 'Bar'; 

我把類FooBar的在它自己的文件和接口IFoo的也是它自己的文件。

但我應該怎麼辦與特質富:

  • 在它自己的文件? (我的偏好)
  • 加上IFoo的推斷嗎?
  • 當特徵被賦予自己的文件時,自動加載如何處理?

注意:netbeans將FooBar類的代碼標記爲無效。 Netbeans沒有檢測到Foo被用來實現IFoo的特性。錯誤?

回答

3

特徵像類一樣自動加載。所以如果你有一個PSR兼容的加載器(其中名字空間是目錄,文件名是類/接口/特性名稱),所有東西都應該在它自己的文件中使用特徵。

所以要回答標題中的問題,如果你想堅持標準,那麼你應該使用PSR加載,所以是的,特質應該在單獨的文件中。對於netbeans而言,我認爲7.2是唯一支持php 5.4(及其特性)的版本,所以確保你有netbeans 7.2,並且你在項目設置中設置了php 5.4。

+0

我有netbeans 7.2和項目設置爲php 5.4 – JvdBerg

+0

這可能是一個錯誤。我在ubuntu上使用7.2,並沒有抱怨代碼,儘管對特性的支持可能會更好。例如,我在使用特質時沒有自動完成功能。 – Pinetree

+0

如果查看功能聲明,您會看到從7.2開始,當您在IDE中鍵入特徵時,NetBeans無法自動解析特徵的命名空間:https://blogs.oracle.com/netbeansphp/entry/php_5_4_support_traits NetBeans 8.0.x的情況似乎仍然如此。但是你應該將特徵放在單獨的文件中,因爲整個要點都在重複使用它們。 –

相關問題