深入理解PHP面向对象编程中的Static静态属性和静态方法
我们将通过生动的实例来讲解PHP中面向对象编程的static静态属性和静态方法的调用。如果你正在学习PHP或对面向对象编程感兴趣,那么这篇文章将为你提供有价值的参考。
我们需要明白什么是静态属性和静态方法。在PHP中,静态属性和方法属于类本身,而不是类的实例化对象。这意味着我们不需要创建类的实例就可以调用它们。它们在内存中只有一个位置,无论我们创建了多少个类的实例。
接下来,让我们通过一个简单的示例来深入理解这个概念:
```php
header("content-type:text/html;charset=utf-8");
class Human {
static public $name = "小妹"; // 静态属性
public $height = 180; // 非静态属性
static public function tell() { // 静态方法
echo self::$name; // 静态方法调用静态属性,使用self关键词
// echo $this->height; // 错误。静态方法不能调用非静态属性
}
public function say() { // 普通方法
echo self::$name . "我说话了"; // 普通方法调用静态属性,同样使用self关键词
echo $this->height; // 普通方法可以调用非静态属性
}
}
// 对象可以访问静态方法和非静态方法
$p1 = new Human();
$p1->say();
$p1->tell();
// 对象可以访问静态属性。但不能通过对象访问非静态属性
echo Human::$name; // 正确。对象访问静态属性
// echo $p1->name; // 错误。非静态属性的内存位置不在对象里
// 静态方法可以通过类名直接调用,但需要注意方法的定义
Human::tell(); // 正确。调用静态方法
// Human::say(); // 错误。如果say()方法中有$this,则不能直接通过类名调用
?>
```
通过这个示例,我们可以得出以下结论:
1. 静态属性不需要实例化即可调用,因为静态属性存放在类里,调用方法为"类名::属性名"。
2. 静态方法不需要实例化即可调用。
3. 静态方法不能调用非静态属性,因为非静态属性需要实例化后存放在对象里。
4. 静态方法可以调用非静态方法,使用self关键词。在PHP中,一个方法被self::后,它就自动转变为静态方法。但需要注意的是,通过类名直接调用的静态方法中不能含有$this引用。否则会导致错误。希望本文的讲解对大家学习PHP面向对象编程有所帮助。如有任何疑问或需要进一步的讨论,欢迎交流学习。同时感谢大家的阅读和支持!