跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问 PHP 中的 self:: 关键字抑制多态是什么意思?
未分類
30 3 月 2021

请问 PHP 中的 self:: 关键字抑制多态是什么意思?

请问 PHP 中的 self:: 关键字抑制多态是什么意思?

資深大佬 : wfdaj 1

看到这样两句代码:

function __construct() {     self::openDatabaseConnection(); }  private function openDatabaseConnection()  {     …… } 

我以为这里的 self:: 是要调用 openDatabaseConnection,但 openDatabaseConnection 不是静态的,而且 vscode 也提示:不应静态调用非静态方法“openDatabaseConnection”。

百度到 self:: 还能抑制多态,指向当前类的成员函数,请问,这是啥意思?

大佬有話說 (11)

  • 資深大佬 : xycc

    https://www.php.net/manual/zh/language.oop5.late-static-bindings.php

  • 資深大佬 : jhdxr

    以最新的 PHP 版本来看,我觉得这就是一个错误的写法。。。没啥技巧可言

  • 主 資深大佬 : wfdaj

    @xycc 感谢回复。文档没怎么看懂,搜索的结果是,用于数据库连接实现单例模式吧。
    @jhdxr 好吧,我并没有看懂为啥要这样写来实现单例模式。-_-”

  • 資深大佬 : Sunyanzi

    顶那段代码毫无疑问的就是个错误 … 不是什么高端写法 …

    至于抑制多态 … 延静绑的文档看不懂的话 … 试试看能不能看懂我下面的代码 …

    我这段代码里完整实现了多态三要素 … 也演示了 self:: 如何抑制多态 …

    说真的 … 讲 OOP 的时候我可喜欢举这种例子了 … 能明白我在写什么就好 … 单例不单例的完全不重要 …

    i.imgur.com/KB0Dvb5.png

  • 主 資深大佬 : wfdaj

    @Sunyanzi 我发的代码在这里: https://github.com/panique/mini3/blob/master/application/Core/Model.php

    start 数有 200 多,是个非常小的框架,难道这会是个非常明显的错误?

  • 主 資深大佬 : wfdaj

    第一版就是 “$this->openDatabaseConnection();“

  • 資深大佬 : Sunyanzi

    @wfdaj 200 多 Star 并不代表作者在这里写对了 … 以那个文件的写法看这里毋庸置疑的应该用 $this-> …

    以及 … 我所指的错误并不代表「这代码不能运行」 … 而是代码显得糙 … 看着让人难受 …

    实际上时至今日 php 还是允许用 self:: 调用非静态方法的 … 这是个历史遗留问题 … 不太好改 …

    但不报错不代表这么写就没问题 … 你确实可以这么写 … 但从结构和美观的角度说 … 你都不应该这么写 …

    说句题外话 … 我一直觉得「编写程序」是个很 Creative 的事情 … 而不是应付过去实现了就完了 …

    虽然当下行业里混日子的程序员占大多数 … 但我还是选择爱惜我的时间 … 认真对待我的每一件作品 …

  • 資深大佬 : ChoateYao

    当你有父类,里面有一个两个方法 A 和 B,其中 A 方法中调用方法 B,self::B()。

    这时候子类,重写了方法 B,并使用子类初始化,并调用方法 A,则子类重写的方法 B 并不会生效。

    类似于 final 关键字声明,很恶心,一不小心就掉坑了。

  • 資深大佬 : mengdodo

    就不该这么写,整的跟奇技淫巧一样,我是看到就会骂的

  • 資深大佬 : sorshion

    php 就应该在大版本中,去除一些过时的语法

  • 主 資深大佬 : wfdaj

    我在看微框架,都是从 github 找星数多,最近有更新的看。

    这个 mini3 一共就 2 个文件,140 行,从来没人就这行提意见吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具