【问题标题】:Class not found when using namespace使用命名空间时找不到类
【发布时间】:2020-02-10 03:54:14
【问题描述】:

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

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

任何我做错的想法。

【问题讨论】:

  • Activate.php 文件的路径到底是什么?它应该在您的vendor 目录旁边的inc 文件夹内(或者,从您的aotoload_psr.php 文件所在的角度来看,“../../../inc/Activate.php”)。
  • Activate.php 位于 inc 文件夹内。我已经用文件结构@Top-Master 更新了问题

标签: php wordpress namespaces


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      相关资源
      最近更新 更多