Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.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 - Fatal编程技术网

接收';未找到类';在另一个PHP文件中创建对象时出现错误消息

接收';未找到类';在另一个PHP文件中创建对象时出现错误消息,php,wordpress,Php,Wordpress,我是WordPress和PHP的初学者,我试图通过定义一个用于生成页面的类,将自定义设置选项页面添加到WordPress主题中。当我试图在functions.php文件中创建一个对象来生成页面时,会收到一条错误消息,指出找不到该类 我花了一段时间来寻找解决方案和混乱的代码,但我找不到任何工作。该文件确实存在(我可以在文件资源管理器中的指定位置找到它,并在我的IDE中打开/编辑它)。如果我只是将类文件中的代码直接粘贴到functions.php中,并且删除了类声明和构造函数,那么一切都会正常工作

我是WordPress和PHP的初学者,我试图通过定义一个用于生成页面的类,将自定义设置选项页面添加到WordPress主题中。当我试图在functions.php文件中创建一个对象来生成页面时,会收到一条错误消息,指出找不到该类

我花了一段时间来寻找解决方案和混乱的代码,但我找不到任何工作。该文件确实存在(我可以在文件资源管理器中的指定位置找到它,并在我的IDE中打开/编辑它)。如果我只是将类文件中的代码直接粘贴到functions.php中,并且删除了类声明和构造函数,那么一切都会正常工作

我正在Windows上运行XAMPP

错误消息:

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-很好的捕获。我加了一个“)”。有关错误消息的内容没有更改。此操作有效,感谢您的帮助!我一定要通读相关文件。