我是OOP & PHP的新手。我儘可能地遵循OOP方法,對於我的規範中的每個突出的「名詞」,我都有一門課,這很好。面向對象和PHP運行時
但它讓我思考編譯和運行時。
如果我開發了一個綜合的類,它具有相關的屬性,setter和getter以及一系列方法,那麼最終的類可以很容易地運行到幾百行代碼中。
如果我然後使用這個類,(例如)我只調用一個方法沒有整個類被解析&轉換和內存分配前執行?
我有這個權利嗎?當然,程序方法會更有效率(包含內的函數)還是在實際運行時這是可忽略的?
我是OOP & PHP的新手。我儘可能地遵循OOP方法,對於我的規範中的每個突出的「名詞」,我都有一門課,這很好。面向對象和PHP運行時
但它讓我思考編譯和運行時。
如果我開發了一個綜合的類,它具有相關的屬性,setter和getter以及一系列方法,那麼最終的類可以很容易地運行到幾百行代碼中。
如果我然後使用這個類,(例如)我只調用一個方法沒有整個類被解析&轉換和內存分配前執行?
我有這個權利嗎?當然,程序方法會更有效率(包含內的函數)還是在實際運行時這是可忽略的?
由於所有包含的文件都被解析,並且幾百行代碼並不多,但如果您希望的話,您可以簡單地考慮一些適用於此類函數的靜態輔助方法(如果可能的話)。
結合使用自動加載器,您可以真正地降低質量包括。
實例之前
一類,你總是有:
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)
至於
但它讓我想起了編譯和運行。
我覺得@馬克comment是最中肯:
大多數基於類的系統使用自動加載,只包括類/正在積極要求來處理請求的文件.....
具有單一職責的原子類,從依賴注入容器自動加載將產生少量未使用的代碼。
如果我然後使用這個類,由此(例如)我只調用一個方法沒有整個類得到解析&轉換和內存分配前執行?
冗長的類有時可以分成更小的類,這會限制用於執行單個方法的代碼量。我認爲這裏的關鍵是single responsibility principle,它引發的類將需要他們運行被調用函數所需的最少資源。
你似乎認爲包含包含函數的文件不需要解析和「轉換」或分配內存 –
不,我確實沒有,但它確實更有效地解析和轉換一個函數而不是整個類? – JAMMac
文件被解析/ etc是否包含類或函數....假設你有一個包含20個函數的文件,但只能調用其中一個函數.... PHP仍然解析整個文件,而不僅僅是它的函數預測/猜測當你包含該文件時你將要調用 –