property_exists() 检查类方法中是否存在静态属性

我有一个具有静态属性和方法的类。我的方法之一是动态属性抓取器。我想动态地执行此操作,以防止为我想要返回的每个属性提供一个方法。单一方法会更好。


我的问题是该方法返回“未定义的属性”。我在互联网上尝试了各种解决方案,但似乎没有一个适合或有效。


类示例:


class Generic

{

    public static $propA = "A";

    private static $propB = "B";

    protected static $propC = "C";


    public static function getProperty(string $property): string

    {

        if (!property_exists('Generic', $property)) :

            return "Undefined Property";

        endif;


        return self::$$property;

    }

}

用法:


print_r(Generic::getProperty('propA'));

这将返回,就好像该属性不存在一样。事实上,可见性并不重要,因为它们都会返回,就好像它们不存在一样。此外,我知道这在不使用静态变量时有效。我宁愿继续使用静态变量。


呼唤远方
浏览 99回答 1
1回答

BIG阳

从上面更新我的代码以包含命名空间。这是导致该方法返回未定义的问题。更新后的代码如下:class Generic{&nbsp; &nbsp; public static $propA = "A";&nbsp; &nbsp; private static $propB = "B";&nbsp; &nbsp; protected static $propC = "C";&nbsp; &nbsp; public static function getProperty(string $property): string&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (!property_exists('JLDN\Generic', $property)) :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "Undefined Property";&nbsp; &nbsp; &nbsp; &nbsp; endif;&nbsp; &nbsp; &nbsp; &nbsp; return self::$$property;&nbsp; &nbsp; }}foreach (['propA', 'propB', 'propC', 'nonProperty'] as $prop) :&nbsp; &nbsp; printf("<p>Property: %s::%s - %s</p>\n", 'Generic', $prop, print_r(Generic::getProperty($prop), true));endforeach;输出:Property: Generic::propA - AProperty: Generic::propB - BProperty: Generic::propC - CProperty: Generic::nonProp - Undefined Property
打开App,查看更多内容
随时随地看视频慕课网APP