我在PHP5.3上遇到了问题。我需要使用__callStatic调用方法,但如果我在实例化对象中使用它,PHP会改为调用__call。上面是一个真实的例子:c}";}staticfunction__callStatic($method,$args){echo'Fine!';}}classBextendsA{public$c='RealOps!';functionuseCallStatic(){static::foo();//===A::foo();//===B::foo();}}$foo=newB();$foo->useCallStatic();//Thisworks://B::foo
当我尝试这个时:bar();我期待这样的输出:from__callStatic...相反,它给出:from__call。有人能解释一下为什么吗?编辑:确切地说,我想知道为什么如果我删除__call函数,那么它会触发__callStatic并且是否有办法当声明__call时触发__callStatic。 最佳答案 这里发生了两件事,首先:PHP支持classname::method作为parent::method的别名,以及跳过树中某些类的方法asdemonstratedhere.其次,parent::不是静态调用,使用parent:
我试图引用这个question在SO上,但仍然不明白。bar();(newB)->foo();据我了解,bar函数静态调用类A上的foo方法,但foo方法使用A的实例调用该方法,该实例是B的父级。我期待它应该给我:I'mthe__callStatic()magicmethodI'mthe__call()magicmethod但是,显然,我得到:I'mthe__call()magicmethodI'mthe__call()magicmethod 最佳答案 来自相关issue:...A::foo()isnotnecessarilyast
我在PHP类(v5.3.8)中发现了这种奇怪的行为。你有:classfoo{function__call($func,$args){if($func=='bar')echo"non-static__call";}staticfunction__callStatic($func,$args){if($func=='bar')echo"__callStatic";}functioncallMe(){self::bar();}}然后你做:foo::bar()//outputs'__callStatic'asexpected.$f=newfoo;$f->callMe();//outputs'n
我的代码是这样的:但它会回显:StrictStandards:Non-staticmethodA::CallA()shouldnotbecalledstaticallyin/vagrant/hades_install/public/test.phponline21callA也就是说,CallA没有遇到函数__callStatic如果我想通过A::CallA()调用__callStatic,我该怎么做 最佳答案 作为documentation解释:__callStatic()istriggeredwheninvokinginacces
不确定如何准确地命名它。在深入研究Laravel4类以了解Facades的工作原理时,我偶然发现了这个:Illuminate\Support\Facades\Facades.php@__callStaticpublicstaticfunction__callStatic($method,$args){$instance=static::getFacadeRoot();switch(count($args)){case0:return$instance->$method();case1:return$instance->$method($args[0]);case2:return$ins
tl;dr注释(在PHPDoc中)通过__callStatic实现的函数的正确方法是什么?更重要的是:有没有办法让NetBeans和PHPStorm理解这些是静态方法?动机如果您想了解更大的图景,这就是我如何回答这个问题的。问题:在我当前的项目中,我们有大量的类实际上应该是单例(数据库代理等)。不用说,我们至少有几百行require_once和$foo=newFooProxy();行。解决方案:我创建了一个Loader类来解决这个问题,使用__callStatic魔术方法所以我们可以只说$foo=加载器::FooProxy();。它非常适合我们的目的,但是:问题:这种方式在团队中使用的
tl;dr注释(在PHPDoc中)通过__callStatic实现的函数的正确方法是什么?更重要的是:有没有办法让NetBeans和PHPStorm理解这些是静态方法?动机如果您想了解更大的图景,这就是我如何回答这个问题的。问题:在我当前的项目中,我们有大量的类实际上应该是单例(数据库代理等)。不用说,我们至少有几百行require_once和$foo=newFooProxy();行。解决方案:我创建了一个Loader类来解决这个问题,使用__callStatic魔术方法所以我们可以只说$foo=加载器::FooProxy();。它非常适合我们的目的,但是:问题:这种方式在团队中使用的
我有一个关于奇怪行为的问题。看这段代码:classUser{publicfunctioncan($name){returncall_user_func(array($name,'test'));}publicstaticfunction__callStatic($name,$args){return'User::__callStatic';}publicfunction__call($name,$args){return'User::__call';}}classFoo{publicstaticfunction__callStatic($name,$args){return'Foo::
我知道以下可能会在其他地方造成问题并且可能是糟糕的设计,但我仍然想知道为什么这会失败(为了我自己的启发):classTest{//singletonprivatefunction__construct(){}privatestatic$i;publicstaticfunctioninstance(){if(!self::$i){self::$i=newTest();}returnself::$i;}//passstaticrequeststotheinstancepublicstaticfunction__callStatic($method,$parameters){returnca