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