Possible to test if a variable is static in PHP?

假装没事ソ 提交于 2020-01-12 23:04:32

问题


Is it possible to test if a variable is static in PHP? I am trying create a magic method __get that also looks at static variables. I find that property_exists() returns true when a variable is static too. But I will need to use :: instead of -> I'd expect?


回答1:


It is possible to test if a variable is static via Reflection:

class Foo { static $bar; }
$prop = new ReflectionProperty('Foo', 'bar');
var_dump($prop->isStatic()); // TRUE

However, that still won't allow you to use them with magic methods __get or __set, because those only work in object context. From the PHP Manual on Magic Methods:

Property overloading only works in object context. These magic methods will not be triggered in static context. Therefore these methods should not be declared static. As of PHP 5.3.0, a warning is issued if one of the magic overloading methods is declared static.

Also see this discussion on the PHP Internals Mailing List about introducing __getStatic:

  • http://marc.info/?l=php-internals&m=121875353105996&w=1



回答2:


I don't think you can access undeclared static property using magic __get() method. It will raise PHP Fatal error. At least with PHP of version 5.3.

That's the result if you will try to access the property as static ClassName::$propertyName of course.



来源:https://stackoverflow.com/questions/6568857/possible-to-test-if-a-variable-is-static-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!