资讯专栏INFORMATION COLUMN

php面向对象中self和static的区别

microcosm1994 / 486人阅读

摘要:在的面向对象编程中,总会遇到可你知道和的区别么其实区别很简单,只需要写几个就能懂得到输出可以发现,在子类中还是会调用父类的方法得到输出可以看到,在调用,子类哪怕调用的是父类的方法,但是父类方法中调用的方法还会是子类的方法好绕嘴。。

在php的面向对象编程中,总会遇到

class test{
  public static function test(){
    self::func();

    static::func();
  }

  public static function func(){}
}

可你知道self和static的区别么?

其实区别很简单,只需要写几个demo就能懂:

Demo for self:
class Car
{
  public static function model(){
    self::getModel();
  }

  protected static function getModel(){
    echo "This is a car model";
  }
}

Car::model();

Class Taxi extends Car
{
  protected static function getModel(){
    echo "This is a Taxi model";
  }
}

Taxi::model();

得到输出

This is a car model
This is a car model

可以发现,self在子类中还是会调用父类的方法

Demo for static
class Car
{
  public static function model(){
    static::getModel();
  }

  protected static function getModel(){
    echo "This is a car model";
  }
}

Car::model();

Class Taxi extends Car
{
  protected static function getModel(){
    echo "This is a Taxi model";
  }
}

Taxi::model();

得到输出

This is a car model
This is a Taxi model

可以看到,在调用static,子类哪怕调用的是父类的方法,但是父类方法中调用的方法还会是子类的方法(好绕嘴。。)

在PHP5.3版本以前,static和self还是有一点区别,具体是什么,毕竟都是7版本的天下了。就不去了解了。

总结呢就是:self只能引用当前类中的方法,而static关键字允许函数能够在运行时动态绑定类中的方法。

参考

http://www.programmerinterview.com/index.php/php-questions/php-self-vs-static/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21548.html

相关文章

  • PHP面向对象new self( ) new static( ) 区别

    摘要:首先阐明结论,在中指向定义了当前被调用方法的类,指向调用当前静态方法的类。下面的例子更好的说明了和之间的差异后者使用了的后期静态绑定指向调用方法的当前类 首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。 接下来通过一个例子来证明上面的结果 class A { public static $_a = Class A; ...

    missonce 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • PHP设计模式

    摘要:设计模式理解设计模式是面向对象编程的经验总结和最佳实践解决某一类特定问题。设计模式分类创建型单例模式工厂模式简单工厂抽象工厂构建者模式原型模式结构型行为型观察者模式责任链模式单例模式单例模式一般使用在资源共享和需要控制资源的情况下。 面向对象与面向过程的区别 做事情的思考方式不同面向对象----分析再拆出对象面向过程----分析再拆出步骤 联系面向对象和面向过程都是一种编程思维,面向...

    mo0n1andin 评论0 收藏0

发表评论

0条评论

microcosm1994

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<