我试图通过将类包含名称空间来调用另一个类的函数。但是当我这样做时,我会得到一个错误
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'));
}
任何想法,我做错了。
答案 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
文件。