Php 简明教程
PHP – Static Methods
PHP 中的 "static" 关键字用于在 PHP 类中定义静态属性和静态方法。需要注意的是,static 关键字也用于定义静态变量和静态匿名函数。本章讨论 PHP 类中的静态方法。
The "static" keyword in PHP is used to define static properties and static methods in a PHP class. It may be noted that the static keyword is also used to define static variable, and static anonymous functions. This chapter discusses static methods in a PHP class.
在类定义中,用 static 限定符声明的函数成为其静态方法。
In a class definition, a function declared with a static qualifier becomes its static method.
class myclass {
public static function myStaticMethod() {
// ...
}
您无需创建类的实例即可调用该类的静态方法。通过作用域解析运算符,根据类名称来调用该静态方法。静态方法调用的语法为 −
You don’t need to create the instance of the class to call its static method. The static method is called by the class name though the scope resolution operator. The syntax of a static method call is −
myclass::myStaticMethod();
由于无需创建类的实例即可调用静态方法,因此伪变量 $this 在静态方法内部不可用。允许由对象调用一个静态方法,尽管将一个实例方法作为静态方法调用会引发错误。
As the static methods are callable without creating an instance of the class, the pseudo-variable $this is not available inside static methods. A static method is allowed to be called by an object, although calling an instance method as a static method raises error.
Example
请看以下示例:
Take a look at the following example −
<?php
class myclass {
/* Member variables */
static int $var1 = 0;
public static function mystaticmethod() {
echo "This is a static method". PHP_EOL;
}
public function myinstancemethod() {
echo "This is an instance method". PHP_EOL;
}
}
myclass::mystaticmethod();
$obj = new myclass;
$obj->myinstancemethod();
$obj->mystaticmethod();
myclass::myinstancemethod();
?>
它将生成以下 output −
It will produce the following output −
This is a static method
This is an instance method
This is a static method
PHP Fatal error: Uncaught Error: Non-static method
myclass::myinstancemethod() cannot be called statically
The "self" Keyword in Static Method
如果您需要从在同一类中定义的实例方法内部调用静态方法,那么必须使用引用类名称的 self 关键字,然后是作用域解析运算符(如 self::mystaticmethod)
If you need to call a static method from inside an instance method defined in the same class, you have to use self keyword referring to the name of the class, followed by the scope resolution operator (such as self::mystaticmethod)
<?php
class myclass {
/* Member variables */
static int $var1 = 0;
public static function mystaticmethod() {
echo "This is a static method". PHP_EOL;
}
public function myinstancemethod() {
echo "This is an instance method". PHP_EOL;
echo "calling static method from instance method" . PHP_EOL;
self::mystaticmethod();
}
}
$obj = new myclass;
$obj->myinstancemethod();
?>
它将生成以下 output −
It will produce the following output −
This is an instance method
calling static method from instance method
This is a static method
Using the "parent" Keyword
在继承的情况下,通过引用“parent”关键字,可以根据派生类的对象或从派生类的实例方法内部调用在基类中定义的静态方法。
In case of inheritance, a static method defined in a base class may be called by an object of derived class, or from inside an instance method of the derived class, by referring it with the "parent" keyword.
Example
请看以下示例:
Take a look at the following example −
<?php
class myclass {
/* Member variables */
static int $var1 = 0;
public static function mystaticmethod() {
echo "This is a static method". PHP_EOL;
}
public function myinstancemethod() {
echo "This is an instance method". PHP_EOL;
echo "calling static method from instance method" . PHP_EOL;
self::mystaticmethod();
}
}
class mynewclass extends myclass {
public function myfunction() {
echo "This an instance method of the derived class" . PHP_EOL;
echo "Calling static method of the parent class" . PHP_EOL;
parent::mystaticmethod();
}
}
$obj = new mynewclass;
mynewclass::mystaticmethod();
$obj->myfunction();
?>
它将生成以下 output −
It will produce the following output −
This is a static method
This an instance method of the derived class
Calling static method of the parent class
This is a static method
Static Method Inside Another Class
完全可以从一个类中调用另一个类中的静态方法。您必须用其类名称和作用域解析运算符限定其名称。
It is entirely possible to call the static method from one class in another. You have to qualify its name with its class name followed by the scope resolution operator.
Example
请看以下示例:
Take a look at the following example −
<?php
class myclass {
/* Member variables */
static int $var1 = 0;
public static function mystaticmethod() {
echo "This is a static method". PHP_EOL;
}
}
#this is not a derived class
class mynewclass {
public function myfunction() {
echo "This an instance method" . PHP_EOL;
echo "Calling static method of the another class" . PHP_EOL;
myclass::mystaticmethod();
}
}
$obj = new mynewclass;
$obj->myfunction();
?>
它将生成以下 output −
It will produce the following output −
This an instance method
Calling static method of another class
This is a static method
由于 $this 伪变量对于静态方法不可用,因此对象实例变量无法在静态方法内部访问。它只能处理该类的静态属性。
Since $this pseudo-variable is not available for a static method, the instance variables of an object cannot be accessed inside a static method. It can process only the static properties of the class.
Example
请看以下示例:
Take a look at the following example −
<?php
class myclass {
/* Member variables */
static int $var1 = 0;
function __construct() {
self::$var1++;
echo "object number ". self::$var1 . PHP_EOL;
}
public static function mystaticmethod() {
echo "Number of objects available: " . self::$var1 . PHP_EOL;
}
}
for ($i=1; $i<=3; $i++) {
$obj = new myclass;
}
myclass::mystaticmethod();
?>
它将生成以下 output −
It will produce the following output −
object number 1
object number 2
object number 3
Number of objects available: 3