PHP 中的自动加载器 - 一次运行两个

2024-02-12

我了解如何注册自动加载器,甚至如何创建自动加载器,这根本不是问题。主要问题是 - 如何让两个自动装载机并排运行以执行以下操作:

class project_one_folder_class extends project_two_folder_class{}

您会注意到,子类属于一个项目,该项目正在伸出并调用位于不同项目中的父类。

项目链接的方式项目二的类总是可以被自动加载器看到,但是项目二的类却永远不会被看到。

所以我的想法是编写两个自动加载器并注册它们,因为 php 会查看另一个。 php 似乎只查找其中一个而不查找另一个。

你会如何解决这个问题?

Edit

项目二是父项目,项目一是子项目。这是一个更扩展的问题在这个问题上发布了什么 https://stackoverflow.com/questions/15532069/wordpress-child-themes-and-php-autoload.

为了更好的拓展这就是我的班级。

class AisisCore_Loader_AutoLoader{

    protected static $_instance;

    public function get_instance(){
        if(null == self::$_instance){
            self::$_instance = new self();
        }

        return self::$_instance;
    }

    public function reset_instance(){
        self::$_instance = null;
    }

    public function register_auto_loader(){
        spl_autoload_register(array($this, 'load_class'));
        spl_autoload_register(array($this, 'load_child_class'));
    }

    public function load_class($class){
        $path = str_replace('_', '/', $class);
        if(file_exists(get_template_directory() . '/' . $path . '.php')){
            require_once(get_template_directory() . '/' . $path . '.php');
        }
    }

    public function load_child_class($class){
        $path = str_replace('_', '/', $class);
        if(file_exists(get_stylesheet_directory() . '/' . $path . '.php')){
            require_once(get_stylesheet_directory() . '/' . $path . '.php');
        }
    }   
}

目前,此类将加载父项目中的任何内容。它甚至会在子项目中加载父项目对象。然而,由于找不到此类,因此无法使用此类加载子对象。

熟悉 WordPress 的人会立即说,是的,因为你有get_template_directory当你想要的时候get_stylesheet_directory然而 - 知道这一点 - 我想编写两个自动加载器,一个将使用加载子项目对象get_stylesheet_directory然后将通过加载父对象get_stylesheet_directory以便:

class project_one_folder_class extends project_two_folder_class{}

工作和加载,没有错误。


这有点粗糙,但实际上您只需要一个自动加载器来检查多个目录:

abstract class Hakre_Theme_AutoLoader
{
    public static $directories;

    public static function init()
    {
        // configure paths
        self::$directories = array(
            get_template_directory(), // current theme, parent in case of childtheme
            get_stylesheet_directory(), // current theme, child in case of childtheme
        );

        // please double check if you really need to prepend
        return spl_autoload_register('Hakre_Theme_AutoLoader::autoload', true, true);
    }

    public static function autoload($class)
    {
        $filename = str_replace('_', '/', $class) . '.php';

        foreach (self::$directories as $directory) {
            $path = $directory . '/' . $filename;
            if (is_file($path)) {
                require($path);
                return; # leave because the class has been loaded
            }
        }
    }
}


Hakre_Theme_AutoLoader::init();

## If you're unsure all worked out properly:
var_dump(Hakre_Theme_AutoLoader::$directories);

这实际上应该可以做到,但我还没有测试过。请参阅var_dump,您可以调试是否注册了正确的目录。不需要仅仅因为您想签入两个目录而进行多个回调。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的自动加载器 - 一次运行两个 的相关文章

随机推荐

  • 有谁发现这个程序有什么问题吗

    在没有得到我喜欢的答案后这个关于 chroot 的问题 https stackoverflow com questions 3737008 how run in a chroot jail not as root and without s
  • 性能方面,按位运算符与普通模数的速度有多快?

    是否在正常流程或条件语句中使用按位运算 例如for if等可以提高整体性能 在可能的情况下使用它们会更好吗 例如 if i 1 vs if i 2 除非您使用的是古老的编译器 否则它已经可以自行处理这种级别的转换 也就是说 现代编译器可以并
  • NetBeans。连接到托管数据库

    我有共享主机上的数据库 是否可以从 NetBeans 连接到该数据库 是的 有条件的话是可以的 允许从外部访问您的数据库 这通常通过将主机设置为 关于数据库配置 要查看是否允许 您需要查看数据库管理面板和 或询问您的托管提供商 因为 不同的
  • 跟踪用户活动的 Gem [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个好的 gem 来跟踪 记录网站上的用户活动 例如 当他们登录 注销或执行更改网站上某些内容的操
  • ABRecordCopyValue 返回 0 ?

    我想做的是获取所有联系人并依赖 如果联系人有 社会档案财产或没有 在获得所有这些联系人之后社会档案财产我会做简单的过滤来知道是否是脸书 推特 在我发布这个问题之前 我花了一整天的时间试图找到这个问题的解决方案 但它允许返回0 ABAddre
  • 依赖关系保留

    因此 我正在查看我的数据库笔记和材料 试图让自己了解即将到来的采访的一般概念和术语 然而 我陷入了依赖和无损连接分解的困境 我到处搜索并看到很多数学方程 但我正在寻找简单明了的英语答案或例子 我找到了一个来自http www cs kent
  • 如何使用纯 CSS 和 HTML 叠加图像/水印

    有没有一种简单的方法可以通过相对定位将透明 PNG 或任何其他图像 覆盖在带有 CSS 的图像标签上 只需传递一个类 img class watermarked src http placehold it 500x325 jpg alt P
  • C# 如何知道给定路径是否代表根驱动器?

    我如何知道给定目录是否是根驱动器 除了检查其路径是否等于 A B C 等 检查 DirectoryInfo Parent 是否为空 DirectoryInfo d new DirectoryInfo if d Parent null IsR
  • 为 LINQ/Lambda 创建 OrderBy 表达式

    我正在创建一个使用 Lambda LINQ 进行动态 where 和 orderby 的概念验证 以下代码适用于 where 表达式 但我不知道如何创建 order by 表达式 对于这个例子 如果可能的话我想保持简单 我宁愿不编写修改表达
  • 在自定义类中注入 Laravel 5.1“Illuminate\Http\Request”?

    这是我的简单应用 库 Gelocation php class namespace App Libraries use Location use Illuminate Http Request class GeoLocation publi
  • 如何使用 pyautogui 处理图像

    我想知道是否可以这样做pyautogui locateOnScreen 对于完整的文件夹 我的意思是一个包含 20 个不同图像的文件夹 并在屏幕上找到它们 是否可以做pyautogui 否则你会怎么做 到目前为止 这是我的代码 from p
  • 让 git 阻止修改推送的提交

    是否可以让 git 检查远程分支prepare commit msg挂钩并查看当前提交是否是修改 如果是 则中止提交 这样可以确保您无法修改已经推送的提交 这会很方便 没有办法阻止某人做git commit amend在他们自己的机器上 但
  • qtconsole 不将 pandas 数据帧渲染为 html notebook_repr_html 选项

    我最近升级了 pandas 的版本 我现在安装了最新的稳定版本 pd version Out 5 0 10 1 在此升级之前 这就是数据帧在 qtconsole shell 中显示的方式 这不是我的屏幕截图 只是我在网上找到的屏幕截图 最新
  • 如何恢复 Android 应用程序的默认区域设置

    我有这个 Android 应用程序 已本地化为多种语言 如果存在适合设备区域设置的字符串 应用程序会自动显示它 到目前为止 一切都很好 接下来 我想允许应用程序的用户切换到我提供的其中一种语言 我可以通过覆盖默认区域设置来做到这一点 这里也
  • 如何知道 Xcode 中是否触摸了 .png 的唯一可见区域

    我已将 png 图像导入到UIImageView在 Xcode 中 我想要做的是当触摸图像时 它将被隐藏 但我的问题是 png 图像包含透明部分 当我触摸透明部分时 动作会继续 我希望仅当图像的可见部分被触摸时动作才继续 如何解决问题 Sw
  • 在 CSP 中不使用“unsafe-eval”的 Vuejs 浏览器扩展

    我使用 Vuejs 构建了一个浏览器插件 并使用 Laravel Mix 作为我的构建过程 我的所有 vue 模板都在单个文件组件中 一切都工作得很好 直到我从插件清单中的 CSP 中删除 unsafe eval 火狐浏览器显示错误 Con
  • 从 Lua 中的(最简单的)函数直接返回表条目

    我想编写最简单的函数 让我在无名表中返回所需的值 并且 ideally 它应该是这样的 function RL MyTool Version n return 0 4 0 20221003 0230 13 5 5 n end 但是 当然 这
  • 在 HTML/CSS 中创建列的最佳方法

    我正在寻找一种显示 3 列内容的方法 我找到了一种显示环绕列的方法 但我不希望在该页面上使用这种方法 我正在寻找一种方式来表达
  • 导入错误:Mac 上没有名为 lxml 的模块

    我在运行 Python 脚本时遇到问题 它显示以下消息 ImportError No module named lxml 我想我必须安装一些名为 lxml 的东西 但我确实是 Python 的新手 对此我并没有太多的想法 根据我在其他线程中
  • PHP 中的自动加载器 - 一次运行两个

    我了解如何注册自动加载器 甚至如何创建自动加载器 这根本不是问题 主要问题是 如何让两个自动装载机并排运行以执行以下操作 class project one folder class extends project two folder c