我有一个我在Wordpress环境中的主题上创建的课程。
class Theme {
function __construct()
{
add_action('after_setup_theme', array(&$this, 'do_this'));
}
function do_this()
{
require_once('helper_functions.php');
}
}
$theme = new Theme();
在helper_functions.php中我有:
function get_image()
{
return 'working';
}
但现在我感到困惑,因为当我执行这个
时echo $theme->get_image();
它不起作用......但如果我直接调用它就会这样:
echo get_image();
但是我想因为我使用的是类方法,所以我需要使用类对象来获取类方法...为什么我能直接调用它?
答案 0 :(得分:0)
get_image()
不是一种方法。这只是在脚本执行期间可以调用的另一个普通函数。
要使它成为一个方法,你必须在类声明中声明它。
class Theme
{
function __construct()
{
add_action('after_setup_theme', array(&$this, 'do_this'));
}
function do_this()
{
require_once('helper_functions.php');
}
function get_image()
{
return 'working';
}
}
阅读有关对象和类here的更多信息。
答案 1 :(得分:0)
函数get_image()
不是类Theme
中设置的函数,它设置在一个单独的文件中,该文件包含在类中。
如果你想让它成为类的函数,那么你需要在类文件中编写它,将代码移到类中。
替代方案,您可以使用类扩展
class Helper_functions {
public function get_image() {
return "working!";
}
}
将Theme类文件更改为
class Theme extends Helper_functions {
function __construct()
{
add_action('after_setup_theme', array(&$this, 'get_image'));
}
}
$theme = new Theme();
<强>替代强>
既然你说它是几个文件中的几个函数,你可以在Theme类文件或扩展类文件中执行此操作。
class Theme {
...
function get_image() { include('theme_file_get_image.php'); }
function another_function { include('theme_file_another_function.php'); }
}
答案 2 :(得分:0)
this question中的答案总结了你在这里看到的结果:
“包含文件中的代码在与函数相同的范围内执行(定义的函数和类是全局的),未插入其中,替换其他内容。”
因此,包含文件中的函数在全局范围内定义,这就是调用get_image()
的原因。
这相当于:
//Include the helper functions
require_once('helper_functions.php');
class Theme
{
function __construct()
{
add_action('after_setup_theme', array(&$this, 'do_this'));
}
function do_this()
{
get_image();
}
}
$test = new Theme();
echo $test->do_this(); //'working';
请注意,get_image()位于全局分数中,而不是是Theme类的成员函数。
答案 3 :(得分:0)
include和require通常被称为“像复制/粘贴”文件内容到父脚本中,这似乎是你所期待的。但是,它并不是真的正确,这就是为什么你所做的不起作用的原因。
某些语言的编译器宏在解释代码之前会进行文本替换,因此会使用wpork。虽然php没有,但所有include语句都是在运行时进行评估的。在您的情况下,在执行require语句之前完全定义了类。因此,您只需执行定义全局函数的代码。
答案 4 :(得分:0)
您无法拆分类定义。所有这一切都需要一气呵成。如果你的班级太大,也许它有太多的责任。
在函数内部包含文件时,它只存在于该函数的范围内。这意味着你所做的相当于:
public function do_this() {
function get_image() { ... }
}
哪个什么都没做。