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 级别的错误。

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

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