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

2024-05-04

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

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

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

$class_name->getPrivateParam('name');

我在网上查了一下,但找不到正确的答案 - 有人可以帮助我吗?

EDIT

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

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


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

就像在这个线程中一样:命名空间中的 PHP 自动加载 https://stackoverflow.com/questions/3642282/php-autloading-in-namespaces

但如果你想要一个复杂的解决方法,请看一下 Symfony 的 autoload 类:https://github.com/symfony/ClassLoader/blob/master/ClassLoader.php 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!";
        }
    }
}
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中自动加载类的最佳方法 的相关文章

随机推荐

  • 用于编译/反编译二进制数据文件的通用实用程序或库?

    我有各种二进制文件格式 我需要将其转储为某种文本格式 编辑然后重新编译 可能是二进制格式的稍微不同的版本 当然 我可以用 C C 编写一堆实用程序代码来完成这种事情 并且可能利用一个库来处理文本方面的事情 XML 或 JSON 或其他 但这
  • mysql 查询中的 golang 切片,带有 where in 子句

    我正在运行以下查询 但只获取第一个 id 值 select from table where table id in 1 2 3 4 5 6 7 9 11 13 14 15 17 and table deleted at is null 我
  • AWS Api Gateway:缺少身份验证令牌

    所以我有一个链接到 lambda 函数的 api 网关的自定义域名设置 如果我这样做的话我就可以正常工作https api domain com something https api domain com something行为符合预期
  • Http Auth 不适用于 PHP

    我使用 Laravel Lumen Shield 扩展进行 Http 身份验证 但是在我的本地计算机上一切都很完美 我只在我们的服务器上遇到了问题 问题是在我提交正确的登录数据后 登录屏幕再次出现 我尝试了不同的登录数据 不同的浏览器 登录
  • 用于列出用户和组的 Python 脚本

    我正在尝试编写一个脚本 在自己的行上输出每个用户及其组 如下所示 user1 group1 user2 group1 user3 group2 user10 group6 etc 我正在为此用 python 编写一个脚本 但想知道如何做到这
  • 在Python中解析制表符分隔的文件

    我正在尝试在 Python 中解析一个制表符分隔的文件 其中与行开头分开的 k 个制表符的数字应该放入第 k 个数组中 除了逐行读取并执行简单解决方案将执行的所有明显处理之外 是否有内置函数可以执行此操作 或者有更好的方法 您可以使用the
  • 动态分配对象数组

    我有一个包含动态分配数组的类 例如 class A int myArray A myArray 0 A int size myArray new int size A Note that as per MikeB s helpful sty
  • Python:安装 numpy 时出现损坏的工具链错误

    我正在使用 Python 2 7 3 并尝试在 Windows 计算机上安装 numpy 包 但收到运行时错误 提示 工具链损坏 无法链接到简单的 C 程序 我读了解决方案here https stackoverflow com quest
  • 如何查找组中第一个非空值? (使用dataset api进行二次排序)

    我正在研究一个代表事件流的数据集 例如从网站跟踪事件时触发 所有事件都有一个时间戳 我们经常遇到的一个用例是尝试查找给定字段的第一个非空值 例如 类似的东西最能让我们到达那里 val eventsDf spark read json jso
  • 在 C# 中追加到空字符串是如何工作的?

    我很惊讶地看到一个字符串被初始化为 null 然后在生产环境中附加一些内容的示例 只是闻起来不对劲 我确信它会抛出空对象异常 但这个大大简化的示例也有效 string sample null sample test sample equal
  • 迁移范围的独特性

    我一直在尝试找到一种方法来实现这一目标 但我找不到任何尝试 即使如此 我想也许我的方法是完全错误的 也就是说 我应该做什么移民如果我希望两个字段的组合是唯一的 请注意 我不希望它们成为索引 而只是数据库字段 例如 对于下面的迁移 我可以单独
  • 如何在vba中向形状添加点或节点?

    I am trying to add points or nodes to a shape so instead of having 4 points I can have more 这是我添加形状的代码 Set shap2 w Shape
  • SQL错误:1054,SQLState:42S22“字段列表”中的未知列错误Java Spring Boot Mysql错误

    基本上我正在尝试制作一个简单的促销页面 我收到的错误是 SQL 错误 1054 SQLState 42S22 错误是 字段列表 中的未知列 promotion0 promo type id 这是模型类 package promotions
  • 单击片段中的按钮不起作用

    我在片段中有一个按钮 对于该按钮 我重写了 onClick 方法 但它不起作用 单击按钮时 我也有一个 Taost 和一个日志 public class DataShown extends Fragment implements OnCli
  • 是否有理由使用 Scala 的 StringLike.replaceAllLiterally 而不是 Java 的 String.replace?

    Scala 的 StringLike 有该方法replaceAllLiterally literal String replacement String String https github com scala scala blob 56
  • ListenableFuture 到 scala Future

    我正在围绕 java 库编写一个小型 scala 包装器 java 库有一个对象 QueryExecutor 公开了 2 个方法 执行 查询 结果 asyncExecute 查询 ListenableFuture 结果 在这种情况下 Lis
  • Spring Data Mongo 无法找到 Enum 的 PersistentEntity

    编辑 我发现了一个相关问题here https stackoverflow com questions 28972455 does spring data mongodb support enums 但仅有的两个答案相互矛盾 并且没有足够的
  • Scikit-learn 具有使用“特征”的自定义评分函数

    我正在尝试使用一种名为 SERA 平方误差相关区域 的新指标作为本文中提到的不平衡回归的自定义评分函数 https link springer com article 10 1007 s10994 020 05900 9 https lin
  • python 命令行应用程序的最佳布局是什么?

    什么是正确的方法 或者我会满足于good方式 布置一个中等复杂度的命令行 python 应用程序 我使用 Paster 创建了一个 Python 项目框架 它为我提供了一些文件 myproj init py MyProj egg info
  • 在 PHP 中自动加载类的最佳方法

    我正在开发一个项目 该项目具有以下文件结构 index php lib lib type class name php lib size example class php 我想自动加载类 class name 和 example clas