PHP中的新自我与新静态
新自我: self 是PHP中的关键字。它指的是实际编写新关键字的同一类。它指的是类成员,但不是针对任何特定对象。这是因为静态成员(变量或函数)是类的所有对象共享的类成员。名为self::theFunction()的函数的行为类似于“我将在我物理上属于的类的上下文中执行。”(假设继承场景)。
- 示例:假设我们调用 Car 类中的静态模型函数——因为它是一个静态函数,我们当然可以只使用类名直接调用该函数:
- 输出:
I am a Car! I am a Car!
- 解释:模型函数是在 Car 类内部定义的,它不会被 Mercedes 类覆盖——但模型函数当然是由 Mercedes 类继承的。
结果,当我们在 Mercedes 类内部调用模型的版本时,函数的作用域仍然在 Car 类内部——因为函数定义在 Car 类内部。关键字“self”的工作方式是它将调用当前类的getModel函数实现——由于模型函数是在Car 类中定义的,因此当前类将是Car 类。因此,它将调用getModel的 Car 类实现,而不是 Mercedes 类实现。这种行为可能被认为是不可取的,因为它不是多态的,并且不符合面向对象的设计原则。但是,有一种替代解决方案可以让我们获得这种行为——这就是 static 关键字变得有用的地方。
新静态:静态是PHP中的关键字。在PHP 5.3 的后期静态绑定中,静态指的是层次结构中您调用该方法的任何类。 static 最常见的用法是定义静态方法。这样的方法是类的一部分,就像任何方法一样,尽管即使没有任何这样的实例化对象也可以使用它们。名为static::theFunction()的函数的行为类似于“我将在类的上下文中执行,该类实际上已被外部世界调用”。
- 例子:
- 输出:
I am a Car! I am a Mercedes!
PHP new self vs new static:现在我们将示例中的代码更改为使用 static 而不是 self,您可以看到不同之处在于 self 引用当前类,而 static 关键字允许函数绑定到调用类运行。通过示例可以很容易地理解 self 和 static 关键字之间的区别。
输出:在这个代码示例中,f 继承了 g 的两个方法。 self 调用绑定到 A,因为它是在 g 的方法实现中定义的,而 static 绑定到被调用的类。
gfg