首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中自动加载类的最佳方法

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

Stack Overflow用户
提问于 2013-07-23 17:24:51
回答 5查看 80.1K关注 0票数 26

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

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插件,可以将其放入项目中,并通过将类拖放到文件夹“functionality”中来添加额外的功能。永远不会有1000个类,一下子可能会有10个?

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

EN

回答 5

Stack Overflow用户

发布于 2013-07-23 17:27:23

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

就像这个帖子里的:PHP Autoloading in Namespaces

但如果您想要一个复杂的变通方法,请查看Symfony的autoload类: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);
?>

下面是您的类(位于/ns1/ns2/ExampleClass.class.php中):

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

Stack Overflow用户

发布于 2013-07-23 17:49:21

如果您有访问命令行的权限,可以使用classMap部分中的composer进行尝试,如下所示:

{
    "autoload": {
        "classmap": ["yourpath/", "anotherpath/"]
    }
}

然后你就有了一个wordpress插件来在wordpress cli:http://wordpress.org/plugins/composer/中启用composer

票数 12
EN

Stack Overflow用户

发布于 2013-07-23 17:27:31

http://php.net/manual/de/function.spl-autoload-register.php

spl_autoload_register(function ($class) {
    @require_once('lib/type/' . $class . '.php');   
    @require_once('lib/size/' . $class . '.php');
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17806301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档