php - 抽象私有(private)函数

标签 php inheritance abstraction

以下代码会让 PHP 对 customMethod() 是私有(private)的感到不满。为什么会这样?可见性是由声明而不是定义的地方决定的吗?

如果我想让 customMethod 只对 Template 类中的样板代码可见并防止它被覆盖,我是否可以将它设为 protected 和最终的?

模板.php:

abstract class Template() {
    abstract private function customMethod();

    public function commonMethod() {
        $this->customMethod();
    }
}

CustomA.php:

class CustomA extends Template {
    private function customMethod() {
       blah...
    }
}

主.php

...
$object = new CustomA();
$object->commonMethod();
..

最佳答案

抽象方法不能是私有(private)的,因为根据定义它们必须由派生类实现。如果您不希望它是public,则需要对其进行protected,这意味着它可以被派生类看到,但没有其他人可以看到。

The PHP manual on abstract classes向您展示以这种方式使用 protected 的示例。

关于php - 抽象私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7939199/

相关文章:

php - JSON数组到PHP,按索引循环

php - 无法在 php 正则表达式中使用 OR( | )

php - 引用 PHP 对象中的计数

Java - 创建伪 native 类型

c# - 抽象自动映射器预测

php - SPARQL 查询以获取节点的所有父节点

c++ - 父级上 protected 构造函数和继承的默认构造函数不 protected

java - 为什么继承的默认方法不能像继承的类方法那样实现另一个接口(interface)?

oop - OOP : multiple, 中的抽象但相当不同的上下文?

java - 在同一对象上使用抽象和接口(interface),而无需对其进行强制转换