php - 从父级调用覆盖的静态方法

标签 php inheritance visibility

我有两个类(class)。一个 child 和一个 parent 。父级正在从子级调用静态方法(这是子类中覆盖的静态父级方法),我收到一般服务器错误。 当我删除关系(“扩展”部分)时,一切都很好并且没有错误。不知道为什么。不能覆盖静态方法吗?寻找答案,但似乎找不到。

Class Fase {

  public static function getbyId($id) {
   //some stuff
      }
  public function getsomefaseitem($fase_item_id) {
     FaseItem::getbyid($fase_item_id);
    }

}

Class FaseItem extends Fase {

  public static function getbyId($id) {

      }
}

最佳答案

It works for me.


虽然这看起来很奇怪。基应该不知道派生。

也许改用 static:: 并依靠覆盖静态成员函数 — 或“后期静态绑定(bind)”。为此,您需要 PHP 5.3。

<?php
class Fase {
   public static function getbyId($id) {
      echo "Fase::getbyId\n";
   }

   public function getsomefaseitem($fase_item_id) {
      static::getbyid($fase_item_id); // <---
   }
}

class FaseItem extends Fase {

   public static function getbyId($id) {
     echo "FaseItem::getbyId\n";
   }
}


$f = new Fase();
$f->getsomefaseitem(0);
?>

关于php - 从父级调用覆盖的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809191/

相关文章:

asp.net-mvc - ASP.NET MVC SiteMap 提供程序——如何在实际菜单中显示 'hide' 单项

c++ - [[弃用]] + __attribute__ ((visibility ("default"))) 在 GCC 6.2 中

php - PHP 中的 PayFast 支付集成 - 签名错误

php - Laravel 5 包,找不到类

c# 派生自基类 apicontroller - 在基类中,Request 对象为 null

c# - 在任何其他方法调用之前自动调用方法

c# - 从基类创建派生类的实例

types - 通过公共(public)函数公开私有(private)类型

PHP/Mysql 数据库填充的下拉列表吐出索引号而不是字符串值

php - ZEND 框架 fatal error : Uncaught exception 'Zend_Application_Bootstrap_Exception'