静态属性:
基本概念:
静态属性是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。
定义静态属性
(1) 访问修饰符 static 静态属性名;
(2) static 访问修饰符 静态属性名;
:: 叫 范围解析符
在类的内部访问可以使用两种方式 self::$静态属性名 , 类名::$静态属性名
在类的外部访问静态属性,静态属性需要是public ,否则也不能直接访问, 访问的形式是 类名::$属性名
快速入门案例:
/* 创建一个类:唐僧队伍 类中包含了姓名、年龄、个人每天消耗的食物数量 队伍不断的有成员加入 唐僧、孙悟空、猪八戒、沙僧 $num表示队伍的人数 $food_sum表示队伍每天消耗的蛋糕数量 */ class Person{ public $name; public $age; public $food_num; //创建静态属性 public static $num = 0; public static $food_sum = 0; public function __construct($name,$age,$food_num){ $this -> name = $name; $this -> age = $age; $this -> food_num = $food_num; } public function num(){ //内部访问静态属性 self :: $num++; self :: $food_sum += $this -> food_num; } } $p1 = new Person('唐僧',24,3); $p1 -> num(); $p2 = new Person('孙悟空',720,5); $p2 -> num(); $p3 = new Person('猪八戒',360,9); $p3 -> num(); $p4 = new Person('沙僧',180,30); $p4 -> num(); //外部访问静态属性 echo '师徒一共' . Person::$num . '人' . '每天吃' . Person::$food_sum . '块蛋糕';
//创建一个类来计算一共有1000块蛋糕每过一天蛋糕还剩多少 class Day{ public $day; public static $sum = 1000; public function sum(){ self::$sum -= Person:: $food_sum; } } $day1 = new Day(); $day1 -> day = '第一天'; $day1 -> sum(); echo '<br>' . $day1 -> day . "蛋糕还剩下" . Day::$sum; $day2 = new Day(); $day2 -> day = '第二天'; $day2 -> sum(); echo '<br>' . $day2 -> day . "蛋糕还剩下" . Day::$sum; 输出结果: 师徒一共4人每天吃47块蛋糕 第一天蛋糕还剩下953 第二天蛋糕还剩下906
静态方法:
基本概念:
当程序员需要对静态属性进行操作时,可以定义静态方法来处理, 静态方法是专门用于操作静态属性.
说明:
(1) 静态方法是在类中定义的
(2) static 是关键字,不能修改.
(3) 静态方法专门用于操作静态属性
(4) 静态方法可以通过类名直接调用. 形式是 类名::静态方法名(参数 )
快速入门案例:
class Person{ public $name; private static $address = '北京'; public function __construct($name){ $this -> name = $name; } //静态方法操作静态属性 public static function showAddress(){ echo '<br>地址是' . self::$address; } } //外部调用静态方法 Person::showAddress();
细节:
①在类外部调用静态方法: 类名::静态方法名 或者 对象名->静态方法名 或者 对象名::静态方法(语法支持,但是不推荐)
举例说明:
class Person{ public $name; private static $address = '北京'; public function __construct($name){ $this -> name = $name; } //静态方法操作静态属性 public static function showAddress(){ echo '<br>地址是' . self::$address; } } //外部调用静态方法 //第一种调用方法:推荐使用 Person::showAddress(); //后面两种调用方法不推荐使用但是需要了解 $p1 = new Person('小明'); $p1 -> showAddress(); $p1::showAddress();
②在类内部调用静态方法: self::静态方法名 或者 类名::静态方法名 , 通过 $this也可以
举例说明:
class Person{ public $name; private static $address = '北京'; public function __construct($name){ $this -> name = $name; } //静态方法操作静态属性 private static function showAddress(){ echo '<br>地址是' . self::$address; } //通过内部调用 public function test(){ //方式一:推荐使用 self::showAddress(); //其余两种方式不推荐使用但是需要了解 //方式二: Person::showAddress(); //方式三: $this -> showAddress(); } } $p1 = new Person('小明'); $p1 -> test();
③静态方法中只能访静态属性,不能访问非静态属性(普通属性, 没有static)
④普通的成员方法,可以访问静态属性和非静态属性