使用名称空间时找不到类

时间:2019-10-13 06:56:47

标签: php wordpress namespaces

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

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

当我将类包含在require_once而不是名称空间中时,不会发生此错误。

我已经在composer的帮助下生成了vendor文件夹,用于定义全局名称空间

这是我的代码

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'));
    }

File directory structure

任何想法,我做错了。

2 个答案:

答案 0 :(得分:0)

正如顶级大师所说,Activate.php的位置应该在inc文件夹内。 第二个问题是您必须在班级之外致电班级。您正在在类本身内部调用FahadPlugin类。

答案 1 :(得分:0)

您的自动装带器无法工作,因为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文件。