我有一节课,有一些私人&;公共职能。问题是,我不希望某些函数能够在类的外部调用,所以我希望将它们设置为私有的。但是我需要在特定的钩子上钩住它们,如果它们是私有的,钩子就不能调用它们。是否有一些解决方法?
是否在挂钩上附加私有函数?
4 个回复
SO网友:fuxia
不,那是不可能的。当WordPress调用一个方法时,它必须是公共的。您可以编写一个在钩子上调用的公共方法,钩子在内部调用私有方法<不过我不确定这是否有意义…
SO网友:Adam
这里有一个例子;
add_action( \'template_redirect\', array( \'someClass\', \'init\' ));
class someClass {
protected static $content = \'oh yeah, private!\';
public static function init() {
$class = __CLASS__;
new $class;
}
private function __construct() {
add_filter(\'the_content\', array(&$this, \'get_this_function\'));
}
public static function get_this_function(){
return self::my_funk_she_on();
}
private static function my_funk_she_on(){
return self::$content;
}
}
在此示例中,我正在筛选the_content
通过传递从私有变量获取其值的私有函数。既然你不能直接把这叫做我的get_this_function
是将返回私有内容的内容,这是我传递给构造函数的内容,该构造函数在template_redirect
.顺便说一下,您不需要使用静态方法,有些人建议不要使用静态方法,但请随意使用。
SO网友:Pirate of KGP
通常,钩子在类之外执行。它已在类或类方法内调用。所以你不能把它用在钩子里。如果强制执行,则必须首先在公共方法内实例化,然后将公共方法用于任何挂钩。示例:
<?php
class tlSmAdminMenu{
public function __construct(){
add_action(\'admin_menu\', array( $this, \'add_menu_page\'));
}
public function add_menu_page(){
add_menu_page(\'Themelines Plugin\', \'TL Social Monster\', \'manage_options\', \'tl_social_monster\', array( $this, \'admin_menu_cb\'), \'
dashicons-networking\', 110);
}
public function admin_menu_cb(){
$this->doStaff();
}
private function doStaff(){
echo "<center><h1>THEMELINES SOCIAL MONSTER</h1></center>";
}
}
if(class_exists(\'tlSmAdminMenu\')){
$tl_sm_obj= new tlSmAdminMenu();
}
?>
SO网友:Alexander K.
对于PHP 5.4或更高版本,可以使用闭包和bindTo()
方法:
$cb = function(){
$this->callPrivateMethod();
};
$cb->bindTo($this);
add_action(\'init\', $cb);
上述代码在类的范围内执行,因此$this
是有效值。结束