【问题标题】:How do I override a php method in situ如何就地覆盖 php 方法
【发布时间】:2011-04-24 19:19:18
【问题描述】:

如何原位覆盖 php 中的类方法,即不扩展它?

如果可以,我会延长,但我不能。

【问题讨论】:

    标签: php methods overriding


    【解决方案1】:

    你的意思是重载方法?你不能。 PHP 不支持重载。您要么必须在同一个类中创建一个新方法,要么在子类中覆盖它。

    ..或者除了 __call() 和 __callStatic() 方法之外的情况。这些允许您将方法名称和参数作为参数传递。您可以检查方法名称和参数以模拟重载。如果参数不同但方法名相同,则做不同的事情。

    【讨论】:

      【解决方案2】:

      可能已在此question here 中得到回答。简短的回答,您可以使用 PHP 的 runkit 来完成,但它看起来非常过时(即自 2006 年以来没有被触及)并且可能不再工作。

      您最好的选择可能是重命名原始类,然后使用具有原始名称的新类对其进行扩展。那是

      class bad_class { 
          public function some_function {
              return 'bad_value';
          }
      }
      

      变成

      class old_bad_class { 
          public function some_function {
              return 'bad value';
          }
      }        
      
      class bad_class extends old_bad_class { 
          public function some_function {
              return 'good value';
          }
      }
      

      【讨论】:

        【解决方案3】:

        无需扩展,您可以从一个类调用另一个类的方法。但这是一种不好的做法。

        class First
        {
           public function doIt()
           {
              echo 'Done';
           }
        }
        
        class Second
        {
           public function doIt()
           {
              $first = new First;
              $first->doIt();
           }   
        }
        

        【讨论】:

        • 在什么情况下你可以有条件地创建和使用一个新类但不能扩展另一个类?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-23
        • 2012-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        相关资源
        最近更新 更多