接收';未找到类';在另一个PHP文件中创建对象时出现错误消息
我是WordPress和PHP的初学者,我试图通过定义一个用于生成页面的类,将自定义设置选项页面添加到WordPress主题中。当我试图在functions.php文件中创建一个对象来生成页面时,会收到一条错误消息,指出找不到该类 我花了一段时间来寻找解决方案和混乱的代码,但我找不到任何工作。该文件确实存在(我可以在文件资源管理器中的指定位置找到它,并在我的IDE中打开/编辑它)。如果我只是将类文件中的代码直接粘贴到functions.php中,并且删除了类声明和构造函数,那么一切都会正常工作 我正在Windows上运行XAMPP 错误消息:接收';未找到类';在另一个PHP文件中创建对象时出现错误消息,php,wordpress,Php,Wordpress,我是WordPress和PHP的初学者,我试图通过定义一个用于生成页面的类,将自定义设置选项页面添加到WordPress主题中。当我试图在functions.php文件中创建一个对象来生成页面时,会收到一条错误消息,指出找不到该类 我花了一段时间来寻找解决方案和混乱的代码,但我找不到任何工作。该文件确实存在(我可以在文件资源管理器中的指定位置找到它,并在我的IDE中打开/编辑它)。如果我只是将类文件中的代码直接粘贴到functions.php中,并且删除了类声明和构造函数,那么一切都会正常工作
Fatal error: Uncaught Error: Class 'My_Class' not found in C:\xampp\my-path-to-site\my-theme\functions.php
在\my site\functions.php中:
include('/folder/class.my-class.php');
$my_options = new My_Class;
$my_options->__construct();
<?php
include_once('folder/class.my-class.php'); //removed the root bar
//You are waiting for a option in the class, so pass this option
$my_options = new My_Class('some option');
//$my_options->__construct(); //You don't need this here, the constructor is used inside the class.
在\my site\folder\class.my-class.php中:
class My_Class
{
private $options;
function __construct() {
add_action( 'admin_menu', array($this, 'option_add_admin_menu'));
add_action( 'admin_init', array($this, 'option_settings_init'));
}
function option_add_admin_menu( ) {
add_options_page('My Options', 'Options', 'manage_options',
'options', array($this, 'option_options_page');
}
// rest of code that registers settings & fields
}
<?php
class My_Class
{
private $options; //if you want receive a option
function __construct($options) { //You need receive this option here
$this->options = $options; //and atribut it here
//add_action( 'admin_menu', array($this, 'option_add_admin_menu'));
//add_action( 'admin_init', array($this, 'option_settings_init'));
}
function option_add_admin_menu() {
//add_options_page('My Options', 'Options', 'manage_options',
//'options', array($this, 'option_options_page');
}
// rest of code that registers settings & fields
}
编辑:我按照建议将“include():”更改为“require()”,但现在我收到两条不同的错误消息:
Warning: require(/setup/class.my-class.php): failed to open stream: No such file or directory in C:\xampp\htdocs\my-site\wordpress\wp-content\themes\my-theme\functions.php on line 29
Fatal error: require(): Failed opening required '/setup/class.my-class.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\my-site\wordpress\wp-content\themes\my-theme\functions.php on line 29
实际上,您没有正确的路径,
include
将允许您在文件不存在时继续
当包含或需要文件时,如果您提供的路径以/
或\
开头,则PHP将其视为来自当前文件系统根目录的路径。当您提供的路径不是以这些路径中的一个开始时,PHP认为这是一个相对路径,它将根据当前文件所在的位置和它知道的其他目录,尝试猜测要包含哪个文件
要修复此问题,您可能需要执行以下操作:
require_once __DIR__.'/folder/class.my-class.php';
请参阅和上的文档以及
建议:
无论何时包含文件,您都应尽可能使用require\u一次。如果您知道该文件可以多次包含,则可以使用require
。如果该文件由于任何原因不存在,可以省略,则可以使用include\u once
。如果文件可以同时为两个文件,则只应使用include
但是,作为一名经验丰富的程序员,我也可以告诉您,如果您使用include_once
或include
一次,您就做错了,在尝试盲目包含某个文件之前,应该先检查该文件是否存在
此外,我强烈建议始终激活以下代码。这将帮助您在错误有机会真正打破之前抓住它们。或者至少让你更好地理解为什么有些东西坏了
ini_set('display_errors', '1');
error_reporting(-1);
请检查代码中我的注释
在\my site\folder\class.my-class.php中:
class My_Class
{
private $options;
function __construct() {
add_action( 'admin_menu', array($this, 'option_add_admin_menu'));
add_action( 'admin_init', array($this, 'option_settings_init'));
}
function option_add_admin_menu( ) {
add_options_page('My Options', 'Options', 'manage_options',
'options', array($this, 'option_options_page');
}
// rest of code that registers settings & fields
}
<?php
class My_Class
{
private $options; //if you want receive a option
function __construct($options) { //You need receive this option here
$this->options = $options; //and atribut it here
//add_action( 'admin_menu', array($this, 'option_add_admin_menu'));
//add_action( 'admin_init', array($this, 'option_settings_init'));
}
function option_add_admin_menu() {
//add_options_page('My Options', 'Options', 'manage_options',
//'options', array($this, 'option_options_page');
}
// rest of code that registers settings & fields
}
提示:尝试将include('/folder/class.my class.php')
更改为require('/folder/class.my class.php')
我的类的方法选项\u add\u admin\u菜单上有错误。在add_options_page()方法调用的末尾缺少一个“)”。我刚刚尝试了这个。用户不再看到上述错误,但现在有两个不同的错误。”无法打开流:没有这样的文件或目录“和”require():无法打开required“有什么错误?Eduardo Junior-很好的捕获。我加了一个“)”。有关错误消息的内容没有更改。此操作有效,感谢您的帮助!我一定要通读相关文件。