在提供callable/callback 到add_action():
add_action( \'wp_head\', array( \'test_class\', \'greeting_head\' ) );
所以你应该
greeting_head() 您的
test_class 班但你还需要
greeting() 静态方法:
class test_class {
public static function greeting() {
echo \'Howdy! Test is successful!\';
}
public static function greeting_head() {
self::greeting();
}
}
除非使用单例模式,否则需要使用
self 关键字从静态方法访问方法和属性;例如,在上面的代码中,您可以看到我正在使用
self::greeting() 而不是
$this->greeting().
但我不建议使用静态类方法,除非绝对必要,而且您可以保持类的现状&mdash除外,使用$this->greeting() 在greeting_head() 方法;并在提供add_action() 回调:
class test_class {
function greeting() {
echo \'Howdy! Test is successful!\';
}
function greeting_head() {
$this->greeting();
}
}
$test_class = new test_class;
add_action( \'wp_head\', array( $test_class, \'greeting_head\' ) );
这个答案并没有涵盖PHP类的所有内容,但我希望它能帮助您;如果您需要进一步的指导,您可以在堆栈溢出上进行搜索,甚至可以在WordPress堆栈交换上进行搜索……)
更新完整性,
出现此错误是因为您试图访问名为的全局函数greeting 这显然不存在,因为PHP抛出了该错误:
greeting() 未定义。
如何从外部访问iftest_class?“—使用$this 关键词:$this->greeting(), 正如Adnane和我在最初的回答中提到的那样。或使用self::greeting() 正如我在最初的回答中所说的那样。
(Update) “如果从外部test_class“—实际上,正确的问题应该是,“如何访问greeting() 方法,因为您实际上正在调用test_class::greeting() 从…起test_class::greeting_head(). :)
当前问题中的代码将导致以下PHP通知(请参见add_action() 以上注释)
非静态方法test\\u class::greeting\\u head()不应静态调用
此外,如果只使用$this 在您的原件中greeting_head():
未捕获错误:不在对象上下文中时使用$this
对于这个问题:
你能给我指一些关于使用静态类方法的利弊的文档吗?