php静态方法能继承么
时间 : 2023-02-18 06:18:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

php 中的静态方法是指在 __construct() 方法之外的类的静态方法。在静态方法中可以采用 self 的方法调用类的其他静态方法和静态属性。面对继承中的一个问题,能不能继承静态方法,就让很多PHPer头疼了。

在 php 中,子类也可以继承父类中的各种成员,不过竟然不能继承静态方法,要想调用静态成员(成员变量、静态方法),必须使用 parent::静态成员 的形式。

静态方法不能被继承,这是由 PHP 的设计决定的,internal binding 决定了属性和方法的绑定方式,其决定不了静态方法的继承。静态变量和静态方法的绑定方式不同于通常的变量和方法,在执行时,是从类中查找目标函数,而不是从对象中查找。

借助 parent:: 键字,还有一种变通方法能让你使用父类声明的静态方法,但也许不容易想到。在 PHP 中可以使用类自身的 uses 来实现非官方的继承,不过你必须是先对父类的静态方法定义出一个新的名字,接着再在子类的 uses 部分定义出父类的静态方法原先的名字,这样,如果在父类中定义的静态方法没有变更,子类就能使用它,尽管它没有继承的形式被重写。

总之,PHP 中的静态方法是无法继承的,但依然存在一些变通方法来让我们使用父类中的定义的静态方法,也许不太方便,但以及比不能用来得强。

php静态方法能继承吗?

答案是是的,php静态方法能够被继承。虽然静态方法的功能和普通的实例方法的功能有所不同,但是它也是同样的继承性,这就意味着,静态方法也能够被子类重写。

静态方法的实现上可以大致分为两种类型:父类的静态方法和子类的静态方法。它们之间的关系可以用语言来叙述如下:子类将会继承父类中定义的静态方法,但是如果子类本身定义了相同名称的静态方法,那么这个静态方法将会覆盖掉父类中定义的静态方法。

这也就是为什么子类可以重写父类中定义的静态方法的原因。举个例子,如果有一个抽象类定义了一个汽车类,其抽象类中定义了一个静态方法叫做showInfor,其内容为“racing cars are faster”。如果它的子类是摩托车类的话,它的showInfor方法的定义将会是“motorcycles are more agile”,这样它就可以成功地重写了父类的静态方法。

所以总结下来,php静态方法是可以继承的,虽然它和普通实例方法有所不同,但是子类可以覆盖掉父类中定义的静态方法。