2015-11-04 37 views
1

我是OOP & PHP的新手。我儘可能地遵循OOP方法,對於我的規範中的每個突出的「名詞」,我都有一門課,這很好。面向對象和PHP運行時

但它讓我思考編譯和運行時。

如果我開發了一個綜合的類,它具有相關的屬性,setter和getter以及一系列方法,那麼最終的類可以很容易地運行到幾百行代碼中。

如果我然後使用這個類,(例如)我只調用一個方法沒有整個類被解析&轉換和內存分配前執行?

我有這個權利嗎?當然,程序方法會更有效率(包含內的函數)還是在實際運行時這是可忽略的?

+4

你似乎認爲包含包含函數的文件不需要解析和「轉換」或分配內存 –

+0

不,我確實沒有,但它確實更有效地解析和轉換一個函數而不是整個類? – JAMMac

+3

文件被解析/ etc是否包含類或函數....假設你有一個包含20個函數的文件,但只能調用其中一個函數.... PHP仍然解析整個文件,而不僅僅是它的函數預測/猜測當你包含該文件時你將要調用 –

回答

0

由於所有包含的文件都被解析,並且幾百行代碼並不多,但如果您希望的話,您可以簡單地考慮一些適用於此類函數的靜態輔助方法(如果可能的話)。

結合使用自動加載器,您可以真正地降低質量包括。

實例之前

一類,你總是有:

class Helper { 
    public static function createFolder() { 
     // some stuff 
    } 

    public static function myEncoder() { 
     // some stuff 
    } 

    public static function getDomElementByID() { 
     // some stuff 
    } 

    public static function cleanupString() { 
     // some stuff 
    } 
} 

舉例算賬:

分裂您的 「龐大」 的類,並嘗試組在它的方法。

類的StringHelper

class StringHelper { 
    public static function cleanupString() { 
     // some stuff 
    } 
} 

類FilesystemHelper

class FilesystemHelper { 
    public static function createFolder() { 
     // some stuff 
    } 
} 

類DomHelper

class DomHelper { 
    public static function getDomElementByID() { 
     // some stuff 
    } 
} 

類EncodingHelper

class EncodingHelper { 
    public static function myEncoder() { 
     // some stuff 
    } 
} 

自動加載

創建一個自動加載類,這裏更多的信息=>PHP Docs

自動加載器將只包括文件當你真正需要它。例如,如果您正在呼叫:

$stringHelper = new StringHelper(); 
// or 
StringHelper::someStaticFunction(); 

真正讓爆炸工作的是命名空間和自動加載器的組合。看看這裏=>PHP Docs (namespaces)

+0

你的'Helper'類與具有函數的文件完全一樣。 – PeeHaa

+0

@PeeHaa,是的,但是我建議將這個例子'Helper'class分成不同的文件,如果可能的話使用自動加載器,所以你不包括2000行的一些功能,但只有200例如。 – swidmann

2

至於

但它讓我想起了編譯和運行。

我覺得@馬克comment是最中肯:

大多數基於類的系統使用自動加載,只包括類/正在積極要求來處理請求的文件.....

具有單一職責的原子類,從依賴注入容器自動加載將產生少量未使用的代碼。

如果我然後使用這個類,由此(例如)我只調用一個方法沒有整個類得到解析&轉換和內存分配前執行?

冗長的類有時可以分成更小的類,這會限制用於執行單個方法的代碼量。我認爲這裏的關鍵是single responsibility principle,它引發的類將需要他們運行被調用函數所需的最少資源。