较旧的PHP版本中的晚期静态结合

  • 本文关键字:静态 结合 版本 PHP php
  • 更新时间 :
  • 英文 :


考虑以下方案:

interface Validatable {
     static function validate($input);
}
class Field implements Validatable {
     static function validate($input) {
          return $input;
     }
}

然后,我静态地调用该功能:

Field::validate($input);

但是我会收到以下错误:

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

我知道错误的含义:T_PAAMAYIM_NEKUDOTAYIM代表希伯来语中的双结肠,这意味着双结肠是语法错误。但是,我如何称呼静态功能,而没有双结肠?

NOTE :这在PHP版本5.4/5.3中正常工作。问题是版本5.2/5.1。如何在不更新PHP版本的情况下解决问题?

有关接口的文档页面上的评论。看起来您仍在php< = 5.2上,无法访问晚期静态绑定。

解决方法是不要使函数静态:

<?php
interface Validatable {
     function validate();
}
class Field implements Validatable {
    protected $input;
    function __construct($input) {
        $this->input = $input;
    }
     function validate() {
          return $this->input;
     }
}
$field = new Field('input');
var_dump($field->validate());

编辑

如果您必须具有静态方法,则一般的解决方法是使用一种内部方法,该方法使用关键字self

来调用静态方法
<?php
interface Validatable {
     static function validate($input);
}
class Field implements Validatable {
     static function myValidate($input) {
         return self::validate($input);
     }
    static function validate($input) {
        return $input;
    }
}
print_r(Field::myValidate('test'));

我不是100%确定在您的情况下会起作用,但是您可以尝试一下。我能够在http://phptester.net/

上运行。

最新更新