static self parent $this在类中用法与区别

static 声明类静态属性或静态方法
this是指向对象实例的指针,用来访问当前对象的成员属性和方法。
self是对类本身的一个引用。
parent是对父类的引用。

static 声明类静态属性或静态方法

  1. 静态属性不能通过一个类已实例化的对象来访问,静态属性不可以由对象通过 -> 操作符来访问
  2. 静态方法不需要通过对象即可调用
  3. 用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误。
  4. 静态属性只能被初始化为文字或常量,不能使用表达式。不能初始化为另一个变量或函数返回值,也不能指向一个对象。
<?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";
?>
  1. static方法是类中的一个成员方法,静态方法中不能用伪变量$this,(Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。实力化的对象不包含static,而this指代的是当前的对象。两种对象空间的存在,)

  2. 静态属性:Foo::$my_static,不能以->方式调用,不能被已经实例化的对象调用new Foo()->my_static;原因同上//报错 Undefined “Property”

  3. 本类中调用静态属性和方法:self::$my_static,self::staticFun();

  4. 本类外调用静态属性和方法:Foo::$my_static; new Foo:staticFun();

  5. 调用父类中的属性和方法;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官方手册

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值