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

旧PHP版本中的后期静态绑定,php,Php,考虑以下场景: interface Validatable { static function validate($input); } class Field implements Validatable { static function validate($input) { return $input; } } 然后,我静态调用该函数: Field::validate($input); 但我得到了以下错误: Parse error: s

考虑以下场景:

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\u NEKUDOTAYIM
在希伯来语中代表双冒号,这意味着双冒号是一个语法错误。但是如果没有双冒号,我怎么调用静态函数呢


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

有关接口,请参见文档页面上的。看起来你还在用PHP,你在用什么版本的PHP?显然,问题并不是你所想的那样。你有没有试过在函数声明中把
public
放在
static
关键字之前?@tas9
:)
你能发布更多的代码吗?您的代码片段对我来说很好(echo Field::validate(1);//displays 1)我理解这一点,但是如果更新PHP版本不是一个选项,我如何解决这个问题?唯一的方法是将调用的函数签名上的类型暗示更改为具体类型(我知道,这不是一个很好的解决方案)。一个更好的解决方案是更改您的最低要求。您能想出另一种方法将此代码段设计为PHP<5.3的“伪”后期静态绑定吗?我看不出这与
后期静态绑定
:它正在调用
静态
方法。。。除了发布的代码在PHP5.x的所有版本中都有效,并且不以任何方式使用后期静态绑定之外,allExcept的情况与此不同(即使使用LSB也没有任何继承。发布的代码是类中的一个简单静态方法。除非Yoav发布一个真实的示例来展示他的问题代码,否则很难帮助他……接口不包含静态方法,它只包含实现该接口的任何类都必须包含一个静态方法的信息帽子的名字和接受的论点
<?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());
<?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'));