首页 > 解决方案 > 使用命名空间时找不到类

问题描述

我试图通过包含命名空间的类来调用另一个类的函数。但是当我这样做时,我得到一个错误

Fatal error: Uncaught Error: Class 'inc\Activate' not found 

当我使用 require_once 而不是命名空间包含类时,不会发生此错误。

我在作曲家的帮助下生成了供应商文件夹以定义全局命名空间

这是我的代码

aotoload_psr.php

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'inc\\' => array($baseDir . '/inc'),
);

Activate.php(要包含的类)

namespace inc;

class Activate
{
    public static function activate()
    {
        flush_rewrite_rules();
    }
}

fahad-plugin.php(包含类)

use inc\Activate;
class FahadPlugin
    {
        function activate()
        {
            Activate::activate();
        }

        $fp = new FahadPlugin();
        register_activation_hook(__FILE__, array($fp, 'activate'));
    }

文件目录结构

任何我做错的想法。

标签: phpwordpressnamespaces

解决方案


您的自动加载器无法工作,因为WordPress永远不会激活它;

在您的文件中导入它fahad-plugin.php应该可以修复它,如下所示:

<?php
/**
 * @wordpress-plugin
 * Plugin Name: Fahad-plugin
 * Description: Your plugin description
 * Version:     1.0
 * Author:      Fahad Shaikh
 * Author URI:  https://example.com
*/

require_once __DIR__ . '/vendor/autoload.php';

use inc\Activate;

class FahadPlugin {
  function activate() {
    Activate::activate();
  }
}

$fp = new FahadPlugin();
register_activation_hook(__FILE__, array($fp, 'activate'));

注意: 如果没有与您的插件同名的文件,则WordPress加载该文件。bootstrap.php


推荐阅读