当前位置: 首页 > 面试题库 >

PHP中的self :: $ bar和static :: $ bar有什么区别?

濮阳功
2023-03-14
问题内容

在下面的示例中,使用self和之间有什么区别static

class Foo
{
    protected static $bar = 1234;

    public static function instance()
    {
        echo self::$bar;
        echo "\n";
        echo static::$bar;
    }

}

Foo::instance();

产生

1234
1234

问题答案:

当您self用来指代一个类成员时,您指的是您在其中使用关键字的类。在这种情况下,您的Foo类定义了一个称为的受保护静态属性$bar。当您selfFoo类中使用来引用属性时,您将引用同一类。

因此,如果您尝试self::$barFoo类中的其他地方使用,但您拥有一个Bar属性值不同的类,则它将使用Foo::$bar代替Bar::$bar,这可能不是您想要的:

class Foo
{
    protected static $bar = 1234;
}

class Bar extends Foo
{
    protected static $bar = 4321;
}

当通过 调用
方法时static,您正在调用一个称为后期静态绑定的功能(在PHP 5.3中引入)。

在上述情况下,使用self将导致Foo::$bar(1234)。使用static会导致Bar::$bar(4321),因为使用时static,解释器会考虑Bar运行时类中的重新声明。

您通常对方法甚至类本身使用后期静态绑定,而不是属性,因为您通常不会在子类中重新声明属性。static在以下相关问题中可以找到使用关键字调用后期绑定的构造函数的示例:Newself vs. new static

但是,这也不排除static与属性一起使用。



 类似资料:
  • 本文向大家介绍PHP中new static() 和 new self() 的区别介绍,包括了PHP中new static() 和 new self() 的区别介绍的使用技巧和注意事项,需要的朋友参考一下 长夜漫漫啊! 今天领导本地搭建一个站。发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,领导让苦逼我更改在5.2下能运行。 改着改着发现了一个地方 这尼玛是神马,只见过 于

  • DebugBar 很容易就能集成到项目中,可以显示应用所有部分的分析数据,它带有内置的标准 PHP 特性和流行项目的数据收集器。 

  • 问题内容: Swift具有以下方便的语法: 它在s 以外的地方被镜像: 我不确定在对话/票务中该怎么称呼。也许是“类型推断点语法”?我不确定 此语法是否有正式名称? 如果是这样,那是什么? 问题答案: 它称为 隐式成员表达式 。从语言指南的语法部分: 隐式成员表达式是在类型推断可以确定隐式类型的上下文中访问类型成员(例如枚举用例或类型方法)的缩写方式。它具有以下形式: 。 例如:

  • 问题内容: 您能否解释一下这两个CSS类语法之间的区别: 和 我不明白两者之间的区别。第一行指示两个不同的类,它们应用了相同的样式。但是关于第二个问题,写在“ .element”后面的“ .large”是什么意思? 问题答案: 我认为您对第一个含义有一些误解。 意味着这些CSS设置将应用于该类的任何HTML元素,该HTML元素位于类的元素内。 在此示例中,您的第一个CSS条目将影响中间的标签。 您

  • 问题内容: 简单的问题: php中的’和’有什么区别?什么时候应该使用两者之一? 问题答案: 基本上,单引号字符串是纯文本,几乎没有特殊情况,而双引号字符串具有变量插值(例如)以及转义序列,例如“ \n”(换行符)。 您可以在PHP的手册中了解有关字符串的更多信息。

  • 本文向大家介绍PHP中new static()与new self()的区别异同分析,包括了PHP中new static()与new self()的区别异同分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP中new static()与new self()的区别异同,相信对于大家学习PHP程序设计能够带来一定的帮助。 问题的起因是本地搭建一个站。发现用PHP 5.2 搭建不起来,站PH