2009-09-08 16 views
6

我的網站是相當大的,我不使用PHP類,我不明白OO足夠好,但重新編寫我的網站使用它們,但我真的很喜歡使用類使用__autoload($ class_name)功能。我靠,功能很多,我有不同的功能文件,
forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.php我可以在PHP中自動加載沒有類的函數文件嗎?

所有這些文件只是特定於網站某一部分的功能,general.inc.php除了需要在以前的頁面上才能使用。

現在有無論如何我可以使用自動加載或做類似的東西來加載這些功能文件?我曾經想過基於URL來做這件事,就像網址中有詞論壇一樣,我會加載論壇功能文件,但這並不總是有效的,因爲以前與論壇相關的文件在那裏沒有URL論壇URL 。

我的選擇很多,直到我學會編寫OO,足以將所有函數放入類中爲止?

//example of the autoload 
function __autoload($class_name){ 
    include('classes/' . $class_name . '.class.php'); 
} 
$time = new time(); 
$time->fn1(); 

回答

8

我不認爲你可以,說實話,不是直接的方式。無論如何,使用實用程序類不是更好嗎?沒有什麼對OOP,看看這樣的:將相關的功能

<?php 
    class HTMLUtil { 

     public static function filter($str) {...} 
     public static function entities($str) {...} 
     public static function encode($str) {...} 
     ...etc... 
    } 
?> 

靜態輔助/工具類是簡單的放在一起,只是聲明你的功能static

聲明類成員或方法爲 靜態使它們可以訪問,而不需要 需要類的實例化。

現在您可以使用__autoload。您不必實例化這些類以使用它們的任何靜態函數,並且它使您的代碼更具可讀性(如果稍微冗長)。我總是覺得它更令人滿意的做一些事情,如:

echo HTMLUtil::filter($str); 

代替:

echo filter($str); //scary filter function, where are you from? 

如果需要的話,你還可以定義你的實用工具類私有構造以防止它們被實例化,以強調的是他們的「只是一堆相關的功能」:

private __construct() {...} 

從另一個函數調用靜態函數在同一個類中,你會做這樣用self關鍵字(引用同一,而不是對象類的實例):

public static function foo() 
{ 
    echo self::bar() . '..and some foo'; 
} 
+0

我喜歡這樣,我不知道我可以「包裝」他們進入一類,但是沒有知道調用它們的所有奇妙的方法,所以我可以像現在一樣使用函數,只需包含類名和函數名之間的類名就可以了。 – JasonDavis 2009-09-08 02:07:43

+0

2)另外一個包裝在1類中的函數可以從任何頁面調用,但也可以在另一個類中的另一個函數內調用?就像現在很多我的函數在其中使用其他函數一樣,所以如果一個DB類中的函數被用戶類調用,那麼它仍然可以工作?感謝您的幫助 – JasonDavis 2009-09-08 02:10:11

+0

@jasondavis - 是的,SomeClass :: functionName($ param)是你如何調用一個靜態函數。 – karim79 2009-09-08 02:10:21

相關問題