PHP 的 “static” 关键字用于定义 PHP 类中的 静态(static)属性 和 静态(static)方法 。可以注意到,static 关键字还用于定义 static 变量和 static 匿名函数。阅读本章以了解 PHP 类中的 static 属性。
类定义中,使用 static 限定符声明的变量将成为其静态属性。static 关键字可能出现在访问修饰符之前或之后。
static private $var1;
public static $var2;
如果要使用类型提示,则 type 不能位于 static 关键字之前。
static private string $var1;
public static float $var2;
类中 static 属性值不能由其对象访问(with -> operator)。这样做将导致一条通知,指出 Accessing static property myclass::$var 1 为非静态。相反,静态属性是使用 “::” 符号表示的作用域运算符来访问的。
示例
请看下面的例子 -
<?php
class myclass {
static string $var1 = "My Class";
function __construct() {
echo "已声明新对象" . PHP_EOL;
}
}
$obj = new myclass;
echo "使用作用域解析运算符访问静态属性: " . myclass::$var1 . PHP_EOL;
echo "访问静态属性 with -> operator: ". $obj->var1 . PHP_EOL;
?>
它将产生以下输出 -
已声明新对象
使用作用域解析运算符访问静态属性: My Class
PHP Notice: Accessing static property myclass::$var1 as non static in hello.php on line 14
使用作用域解析运算符访问静态属性: My Class
PHP Notice: Accessing static property myclass::$var1 as non static in hello.php on line 14
“self” 关键字
要从方法内部访问 static 属性,请使用 self 关键字引用当前类。在下面的示例中,该类具有一个 integer 静态属性,每次声明新对象时,该属性都会递增。
<?php
class myclass {
/* 成员变量 */
static int $var1 = 0;
function __construct(){
self::$var1++;
echo "对象编号 ". self::$var1 . PHP_EOL;
}
}
for ($i=1; $i<=3; $i++) {
$obj = new myclass;
}
?>
它将产生以下输出 -
对象编号 1
对象编号 2
对象编号 3
对象编号 2
对象编号 3
“parent” 关键字
基类的 static 属性可以通过 parent 关键字引用 base 在继承类的函数中使用。您需要使用 “parent::static_property” 语法。
示例
请看下面的例子 -
<?php
class myclass {
/* 成员变量 */
static int $var1 = 0;
function __construct() {
self::$var1++;
echo "对象编员 ". self::$var1 . PHP_EOL;
}
}
class newclass extends myclass{
function getstatic() {
echo "父类中的静态属性: " . parent::$var1 . PHP_EOL;
}
}
$obj = new newclass;
$obj->getstatic();
?>
它将产生以下输出 -
对象编号1
父类中的静态属性:1
父类中的静态属性:1