在学习过程中,我发现大多数人对于类的属性和方法的理解都不是很准确,这里我写下我的一些认识.
在类中,变量(也称为"属性"),函数(也称为"方法"),都是类的成员.
除了访问控制符(private public
protected )还可以在写方法或者属性时,使用static关键字,将其声明为静态方法/属性.
那么问题来了,当你需要调用静态属性/方法怎么办?
使用self::方法/属性名:
class aaa{
public static $a = 1;
public $b = 2;
public static function
xxx(){
return 111;
}
public function
xxx1(){
$c =
self::xxx();
$c1 =
self::$a;
var_dump($c);
var_dump($c1);
}
}
$bbb = new aaa();
$bbb->xxx1();
$ccc =
aaa::xxx();
$ccc1 =
aaa::$a;
var_dump($ccc);
var_dump($ccc1);
可以看到,静态属性或者方法在类的内部调用,用的是self::方法名/属性名(属性名不加$会报错)
在类的外部调用方法是类名::方法名/属性名.(属性名不加$会报错)
那么非静态的方法/属性怎么调用呢?
其实这里也可以从上例中看到,非静态的方法在类的内部是用$this->方法名,$this在类的实例化的时候可用,
而在外部调用的时候需要先实例化.然后通过:
$aaa = new aaa();
$aaa->方法名;
非静态的属性在类的内部调用用$this->属性名,注意,这里的属性比如上例中的$b,不能加$,应该写$this->b,否则会报错.
在类的外部调用,先实例化,
$aaa = new aaa();
$aaa->b;//这里的b还是不能加$,否则会报如下错误:
Notice: Undefined variable: b in
E:\xampp\htdocs\PhpProject1\newEmptyPHP.php on line
14Fatal error:
Cannot access empty property in
E:\xampp\htdocs\PhpProject1\newEmptyPHP.php on line
14
P.S.
关于属性什么时候加$什么时候不加$,实在记不住就记得当有->符号的时候,没有$,前面是::,要加$. ;)