为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
呼唤远方 2023-08-06 15:34:31
我有一个具有静态属性和方法的类。我的方法之一是动态属性抓取器。我想动态地执行此操作,以防止为我想要返回的每个属性提供一个方法。单一方法会更好。我的问题是该方法返回“未定义的属性”。我在互联网上尝试了各种解决方案,但似乎没有一个适合或有效。类示例: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'));这将返回,就好像该属性不存在一样。事实上,可见性并不重要,因为它们都会返回,就好像它们不存在一样。此外,我知道这在不使用静态变量时有效。我宁愿继续使用静态变量。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

从上面更新我的代码以包含命名空间。这是导致该方法返回未定义的问题。


更新后的代码如下:


class Generic

{

    public static $propA = "A";

    private static $propB = "B";

    protected static $propC = "C";


    public static function getProperty(string $property): string

    {

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

            return "Undefined Property";

        endif;


        return self::$$property;

    }

}


foreach (['propA', 'propB', 'propC', 'nonProperty'] as $prop) :

    printf("<p>Property: %s::%s - %s</p>\n", 'Generic', $prop, print_r(Generic::getProperty($prop), true));

endforeach;

输出:


Property: Generic::propA - A


Property: Generic::propB - B


Property: Generic::propC - C


Property: Generic::nonProp - Undefined Property


查看完整回答
反对 回复 2023-08-06
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信