将以前声明的函数更改为新函数的最佳方法是什么?
例如,已声明:
function smth(){
echo \'aaa\';
}
我希望它不会显示出来aaa, 但是bbbfunction smth(){
echo \'bbb\';
}
但是,当我插入新函数(inside functions.php)时,会收到错误消息(Fatal error: Cannot redeclare **smth()** (previously declared in ... )
将以前声明的函数更改为新函数的最佳方法是什么?
例如,已声明:
function smth(){
echo \'aaa\';
}
我希望它不会显示出来aaa, 但是bbbfunction smth(){
echo \'bbb\';
}
但是,当我插入新函数(inside functions.php)时,会收到错误消息(Fatal error: Cannot redeclare **smth()** (previously declared in ... )
PHP无法重新声明函数。您需要使用其他方法,如过滤器或类似方法。
PHP不允许重新声明函数。如果您编写原始函数,有很多方法可以让您编写更灵活的函数。
我首先想到的是以传递的参数和过滤器挂钩为条件的。
例1:
function smth( $out = \'a\' ){
if ( $out === \'a\' ) {
echo \'aaa\';
} else {
echo \'bbb\';
}
}
之后,第一次打电话smth();
第二次:smth(\'b\');
<小时>例2function smth(){
echo apply_filters(\'my_smth_filter\', \'aaa\');
}
之后,第一次打电话smth();
第二次:add_filter(\'my_smth_filter\', function() {
return \'bbb\';
});
smth();
如果原始功能是not 它不提供任何过滤器来更改输出,您绝对需要更改该函数的行为,然后查看Patchwork, 一个PHP库,允许您在运行时重新定义用户定义的函数。但是,只有在绝对必要的情况下,才能谨慎使用拼接,因为拼接是用于测试目的,而不是用于生产。我建议使用OOP方法,例如:
class SomeClass
{
public function aa()
{
echo \'aa\';
}
}
class SomeOtherClass extends SomeClass
{
public function aa()
{
return \'bb\';
}
}
$a = new SomeClass();
$a->aa(); // outputs aa
$b = new SomeOtherClass();
$b->aa(); // outputs bb
我有一些代码要转换成函数。它工作得很好,直到我将其包装到所述函数中: $args = array( \'posts_per_page\' => -1, \'post_type\' => \'asset\', \'category_name\' => $cat ); $cat_query = new WP_Query( $args );