IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

PHP抽象静态方法

这一客 2013-10-08 12:24:52 累计浏览 2,523 次
本机暂存

升级PHP到5.4发现开发的程序提示:Static function Dataaccess::get() should not be abstract
查询资料后发现从PHP 5.2开始,不再允许同时使用abstract static 修饰一个抽象类的抽象方法。也就是说,PHP不再支持抽象静态方法,继续使用,将导致E_STRICT错误。
注:E_STRICT指的是自PHP5起引进了新常量 E_STRICT,其值为 2048。它提供了对用户代码的协同性和向前兼容性的运行时 PHP 建议,有助于使用户保持最新和最好的编程风格。例如在使用已过时的函数时 STRICT 信息会提出警告。
例如下面的这段代码:

abstract class Dataaccess
{
       abstract  static function get($params);
}


运行会导致错误:Static function Dataaccess::get() should not be abstract
使用抽象静态方法作用是强制继承该抽象类的子类去实现一个同名静态方法。
在 PHP Manual 中(http://www.php.net/manual/zh/migration52.incompatible.php),有这样一段文字介绍:Dropped abstract static class functions. Due to an oversight, PHP 5.0.x and 5.1.x allowed abstract static functions in classes. As of PHP 5.2.x, only interfaces can have them.
可以得知,我们可以继续使用接口 Interface 来进行子类实现的约束。
改写上面的代码如下:

interface Iget {
    static function get($params);
}
abstract class Dataaccess  implements Iget
{
}

这样我们就达到了继承Dataaccess 的子类也必须要实现Iget中的全部方法,从而保证了子类中必须要实现 Iget() 静态方法。

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,270)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,147)
  5. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,789)
  6. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  7. Redis消息队列的若干实现方式 (累计阅读 12,088)
  8. 到底什么是MVC? (累计阅读 11,866)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)
  10. Rolling cURL: PHP并发最佳实践 (累计阅读 11,488)