php - 使用命名空间时找不到类
问题描述
我试图通过包含命名空间的类来调用另一个类的函数。但是当我这样做时,我得到一个错误
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'));
}
任何我做错的想法。
解决方案
您的自动加载器无法工作,因为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
推荐阅读
- python - tf.compat.v1.train.exponential_decay:全局步长 = 0
- symfony - Symfony messenger 工作人员在主管下运行时不会停止
- azure-devops - 使用负载均衡器部署到多台服务器
- airflow - Airflow - 只有在另一个 DAG 上的所有任务都成功时才运行 DAG
- python-3.x - 复制没有父文件夹的子文件夹
- javascript - 如何遍历地图并仅获取前几个键值对并将它们传递给另一个函数?
- java - 每当我将文件保存为文件类型 java 时,VS 代码都会打开 .class 文件而不是“.java”文件,并且不会创建 .java 文件
- javascript - 表单提交的时间戳
- python - 如何手动实现 pytorch 卷积的填充
- excel - 根据下拉选择自动填充单元格