<?php

/**
* static self 区别与总结
* 总结:
* 1.在 PHP 里,在没有继承时候,你用self::class 和 static::class是一样的,都是获取当前类名。
* 2.如果用到了继承,并且这个方法写在了父类里,你想要分别获取当前父类名和未知的子类名,就要按照下面的方法进行获取。
* 在 PHP 类中,self指向的是当前方法存在的这个类,也就是父类。static指向的是最终那个子类。
*
* 1.在一个类A中,self::who() 等同于 static::who()
* 2.当子类B继承父类A,子类B::test(),调用的时候,区别:
* test()方法调用 self::who() 调用父类的who()方法
* test()方法调用 static::who()调用的是子类的who()方法
*/ /**
* Class A
* 1.在同一个类中使用 self static 获取的都是获取当前类名
*/
class A
{
public static function who()
{
echo __CLASS__;
} public static function test()
{
self::who(); echo '<br>'; // A
static::who(); echo '<br>'; // A
}
} A::test(); echo '<br>'; // A A /**
* class B extends A
* B::test();
* self::who(); 调用 A 父类 的 who 方法
* static::who(); 调用子类 B 的 who 方法
*/
class B extends A
{
public static function who()
{
echo __CLASS__;
}
} echo B::test(); echo '<br>'; // A B /**
* 父类P中 获取子类C的类名
*/
class P
{
public static function getParent()
{
return self::class;
} public static function getChild()
{
return static::class;
}
} class C extends P
{ } echo C::getParent(); // P
echo C::getChild(), PHP_EOL; // C

static self 区别与总结的更多相关文章

  1. php self与static的区别

    self vs static 用一个demo来直接说明self与static的区别.self示例: <?phpclass Vehicle {    protected static $name ...

  2. 转:C++ 匿名namespace的作用以及它与static的区别

    匿名namespace的作用以及它与static的区别 一.匿名namespace的作用在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则 ...

  3. C# 总结const、 readonly、 static三者区别:

    总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...

  4. PHP中new self()和new static()的区别

    1.new static()是在PHP5.3版本中引入的新特性. 2.无论是new static()还是new self(),都是new了一个新的对象. 3.这两个方法new出来的对象有什么区别呢,说 ...

  5. PHP中new self()和new static()的区别探究

    1.new static()是在PHP5.3版本中引入的新特性. 2.无论是new static()还是new self(),都是new了一个新的对象. 3.这两个方法new出来的对象有什么区别呢,说 ...

  6. Java中主类中定义方法加static和不加static的区别

     Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...

  7. php面向对象编程self和static的区别

    在php的面向对象编程中,总会遇到 class test{ public static function test(){ self::func(); static::func(); } public ...

  8. C++ 匿名namespace的作用以及与static的区别

    匿名namespace的作用以及它与static的区别 一.匿名namespace的作用 在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做 为函数名或者全局变量名 ...

  9. vue中assets和static的区别

    Vue中assets和static的区别 再一次框架定型中,与同事在静态资源的存放上有了一些分歧,后来经过查阅总结如下: 相同点:   assets和static两个都是存放静态资源文件.项目中所需要 ...

  10. (转)全局变量、extern/static/const区别与联系

    全局变量.extern/static/const区别与联系 编译单元(模块):     在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LIN ...

随机推荐

  1. Winform去掉标题栏后移动窗体

    第一步:声明全局变量->  private Point _HoverTreePosition; 第二步: #region 隐藏标题栏后移动窗口 private void Form_HoverTr ...

  2. [Linux] CentOS 显示 -bash: vim: command not found

    转载自:https://www.cnblogs.com/wenqiangwu/p/3288349.html i. 那么如何安裝 vim 呢?输入rpm -qa|grep vim 命令, 如果 vim ...

  3. Android之SOAP协议与WebService服务器交互,解决超时的问题

    网络搜索大部分不能实际解决问题.特意将解决方法写下.创建MyAndroidHttpTransport 类 , package com.example.omhandroid.lib; import or ...

  4. 新手学习FFmpeg - 通过API实现可控的Filter调用链

    虽然通过声明[x][y]avfilter=a=x:b=y;avfilter=xxx的方式可以创建一个可用的Filter调用链,并且在绝大多数场合下这种方式都是靠谱和实用的. 但如果想精细化的管理AVF ...

  5. 波士顿房价预测 - 最简单入门机器学习 - Jupyter

    机器学习入门项目分享 - 波士顿房价预测 该分享源于Udacity机器学习进阶中的一个mini作业项目,用于入门非常合适,刨除了繁琐的部分,保留了最关键.基本的步骤,能够对机器学习基本流程有一个最清晰 ...

  6. pyinstaller程序打包工具

    PyInstaller是一个能将Python程序转换成单个可执行文件的程序, 操作系统支持Windows, Linux, Mac OS X, Solaris和AIX.并且很多包都支持开箱即用,不依赖环 ...

  7. ServiceStack.Redis高效封装和简易破解

    1.ServiceStack.Redis封装 封装的Redis操作类名为RedisHandle,如下代码块(只展示部分代码),它的特点: 1)使用连接池管理连接,见代码中的PooledClientMa ...

  8. http转换为https

    1.下载ssl 证数 百度ssl 证数都有 其中以便宜ssl为例子 注册登陆 选择免费版 可以使用3个月: 申请过程中需要检测该域名是否为本人所有 ,所以邮箱检测或者域名配置 很简单检测就好了: 验证 ...

  9. Scala 异常处理

    Scala 异常处理: parseURL("www.baidu.com") 会返回一个 Success[URL] ,包含了解析后的网址, 反之 parseULR("www ...

  10. redis系列之------简单的动态字符串(SDS)

    前言 Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的 ...