Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP命名空间未定义函数_Php_Wordpress_Namespaces_Runtime Error - Fatal编程技术网

PHP命名空间未定义函数

PHP命名空间未定义函数,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

我正在基于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.php

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();
...