考虑以下情况:
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
代表希伯来语中的双冒号,这意味着双冒号是语法错误。但是如果没有双冒号,我怎么称呼静态函数?
注意:这在PHP版本5.4 / 5.3中运行良好。问题出在版本5.2 / 5.1上。如何在不更新PHP版本的情况下解决问题?
答案 0 :(得分:1)
请参阅文档页面上的this comment了解接口。看起来你仍然在PHP< = 5.2并且无法访问Late Static Binding。
解决方法是不要将函数设为静态:
<?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'));
我不是百分百肯定这会对你的情况有效,但你可以尝试一下。我能够在http://phptester.net/
运行此功能