今天在看《深入 PHP 面向对象、模式与实践》的静态方法和属性时,写了个小demo
1 |
|
运行后报错,无法访问aNum属性,当一个类中定义了静态属性和方法,如果要从外部访问,可以通过
类型::(属性或方法名)来调用,这点没什么说的,但是看到书上写了一句话,类的每个实例都可以访
问类中定义的静态属性,就测试了下。报错后,不理解
为什么静态的方法可以通过实例后的对象通过->来调用,而属性却无法通过->获得,如果把->换成::
就可以。
最后在手册中,找到了答案:
声明类成员或方法为static,就可以不实例化类而直接访问。
不能通过一个对象来访问其中的静态成员(静态方法除外)。
为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public。
由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。
静态属性不可以由对象通过->操作符来访问。
用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。
以后要多看手册了,基础一定要打稳,不清楚的地方一定要搞清原理,不知一知半解。