PHP命名空间未定义函数
我正在基于Sage WordPress starter主题创建一个主题,并创建了一个新的名称空间来存储我的一些函数(root\Sage\Color\u Scheme) 当我尝试从该名称空间调用函数时,会收到错误消息 对未定义函数的调用 中的root\Sage\Color\u Scheme\custom\u header\u和\u background() C:\xampp\htdocs\wordpress\wp content\themes\slaying\lib\setup.php on 第19行 由于我声明了“use Roots\Sage\Color\u Scheme”,并且该函数肯定在Color\u Scheme.php文件中,我不确定为什么它实际上无法识别该函数。请注意,color_scheme.php是一个带名称空间的函数集合,但不包含声明的类 Setup.phpPHP命名空间未定义函数,php,wordpress,namespaces,runtime-error,Php,Wordpress,Namespaces,Runtime Error,我正在基于Sage WordPress starter主题创建一个主题,并创建了一个新的名称空间来存储我的一些函数(root\Sage\Color\u Scheme) 当我尝试从该名称空间调用函数时,会收到错误消息 对未定义函数的调用 中的root\Sage\Color\u Scheme\custom\u header\u和\u background() C:\xampp\htdocs\wordpress\wp content\themes\slaying\lib\setup.php on 第1
namespace Roots\Sage\Setup;
use Roots\Sage\Assets;
use Roots\Sage\Color_Scheme;
/**
* Theme setup
*/
function setup() {
// Enable features from Soil when plugin is activated
// https://roots.io/plugins/soil/
add_theme_support('soil-clean-up');
add_theme_support('soil-nav-walker');
add_theme_support('soil-nice-search');
add_theme_support('soil-jquery-cdn');
add_theme_support('soil-relative-urls');
Color_Scheme\custom_header_and_background();
...
下面是Color_Scheme.php(位于同一目录中)的相关部分
未定义函数的名称为:
root\Sage\Color\u Scheme\custom\u header\u和\u background()
已定义函数的名称为:
root\Sage\Color\u Scheme\custom\u header\u和\u background()
如图所示,名称本身不是问题,只是缺少定义。这正是你的评论:
color_scheme.php在目录中,但我从未写过一行来包含它。即使使用名称空间和相同的目录,也需要这样做吗
是的。PHP不会自行加载该文件。你需要这样做
PHP只有一种自动加载类的机制,但即使这样,您也需要为其注册一个自动加载程序
对于还不存在自动加载的函数(例如,有一些关于它的讨论),因此在使用之前需要包含函数定义。require\u once
指令和\uuuuuu DIR\uuuu
常量可能会对您的情况有所帮助:
...
require_once __DIR__ . '/color_scheme.php';
Color_Scheme\custom_header_and_background();
...
这样你就可以让它工作了。然后,我强烈建议将require行移到文件的顶部,使其条件更少,您可以更好地看到文件具有哪些依赖项。您的Setup.php是否包含到Color\u Scheme.php的include
。color_scheme.php在目录中,但我从未写过一行来包含它。即使使用名称空间和相同的目录,这也是必要的吗?如果我执行“include'color_scheme.php.”操作,它显然可以工作并识别函数。如果我想从另一个文件访问函数,那么这正是我需要做的。如果你不想在Setup.php
文件中要求一次。您还可以使用Sage的$Sage\u includes=[]
数组将color\u scheme.php
文件包含在functions.php
中。
...
require_once __DIR__ . '/color_scheme.php';
Color_Scheme\custom_header_and_background();
...