我可以在没有PHP的类中自动加载函数文件吗?

时间:2009-09-08 01:40:59

标签: php class autoload

我的网站非常大,我不使用PHP类,我不明白OO足够好重新编写我的网站使用它们但是我真的很想使用它 类使用的__autoload($ class_name)功能。我很依赖功能,我有不同的功能文件,
forums.inc.php
blogs.inc.php
user.inc.php
photos.inc.php
general.inc.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();

1 个答案:

答案 0 :(得分:8)

说实话,我认为你不能以一种直截了当的方式。无论如何,使用实用程序类不是更好吗? OOP没什么,看看这个:

<?php
    class HTMLUtil {

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

将相关功能组合在一起的Static Helper / Utility类很容易组合在一起,只需将您的函数声明为static

  

将类成员或方法声明为   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';
}