旧PHP版本中的后期静态绑定

时间:2014-01-31 23:15:11

标签: 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代表希伯来语中的双冒号,这意味着双冒号是语法错误。但是如果没有双冒号,我怎么称呼静态函数?

注意:这在PHP版本5.4 / 5.3中运行良好。问题出在版本5.2 / 5.1上。如何在不更新PHP版本的情况下解决问题?

1 个答案:

答案 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/

运行此功能