Redeclare function (override)

时间:2014-01-29 作者:T.Todua

将以前声明的函数更改为新函数的最佳方法是什么?

例如,已声明:

function smth(){
echo \'aaa\';
}
我希望它不会显示出来aaa, 但是bbb

function smth(){
echo \'bbb\';
}
但是,当我插入新函数(inside functions.php)时,会收到错误消息

(Fatal error: Cannot redeclare **smth()** (previously declared in ... )



更新-我找到了一个解决方案:

https://stackoverflow.com/a/8125517/2165415

3 个回复
SO网友:Otto

PHP无法重新声明函数。您需要使用其他方法,如过滤器或类似方法。

SO网友:gmazzap

PHP不允许重新声明函数。如果您编写原始函数,有很多方法可以让您编写更灵活的函数。

我首先想到的是以传递的参数和过滤器挂钩为条件的。

例1:

function smth( $out = \'a\' ){
  if ( $out === \'a\' ) {
    echo \'aaa\';
  } else {
    echo \'bbb\';
  }
}
之后,第一次打电话

smth();
第二次:

smth(\'b\');
<小时>例2

function smth(){
  echo apply_filters(\'my_smth_filter\', \'aaa\');
}
之后,第一次打电话

smth();
第二次:

add_filter(\'my_smth_filter\', function() {
  return \'bbb\';
});
smth();
如果原始功能是not 它不提供任何过滤器来更改输出,您绝对需要更改该函数的行为,然后查看Patchwork, 一个PHP库,允许您在运行时重新定义用户定义的函数。但是,只有在绝对必要的情况下,才能谨慎使用拼接,因为拼接是用于测试目的,而不是用于生产。

SO网友:Eriks Klotins

我建议使用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

结束

相关推荐

WP_Query in functions.php

我有一些代码要转换成函数。它工作得很好,直到我将其包装到所述函数中: $args = array( \'posts_per_page\' => -1, \'post_type\' => \'asset\', \'category_name\' => $cat ); $cat_query = new WP_Query( $args );