在原始类中调用静态方法

时间:2019-02-04 22:47:25

标签: php

我正在寻找一种替换以下代码中的' This is the table for the groupId DropDownList Column sSql = "SELECT Id, Description FROM [cp].[ec_metadata_subgroup]" Dim ddt As DataTable = mobjGlobals.GetData(sSql, ConfigLookup.ApiKey).Tables(0) ' Call the datatable's extension method Dim vl As ValueList = ddt.ToValueList("Id", "Description") ' And finally use the ValueList property from the column UltraGrid1.DisplayLayout.Bands(0).Columns("groupid").ValueList = vl 的方法:

__NAMESPACE__

通过阅读,我尝试了以下方法:

namespace classes\utility;
class Cleanse
{
    public static function escape($values)
    {
        return is_array($values) ?
                    array_map(__NAMESPACE__.'\Cleanse::escape', $values) :
                    htmlentities($values, ENT_QUOTES, 'UTF-8');
    }
}

但出现此错误:

解析错误:语法错误,意外的“类”(T_CLASS),期望的标识符(T_STRING)或变量(T_VARIABLE)或“ {”或“ $” < br /> 并且它引用了public static function escape($values) { return is_array($values) ? array_map([static::class, 'escape'], $values) : htmlentities($values, ENT_QUOTES, 'UTF-8'); } 行代码。

我正在寻找一种与PHP 5.4.4及更高版本兼容的解决方案,并且很快就会被淘汰。

编辑:由于篇幅太长,我无法在建议的重复帖子中找到答案。因此,我不同意这是重复的发布。

3 个答案:

答案 0 :(得分:3)

由于您已经说过使用PHP 5.4,因此需要使用http://php.net/manual/en/function.get-called-class.php

替换

static::class

使用

get_called_class()

因为在5.5.0版中添加了 static :: class 语法

http://php.net/manual/en/language.oop5.changelog.php

  

5.5.0已添加::: class魔术常数。

答案 1 :(得分:1)

只需使用__METHOD__魔术常数,因为这是一个recallsve调用。

namespace classes\utility;

class Cleanse
{
    public static function escape($values)
    {

        //array_map(__CLASS__.'::escape', $values) :
        //array_map(__CLASS__.'::'.__FUNCTION__, $values) :
        //etc... all work
        return is_array($values) ?
                    array_map(__METHOD__, $values) :
                    htmlentities($values, ENT_QUOTES, 'UTF-8');
    }
}

$C = new Cleanse();
print_r( $C->escape(["foo"]) );

输出

['foo']

Sandbox -注意-您可以在沙箱中更改PHP版本,例如将其更改为5.4

如果您担心覆盖和后期静态绑定,那么无论如何都必须使用get_called_class。但这并不是一个递归调用的问题,就像您覆盖它一样,递归调用仍然是方法,它不会访问该类的任何内部数据。

答案 2 :(得分:0)

<?php
class MyClass {
    const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass';
echo $classname::CONST_VALUE; // As of PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

三个特殊的关键字self,parent和static用于从类定义内部访问属性或方法。

示例#2 ::从类定义内部

<?php
class OtherClass extends MyClass
{
    public static $my_static = 'static var';

    public static function doubleColon() {
        echo parent::CONST_VALUE . "\n";
        echo self::$my_static . "\n";
    }
}

$classname = 'OtherClass';
$classname::doubleColon(); // As of PHP 5.3.0

OtherClass::doubleColon();
?>

http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php