陈力:传智播客古代 珍宝币 泡泡龙游戏开发第33讲:PHP 静态变量、静态方法
前节介绍了构造方法__construct()和析构方法__destruct的作用,介绍了this和垃圾回收等机制。本节介绍PHP静态变量和静态方法的相关内容。贵阳网站建设的朋友必须要掌握这些知识。本节内容为陈力:传智播客古代 珍宝币 泡泡龙游戏开发第33讲:PHP 静态变量、静态方法
一、静态变量
提出问题:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决。
传统的方法是使用全局变量(全局变量是在程序中都可以使用的变量)进行解决。
例子:
<?php
//定义完游戏的全局变量
global $global_nums;
$global_nums=0; //赋值
class Child{
public $name;
function __construct($name){
$this->name=$name;
}
public function join_game(){
global $global_nums; //声明使用全局变量
$global_nums+=1;
echo $this->name."加入堆雪人游戏";
}
}
$child1=new Child("张三");//创建三个小孩
$child1->join_game();
$child2=new Child("张五");
$child2->join_game();
$child3=new Child("王五");
$child3->join_game();
echo "<br/> 有".$global_nums; //看看有多少人玩游戏
?>
使用静态变量来解决,静态变量和全局变量没有本质的区别,只是静态变量只在类中访问。在类中定义静态变量,格式为:[访问修饰符] static $变量名;
访问静态变量:
(1)如果在类中访问 有两种方法 self::$静态变量名,类名::$静态变量名。
(2)如果在类外访问: 有一种方法 类名::$静态变量名
静态变量存在方式
解法:
class Child{
public $name;
//定义并初始化一个静态变量 $nums
public static $nums=0;
function __construct($name){
$this->name=$name;
}
public function join_game(){
//self::$nums 使用静态变量
self::$nums+=1;
echo $this->name."加入堆雪人游戏";
}
}
$child1=new Child("张三");//创建三个小孩
$child1->join_game();
$child2=new Child("五五");
$child2->join_game();
$child3=new Child("王王");
$child3->join_game();
echo "<br/> 有这".Child::$nums; //看看有多少人玩游戏
静态变量与普通变量区别:
(1) 加上static称为类变量或静态变量,否则称为实例变量。
(2) 类变量是与类相关的,公共的属性。
(3) 实例变量属于每个对象个体的属性。
(4) 类变量可以通过 类名::类变量名 直接访问。
二、静态方法
静态方法也叫类方法,静态方法是属于所有对象实例的,其形式如下:
访问修饰符 static 方法名(){}
注意:类方法中不能访问非静态属性(变量)。
在类外部: 类名::类方法名 或者 对象名->类方法名
在类内部: self::类方法名 或者 类名::类方法名
请大家看一个小案例。(统计学费总和) [static3.php]
当我们操作静态变量的时候,我们可以考虑使用静态方法,比如统计所有学生交的学费。
在贵阳网站建设编程中,我们往往使用静态方法去操作静态变量。
静态方法的特点:静态方法去操作静态变量,静态方法不能操作非静态变量。
普通的成员方法既可以操作非静态变量,也可以操作静态变量。
什么时候需要用静态方法(类方法):
案例:定义学生类,统计学生共交多少钱?
■ 静态方法属于与类相关的,公共的方法
■ 实例方法属于每个对象个体的方法
■ 静态方法可以通过类名::类方法名直接访问
【推荐阅读】
软件设计和网站建设策略分析
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第33讲:PHP 静态变量、静态方法