您好,欢迎访问一九零五行业门户网

PHP中this self static 的用法区别

这篇文章主要介绍了php中this self static 的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
引入最近在做软件工程的课程设计,碰到一个问题,去扒 laravel 源码,又搜索一番,发现是对 self static 的理解不深,才出现了问题,所以记录下来,避免再次犯同样的错误。
正文thisthis 比较好理解,就是指向当前对象,用于访问当前对象的非静态变量和非静态方法,它是和对象相关的;
<?php class person { public $name; public function getname() { echo $this->name; } } $p = new person(); $p2 = new person(); $p->name = "小红"; $p2->name = "小明"; $p->getname(); // 小红 $p2->getname(); // 小明
上例中 new 了两个对象,并分别设置对象的 name 属性,getname() 中使用了 this 访问当前对象的 name 属性,所以分别输出了 name 的值。所以说,this 就是指向当前对象,不指向其他对象或类。
selfself 和 this 不同,它指向类本身,不指向任何实例化对象,一般用来访问类中的静态变量和静态方法;
<?php class person { public static $name = "小红"; public static function getname() { echo self::$name; } } $p = new person(); $p2 = new person(); $p::getname(); // 小红 $p2::getname(); // 小红 $p::$name = "小明"; $p::getname(); // 小明 $p2::getname(); // 小明
上例中 new 了两个对象,并修改了其中一个对象的 name 属性,另一个对象的 name 属性值也改变了,所以说,self 是指向当前类的,和对象无关,所有的对象共用一个值。
staticstatic 和 self 一样,都是指向类,一般都用来访问类中的静态变量和静态方法,但是又有一些不一样,具体来讲:self 写在哪个类里,实际调用的就是这个类;static 则是写在父类里,然后通过子类用到了这个 static,这个 static 指向的是这个子类,官方称之为 后期静态绑定 。
<?phpclass a { public function say() { echo "hello"; } public function sayself() { self::say(); } public function saystatic() { static::say(); } } class b extends a { public function say() { echo "world"; } } $b = new b(); $b->say(); // world $b->sayself(); // hello $b->saystatic(); // world
上例中可以看到,self 写在 a 类里,调用时就指向了 a 类,static 同样写在 a 类里,但是用 a 类的子类 b 类的对象去调用时,却指向了 b 类,在使用时,static 才确定指向哪个类,这就是 后期静态绑定 。
后期静态绑定
总结this 指向当前对象,用来访问当前对象的非静态变量和非静态方法; 
self 指向类,一般用来访问当前类的静态变量和静态方法,运行之前已经确定指向哪个类; 
static 指向类,一般用来访问当前类的静态变量和静态方法,但又 不限于 静态的调用,运行时才确定指向哪个类。
以上就是php中this self static 的用法区别的详细内容。
其它类似信息

推荐信息