【问题标题】:PHP OO overwrite const through extending [closed]PHP OO通过扩展覆盖const [关闭]
【发布时间】:2013-06-03 07:47:58
【问题描述】:

我有一件奇怪的事情:

<?php
    class LW_Base{
        const MULTIPLE = 'LW_Base';

        public static function name(){
            return strtolower(static::MULTIPLE);
        }
    }

    class LW_Extend extends LW_Base{
        const MULTITPLE = 'LW_Extend';
    }

    $t = new LW_Extend();

    echo $t::name().'==LW_Extend';
?>

这是一个真正精简的代码片段(350 行 - NCLOC)PHP 项目。 输出应该是“lw_extend==LW_Extend”,但实际上是“lw_base==LW_Extend”。

我发誓:在另一个更大的项目(1155 行 - NCLOC)中,更复杂的(命名空间、类层次结构、许多功能......)这是有效的。

问题:我做错了什么/不稳定?如果某事工作一次,它必须工作两次。

请:我确实需要一个信息。我正在寻找一个星期。我认为解决方案必须简单,因为它适用于另一个项目(我实际上无法粘贴有关该其他项目的信息,抱歉)

问候,并感谢您的每一次发帖, 奥利

【问题讨论】:

  • MULTITPLE != MULTIPLE

标签: php class oop constants extends


【解决方案1】:

2 个类的 const 声明的拼写错误,

const MULTIPLE = 'LW_Base';

const MULTITPLE = 'LW_Extend';

您必须调用与 self

相同的常量
    class LW_Base{
        const MULTIPLE = 'LW_Base';

        public static function name(){
            return strtolower(self::MULTIPLE);
        }
    }

【讨论】:

  • OH NOOOOOOOOOOOOO :) 谢谢 :) 哈哈...注意:在我写到这里之前,我确实咨询了我的另外两个朋友,也是优秀的 PHP 开发人员 ^^ 再次感谢 :) 它有效
猜你喜欢
  • 2018-08-29
  • 2015-08-10
  • 1970-01-01
  • 2011-08-21
  • 2021-01-19
  • 2014-07-21
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
相关资源
最近更新 更多