PHP类中的常量和“static”关键字 - php

请考虑以下代码:

    class App {

        const ALERT_ERROR=1;
        const ALERT_WARN=2;
        const ALERT_INFO=3;

        public static function alert($title,$type=ALERT_ERROR) {        
            switch ($type){
                default:                
                case static::ALERT_ERROR:
                    $class="alert-danger"; break;
                case static::ALERT_WARN:
                    $class="alert-warning"; break;
                case static::ALERT_INFO:
                    $class="alert-info"; break;
            }
            ...
        }
    }

开关内部的static::constant语法有些麻烦。我在一些PHP网络服务器上将其识别为其他服务器中的正确值(在const ALERT_ERROR中定义),因此我必须删除static::前缀并仅保留常量名称。但是通过这种方式,第一个网络服务器无法工作...

第一个php版本是5.4.7,第二个是5.4.37 ...但是我不认为这是版本问题。

问题是,如果我运行以下代码:

App::alert("test",App::ALERT_INFO);

$ class默认设置为“警告危险”,并且App :: ALERT_INFO常量无法识别。如果添加static ::前缀,则常量将从一个Web服务器识别,而不是从另一个Web服务器识别,反之,如果我删除它,则相反。

引发的通知是:使用未定义的常量ALERT_ERROR-假定为'ALERT_ERROR'

答案后编辑

问题不在于开关情况,而在于默认参数。这被假定为“ ALERT_ERROR”字符串,因此仅获得默认开关。

参考方案

您必须将static关键字添加到用作默认值的常量中。

public static function alert($title, $type=static::ALERT_ERROR) {
  // ....
}

但是static仅在运行时确定。因此,如果确实需要static行为,则:

public static function alert($title, $type=null) {
  if ($type === null) {
      $type = static::ALERT_ERROR;
  }
  // ...
}

如果确实不需要静态,则将所有static::替换为self::

   public static function alert($title, $type=self::ALERT_ERROR) {        
    switch ($type){
        default:                
        case self::ALERT_ERROR:
            $class="alert-danger"; break;
        case self::ALERT_WARN:
            $class="alert-warning"; break;
        case self::ALERT_INFO:
            $class="alert-info"; break;
    }
    ....
}

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP:获取调用引用的数组名称 - php

假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP-MySQL结果转换为JSON - php

我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…