首页 > Web开发 > 详细

PHP基础一 $this ,static 和 self的区别

时间:2019-11-19 10:14:18      阅读:117      评论:0      收藏:0      [点我收藏+]

本来想写的,算了写个锤子

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mrzhouxiaofei/article/details/78648079
————————————————
版权声明:本文为CSDN博主「潜心做事GG」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mrzhouxiaofei/article/details/78648079

看到一篇写的比较好的

自己小结一下

1 .$this 表示对象的引用  $this写在类中的非静态方法中, 实例化该类,谁调用该方法(一般是对象调用)$this则表示该对象的引用。

2. self 和 this 不同,它指向类本身,不指向任何实例化对象,一般用来访问类中的静态变量和静态方法,也是写在类中的方法。self写在哪个类中则表示该类的引用

3.static 一般用来访问类中的静态变量和静态方法,也是写在类中的方法,也是那个类调用该方法static就表示那个类(绑定那个类)

 

<?php
class 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

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/mrzhouxiaofei/article/details/78648079引入最近在做软件工程的课程设计,碰到一个问题,去扒 Laravel 源码,又搜索一番,发现是对 self static 的理解不深,才出现了问题,所以记录下来,避免再次犯同样的错误。
正文thisthis 比较好理解,就是指向当前对象,用于访问当前对象的非静态变量和非静态方法,它是和对象相关的;
<?phpclass Person {    public $name;
    public function getName() {        echo $this->name;    }}
$p = new Person();$p2 = new Person();$p->name = "小红";$p2->name = "小明";$p->getName();  // 小红$p2->getName();  // 小明123456789101112131415上例中 new 了两个对象,并分别设置对象的 name 属性,getName() 中使用了 this 访问当前对象的 name 属性,所以分别输出了 name 的值。所以说,this 就是指向当前对象,不指向其他对象或类。
selfself 和 this 不同,它指向类本身,不指向任何实例化对象,一般用来访问类中的静态变量和静态方法;
<?phpclass 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();  // 小明1234567891011121314151617上例中 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();  // World12345678910111213141516171819202122232425上例中可以看到,self 写在 A 类里,调用时就指向了 A 类,static 同样写在 A 类里,但是用 A 类的子类 B 类的对象去调用时,却指向了 B 类,在使用时,static 才确定指向哪个类,这就是 后期静态绑定 。
后期静态绑定
总结this 指向当前对象,用来访问当前对象的非静态变量和非静态方法;self 指向类,一般用来访问当前类的静态变量和静态方法,运行之前已经确定指向哪个类;static 指向类,一般用来访问当前类的静态变量和静态方法,但又 不限于 静态的调用,运行时才确定指向哪个类。————————————————版权声明:本文为CSDN博主「潜心做事GG」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/mrzhouxiaofei/article/details/78648079

PHP基础一 $this ,static 和 self的区别

原文:https://www.cnblogs.com/mofei12138/p/11887425.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!