今天老大在公司 问了一下new static和 new self 的区别 公司十个程序 竟然没有一个回答上来 后面画面自补 。。。

本屌丝回家后 就百度了解了下 这二者区别 :

使用self::或者__CLASS__对当前类的静态引用,取决于定义当前方法所在的类:

使用static::不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。

静态绑定是PHP 5.3.0,增加的一个功能 用于在继承范围内引用静态调用的类

简单通俗的来说, self就是写在哪个类里面, 实际调用的就是这个类.所谓的后期静态绑定, static代表使用的这个类, 就是你在父类里写的static,

然后通过子类直接/间接用到了这个static, 这个static指的就是这个子类, 所以说static和$this很像, 但是static可以用于静态方法和属性等.

请看列子

<?php
class Person
{
    public static function name()
    {
        echo "xiaosan";
    }
    public static function callself()
    {
        self::name();
    }

    public static function callstatic()
    {
        static::name();
    }
}

class Man extends Person
{
    public static function name()
    {
        echo "gaojin";
    }
}
Man::name();  // output: gaojin
Person::callself();  // output: xiaosan
Person::callstatic();  // output:xiaosan(子类调用 你懂的)
?>

更多相关文章

  1. php下删除一篇文章生成的多个静态页面
  2. php static静态变量及方法详解
  3. 使用phpnow本地搭建Discuz!如何实现伪静态
  4. IIS 8.5 伪静态去掉index.php thinkphp 3.2.2
  5. 关于静态方法不能调用类中的非静态属性的理解
  6. php中static 静态变量和普通变量的区别
  7. 网站优化之PHPCMS如何开启伪静态
  8. 在Express中提供静态HTML文件的不同路径
  9. 如何使用django从静态文件加载静态文件?

随机推荐

  1. android之layout_weight使用
  2. activity的xml详解
  3. Android Webview 和Javascript交互,实现An
  4. Android插件配置-Android Extension介绍
  5. android 重力感应初步认识
  6. Android调用输入法软键盘,返回输入的内容
  7. android中使用afinal一行代码显示网络图
  8. Android文件系统保护——dmverity
  9. Camera Flash的获得权限
  10. 2.5.3 使用alertDialog创建自定义对话框