【问题标题】:Underscore in php functionphp函数中的下划线
【发布时间】:2023-07-03 00:08:02
【问题描述】:

PHP 函数名以下划线开头是什么意思?

例如:__construct()

我知道该构造的含义,但我在其他地方看到函数以下划线或双下划线开头,我只是不确定其重要性。

【问题讨论】:

    标签: php double-underscore


    【解决方案1】:

    表示 PHP 隐式调用它。

    它被称为“魔术方法”

    另外,它是两个下划线,而不是一个。

    在此处了解更多信息:PHP Magic Methods

    【讨论】:

    • 啊。 PHP 中的魔法。接下来呢?
    • 我讨厌讨厌讨厌他们选择了“魔法”这个词来代表这个约定。听起来很幼稚/愚蠢。为什么不直接称它们为“钩子”?
    • @Amarghosh 大家都是谁?我个人喜欢它,而且我认识很多喜欢它的人。
    • @Peter Bailey:请参阅 catb.org/jargon/html/M/magic.html 以获得一些解释
    • @Amarghosh 你的意思是每个人都讨厌wordpress,每个人都讨厌magento,每个人都讨厌drupal,codeinginator,cakephp 等等。走出你的房间大声笑我想每个人都讨厌你......(^_〜)
    【解决方案2】:

    在 PHP 中,以两个下划线开头的函数通常具有特殊含义。来自手册:

    PHP 保留所有函数名 以 __ 开头,很神奇。它是 建议您不要使用 PHP 中带 __ 的函数名,除非 你想要一些记录在案的魔法 功能。

    例如 __construct() 是一个特殊的方法,在初始化对象时会自动调用。

    还有:http://php.net/manual/en/language.oop5.magic.php

    【讨论】:

      【解决方案3】:

      还有一种常见的命名“编码风格”,它使用一个初始下划线来表示方法或属性是私有的/受保护的。我认为它很普遍。

      【讨论】:

      • 是的,我在 C# 中使用过这个
      【解决方案4】:

      如其他答案中所述,双下划线用于“魔术”方法。这个想法是用户永远不会故意在方法名称中使用两个下划线,因此冲突的风险很小。我相信它不是单个下划线的原因是,在'private'关键字出现以强制OO隐私之前,单个下划线是过去糟糕的(der)私有方法的流行约定。

      【讨论】:

        【解决方案5】:

        在 codeigniter 中,如果您在控制器中使用下划线启动方法,路由器将知道不允许从 url 访问它。

        【讨论】: