0%

PHP 类中静态属性访问问题

今天在看《深入 PHP 面向对象、模式与实践》的静态方法和属性时,写了个小demo

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class StaticExample{
public static $aNum = 1;

public static function sayHello() {
self::$aNum++;
print 'hello'.self::$aNum.'<br/>';
}
}

$demo = new StaticExample();
$demo->sayHello();
print $demo->aNum;

运行后报错,无法访问aNum属性,当一个类中定义了静态属性和方法,如果要从外部访问,可以通过
类型::(属性或方法名)来调用,这点没什么说的,但是看到书上写了一句话,类的每个实例都可以访
问类中定义的静态属性,就测试了下。报错后,不理解
为什么静态的方法可以通过实例后的对象通过->来调用,而属性却无法通过->获得,如果把->换成::
就可以。
最后在手册中,找到了答案:
声明类成员或方法为static,就可以不实例化类而直接访问。

不能通过一个对象来访问其中的静态成员(静态方法除外)。

为了兼容PHP4,如果没有指定“可见性”,属性和方法默认为public

由于静态方法不需要通过对象即可调用,所以伪变量$this在静态方法中不可用。

静态属性不可以由对象通过->操作符来访问。

用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。

以后要多看手册了,基础一定要打稳,不清楚的地方一定要搞清原理,不知一知半解。

坚持原创分享,您的支持将鼓励我继续创作!