2010-11-03 86 views
1

我有這個問題,真的讓我在每當我在php中設計我的應用程序時都會遇到問題:我不知道我是否應該爲每個函數創建分離文件(例如:用於驗證特定表單的函數)。PHP中每個文件只有一個或多個函數?

好的,人們可能會認爲這沒有任何意義,因爲我必須將每個文件分開包含,這可能導致應用程序更慢。

但我仍然認爲它是有道理的,因爲對於一個頁面載入我懷疑其他函數將被腳本使用,所以它們必須被加載只是爲了什麼?除此之外,如果我設計的系統爲我做了這個dinamically(解析url變量或類似的),也就是說,在需要時加載函數(-files),我不必手動包含每個函數文件。你怎麼看?

回答

1

文件包含的開銷很小,考慮到緩存和其他事情,您不必擔心它。這更多的是關於如何保持自己的組織和快速找到你的東西。老實說,我很少使用函數,我使用類。該規則通常是每個文件都有一個類。但我也有一個工具箱文件,其中包含我所有的全局功能。

+0

「但我也有一個包含我所有全局函數的工具箱文件。」多數民衆贊成在問題,當我混合單獨的文件與工具箱功能,然後我有遠程類取決於他們,它讓我想起... – 2010-11-03 01:06:31

+0

我不知道你。但是我只有一個工具箱文件,並且可能類似... 10個功能,或者更少。只是不值得爲每個例子重新定義'redirect()'。 – netcoder 2010-11-03 01:23:22

2

您是否使用面向對象?如果是這樣,那麼你一定要保持它的每個文件一類,並智能地命名文件...

class Page { 
     ... 
} 

應該像容易找到或classes/Page.phpincludes/Page.class.php類似的地方。

如果你只有一堆全局函數,你應該將它們分組在文件中,例如, includes/functions/general.php

爲了詳細說明,你的functions文件夾可能有...

  • array.php
  • string.php
  • form_validation.php
  • request.php
  • general.php
  • html.php

如果您正在像這樣組織您的文件,更好的辦法是使用一個類並使這些函數保持靜態,例如, string::isAlphaNum($str)。這是一個更好的主意,因爲它僅向您的全局命名空間引入了一個新術語,而不是一堆不必要的術語。

如果你使用PHP 5.3,你也可以看看命名空間。

+0

您可以擴展如何以及爲什麼,確切地說,使用靜態方法和函數是「更好的主意」? – 2010-11-03 00:57:07

+0

嗨亞歷克斯,感謝您的答覆,是的,我使用面向對象。有時我會感到困惑,如果我應該使用命名空間或去靜態。 – 2010-11-03 01:04:05

+0

@Chris,因爲許多功能混亂了全局名稱空間。當然你可以爲你的函數命名空間,但是這需要大量的'use'語句。相關功能應該組織成一個類。需要一個'use'語句(如果使用名稱間隔)。這也使共享靜態變量更容易處理。 – Petah 2010-11-03 01:09:09

0

幾乎可以肯定地看到,通過增加(多)多個文件包含的磁盤I/O讀取而不是具有許多功能的較小文件集,可以顯着提高性能。

對於自動文件包含,將函數包裝到合適的類中,並使用spl_autoload讓PHP處理包含過程。

+0

是的,性能,這是我的關注。我在__callStatic的幫助下創建了一個名爲AutoIncluder的類,因此我可以自動加載函數(例如:AutoLoader :: myFunction())。我知道這是反對優化,但它寫起來很有趣:-) – 2010-11-03 01:01:52

1

您應該確保已安裝APC,xCacheeAccelerator。它們都爲編譯的PHP字節碼提供緩存。

這意味着一旦文件被包含,它將被存儲在內存中,並可以被功能請求使用。不需要包含文件。

+0

謝謝,我會看看它。我對緩存瞭解不多,需要先了解一下。 – 2010-11-03 00:58:55

相關問題