php - 在 PHP 中自动加载类的最佳方式

标签 php spl-autoloader

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

index.php
|---lib
|--|lib|type|class_name.php
|--|lib|size|example_class.php

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

$class_name->getPrivateParam('name');

我在网上看过,但找不到正确的答案 - 任何人都可以帮助我吗?

编辑

感谢您的回复。让我扩展一下我的场景。我正在尝试编写一个 WordPress 插件,它可以放入一个项目中,并通过将一个类放入一个文件夹“功能”中来添加额外的功能,例如,在插件内。永远不会有 1000 个类,一推就可能有 10 个?

我可以编写一个方法来遍历“lib”文件夹的文件夹结构,包括每个类,然后将其分配给一个变量(类名),但我认为这不是一种非常有效的方法但它似乎是实现我需要的最好方法?

最佳答案

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

就像在这个线程中: PHP Autoloading in Namespaces

但是如果你想要一个复杂的解决方法,请看一下 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);
});
?>

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

<?
$example=new NS1\NS2\ExampleClass($exampleConstructParam);
?>

这是你的类(class)(位于/NS1/NS2/ExampleClass.class.php):

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

关于php - 在 PHP 中自动加载类的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806301/

相关文章:

php - PHP是否可以同时解析多个函数?

php - 将 "Sale"产品类别添加到 Woocommerce 中销售的产品

php - 在第二页转发表单中显示输入名称

PHP 自动加载器和命名空间

PHP:如何自动加载接口(interface)和抽象

php - 使用 spl_autoload() 无法加载类

php - Composer 自动加载 - 如何从不同文件夹中获取类、特征、接口(interface)?

php - 你如何使 codeigniter 加入?

php - Zend_Db 子查询

php - 如何使用 spl_autoload() 而不是 __autoload()