6

我的网站很大,我不使用 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 中有单词 forums,我会加载 forums 函数文件,但这并不总是有效,因为与论坛相关的文件在 URL 中没有单词 forum .

在我学会编写足够好的 OO 代码以将我的所有函数放入类之前,我是否几乎没有选择?

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

1 回答 1

8

老实说,我认为您不能以直接的方式进行。无论如何,使用实用程序类不是更好吗?OOP 什么都没有,看这个:

<?php
    class HTMLUtil {

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

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

将类成员或方法声明为静态使它们无需实例化即可访问。

现在您可以使用__autoload. 您不必实例化这些类来使用它们的任何静态函数,它使您的代码更具可读性(如果稍微冗长一些)。我总是觉得做这样的事情更令人满意:

echo HTMLUtil::filter($str);

代替:

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

如果需要,您还可以在实用程序类中声明一个私有构造函数以防止它们被实例化,以强调它们的“只是一堆相关函数”:

private __construct() {...}

要从同一个类中的另一个函数调用静态函数,您可以使用self关键字(它引用同一个class,而不是objectclass instance):

public static function foo()
{
    echo self::bar() . '..and some foo';
}
于 2009-09-08T02:01:16.207 回答