static 声明类静态属性或静态方法
this是指向对象实例的指针,用来访问当前对象的成员属性和方法。
self是对类本身的一个引用。
parent是对父类的引用。
static 声明类静态属性或静态方法
- 静态属性不能通过一个类已实例化的对象来访问,静态属性不可以由对象通过 -> 操作符来访问
- 静态方法不需要通过对象即可调用
- 用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误。
- 静态属性只能被初始化为文字或常量,不能使用表达式。不能初始化为另一个变量或函数返回值,也不能指向一个对象。
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n"; // As of PHP 5.3.0
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
static方法是类中的一个成员方法,静态方法中不能用伪变量$this,(Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。实力化的对象不包含static,而this指代的是当前的对象。两种对象空间的存在,)
静态属性:Foo::$my_static,不能以->方式调用,不能被已经实例化的对象调用new Foo()->my_static;原因同上//报错 Undefined “Property”
本类中调用静态属性和方法:self::$my_static,self::staticFun();
本类外调用静态属性和方法:Foo::$my_static; new Foo:staticFun();
调用父类中的属性和方法;parent::$my_static;parent::staticFun();
parent 调用父类的属性和方法
与范围解析操作符(::) 搭配使用
- 调用父类的属性或方法
parent::foo();
- 继承父类的方法
parent::__construct();
<?php
class OtherClass extends MyClass
{
public static $my_static = 'static var';
public static function doubleColon() {
echo parent::CONST_VALUE . "\n";
echo self::$my_static . "\n";
}
}
$classname = 'OtherClass';
echo $classname::doubleColon(); // 自 PHP 5.3.0 起
OtherClass::doubleColon();
?>
self 调用本类的静态属性和方法
可以访问当前类的静态属性和静态方法
不可以用来访问非静态属性
可以访问非静态方法,一个方法被self:: 后,它就自动转变为静态方法;
<?php
class OtherClass extends MyClass
{
public static $my_static = 'static
public static function doubleColon() {
echo parent::CONST_VALUE . "\n";
echo self::$my_static . "\n";
}
}
?>
$this this是指向当前对象的指针
可以访问当前引用对象的非静态属性和非静态方法 ,
<?php
class human{
public $name="test";
public function eat(){
echo $this->name;
}
public function test(){
echo $this->eat();
}
}
$Foo=new human();
echo $Foo->name;//'test
$Foo->test();//'test'。
参考资料:php官方手册