在提供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
对于这个问题:
你能给我指一些关于使用静态类方法的利弊的文档吗?