为什么可以通过静态调用访问公共函数 - PHP?

时间:2013-08-23 10:47:29

标签: php oop

请查看以下代码。虽然我没有将测试方法定义为静态,但可以通过A :: test()进行访问。怎么可能?这是PHP中的错误吗?

class A {       
        public function test(){         
            echo __CLASS__;
        }
}
A::test(); //Print 'A'

如果我尝试访问test()方法中的任何公共成员,它会给我一个错误。见下文。

class A {   
        public $name = 'jimit';
        public static function test(){          
                        echo $this->name;
            echo __CLASS__;
        }
    }
A::test(); //Error

请帮我澄清一下事情。

谢谢, Jimit

1 个答案:

答案 0 :(得分:4)

这不是一个错误,而是PHP4对象模型实现的遗留问题。在当前版本中静态调用非静态方法将引发E_STRICT级警告。

至于第二个很明显,你的班级没有实例,所以没有$this可以引用。