PHP版本5.6.22
static 关键字在PHP中表示静态的意思,在大多数编程语言中也是静态的意思。
而在PHP类中使用static关键字可以声明静态的类属性以及静态的类方法。 通过使用类名+域作用符的方式可以调用静态的属性以及方法(可见性为public)
在静态方法中调用静态属性需要使用self::$property的方式也可以使用className::$property的方式。ps:使用静态方式调用属性是,域操作符之后的$不可以少。
如下:
class Example
{
public static $name = 'static_property';
public static function getName()
{
echo seld::$name;
echo Example::$name;
}
}
echo Example::$name;
Example::getName();
讨论:使用静态的方式调用非静态的方法和属性是否可以?
1.不能使用静态方式调用非静态的属性即className::$property的方式不能用来调用未声明为静态的属性。
class Example
{
public $age = 18;
}
echo Example::$age;
错误 -- Fatal error: Access to undeclared static property: Example::$age //fatal error 致命错误
2.在类的内部也不能使用静态的方式调用非静态的属性。self::$property || className::$property
class Example
{
public static $name = "static_property";
public $age = 18;
public static function getName()
{
echo self::$age;
}
public function getAge()
{
echo self::$age;
}
}
Example::getName();
错误--Fatal error: Access to undeclared static property: Example::$age
3. 可以使用静态的方式调用非静态的方法(类中)。
前提是可见性为public ; 方法内部没用$this,即没有使用非静态的属性和方法。但是内部可以使用静态的属性和方法。
4.(在类中) 静态方法中不能使用$this关键字,即不能通过$this来使用非静态的属性和方法,但可以使用self::methodName() || className::methodName()的方式来调用非静态的方法(该方法需要满足结论3,因为在类的内部,所以可见性可以忽略)。
5.静态方法内部不能使用$this关键字的。 在非静态方法的内部,可以使用$this->staticMethod的方式来调用静态方法。
6.不能使用对象的实例来访问静态属性,也不能在类的内部使用$this来调用静态属性。