访问一个未声明的静态属性的时候的魔术方法

  1. __get是当访问 PHP 对象中的不存在的属性或者私有的属性时触发
  2. __callStatic 方法是在调用对象静态方法不存在的时候被调用
    那么如果当我访问一个未声明的静态属性的时候,有没有可以触发的魔术方法???
倚南窗以寄傲,审容膝之易安
讨论数量: 9
pndx

为啥会有这种需求?

1周前 评论
倚南 (楼主) 1周前
pndx (作者) 1周前

?难道代码不会直接报错吗

1周前 评论
  • IDE应该会对未定义的类静态属性提示报错!
  • 不过,有个思路就是异常捕获,在catch里面执行特定的函数调用即可;

Test测试代码

class TestClass {
    const YES = 1;
}

 try {
        print_r(sprintf("[TestClass::YES]:%s \n", TestClass::YES));
        print_r(sprintf("[TestClass::GG]:%s \n", TestClass::GG));

    } catch (\Throwable $th) {
        $msg    = $th->getMessage();
        $tag    = "Undefined class constant";
        $is_has = stripos($msg, $tag);
        if($is_has === FALSE) {
            print_r(sprintf("[ERROR]:%s", $msg));
        } else {
            $last_str = substr($msg, $is_has + strlen($tag));
            $last_str = trim($last_str);
            $last_str = trim($last_str,"'");
            print_r(sprintf("[TestClass::GG]:%s \n", $last_str));
        }
    }

测试结果

[TestClass::YES]1 
[TestClass::GG]GG 
1周前 评论
倚南 (楼主) 1周前
Tacks (作者) 1周前
倚南 (楼主) 1周前
Tacks (作者) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!