【问题标题】:Calling an overriden static method from parent从父级调用重写的静态方法
【发布时间】:2011-10-12 03:48:02
【问题描述】:

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

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) {

      }
}

【问题讨论】:

  • 据我了解 OOP,父类不应该调用它们的子类...
  • “一般服务器错误”没有用。查看错误日志并提供一些实际细节。
  • 我收到以下错误:HTTP 错误 500(内部服务器错误):服务器尝试完成请求时遇到了意外情况。
  • @Martijn:这只是您的浏览器抛出的无用通知。进入您的服务器错误日志以找出 实际 PHP 错误。
  • @Tomalak Geret'Kal 。谢谢,我现在明白了。我查看了 php 错误日志,错误是由在 FaseItem 中设置 'private' __construct() 引起的。

标签: php inheritance visibility


【解决方案1】:

It works for me.


不过,这似乎很奇怪。基础应该没有派生的知识。

也许改用static:: 并依赖于覆盖静态成员函数——或“后期静态绑定”。为此,您需要 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);
?>

【讨论】:

  • 如何确定getbyId方法是否在子类中退出?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多