PHP中自动加载类的最佳方法

Sjw*_*ies 21 php spl-autoloader

我正在开发一个项目,我有以下文件结构:

index.php
|---lib
|--|lib|type|class_name.php
|--|lib|size|example_class.php
Run Code Online (Sandbox Code Playgroud)

我想自动加载类,class_name和example_class(命名与PHP类相同),所以在index.php中类已经被实例化,所以我可以这样做:

$class_name->getPrivateParam('name');
Run Code Online (Sandbox Code Playgroud)

我已经看过网了但是找不到合适的答案 - 任何人都可以帮帮我吗?

编辑

谢谢你的回复.让我扩展我的方案.我正在尝试编写一个WordPress插件,可以将其放入项目中,并通过将类放入文件夹"功能"(例如插件内部)来添加其他功能.永远不会有1000个班级,推动可能10个?

我可以编写一个方法来迭代'lib'文件夹的文件夹结构,包括每个类然后将它分配给一个变量(类名),但不认为这是一个非常有效的方法,但它也许这似乎是达到我需要的最佳方式?

Ser*_*nov 31

如果您需要自动加载类,请使用SPL自动加载的名称空间和类名约定,这将节省您的重构时间.当然,您需要将每个类实例化为一个对象.谢谢.

就像在这个线程中: 在命名空间中进行PHP自动加载

但是如果你想要一个复杂的解决方法,请看一下Symfony的自动加载类:https: //github.com/symfony/ClassLoader/blob/master/ClassLoader.php

或者像这样(我在我的一个项目中做过):

<?
spl_autoload_register(function($className)
{
    $namespace=str_replace("\\","/",__NAMESPACE__);
    $className=str_replace("\\","/",$className);
    $class=CORE_PATH."/classes/".(empty($namespace)?"":$namespace."/")."{$className}.class.php";
    include_once($class);
});
?>
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样实例化你的类:

<?
$example=new NS1\NS2\ExampleClass($exampleConstructParam);
?>
Run Code Online (Sandbox Code Playgroud)

这是你的类(在/NS1/NS2/ExampleClass.class.php中找到):

<?
namespace NS1\NS2
{
    class Symbols extends \DB\Table
    {
        public function __construct($param)
        {
            echo "hello!";
        }
    }
}
?>
Run Code Online (Sandbox Code Playgroud)


lil*_*ase 10

如果您可以访问命令行,可以在classMap部分中使用composer尝试使用以下内容:

{
    "autoload": {
        "classmap": ["yourpath/", "anotherpath/"]
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你有一个wordpress插件来启用wordpress cli中的作曲家:http://wordpress.org/plugins/composer/