考虑以下方案:
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/