PHP抽象类和受保护的方法

哈维尔·西瓦克(Javier Sivack)

就像标题一样,我对此代码有疑问:

abstract class AClass {
    abstract protected function a1();
    abstract protected function a2();

    public function show() {
        return $this->a1() . "<br>" . $this->a2();
    }
}


class A1 extends AClass {

    protected function a1() {
        return 'A1a1';
    }

    protected function a2() {
        return 'A1a2';
    }
}

class A2 extends AClass {

    protected function a1() {
        return 'A2a1';
    }

    protected function a2() {
        return 'A2a2';
    }
}

class AA {

    public function __construct() {
        $a11 = new A1();

        $a22 = new A2();

        $this->inter($a11);
        $this->inter($a22);
    }

    private function inter(AClass $class)  {
        echo $class->show();
    }
}

$aa = new AA();

它抛出:

致命错误:在第38行的C:\ xampp \ htdocs \ Learning \ index.php中从上下文“ AA”调用受保护的A1 :: a1()

38行是这样的:

$a11 = new A1();

我不明白如果我不在那一行调用a1(),为什么会抛出该错误。

感谢致敬

哈维尔

格扎·勃姆(Geza Boehm)

在第38行,您创建了类A1的实例,因此调用了构造函数:它function a1()在第15行。由于类名不区分大小写,因此构造函数名也是如此。

由于构造函数受到保护,因此不能从类外部调用它。也许您可以创建一个公共静态函数,在不实例化的情况下调用它,并且可以在其内部调用构造函数。这可能对Singleton类设计模式很有用。

如果只想使用常规方法测试抽象,则只需重命名函数即可,因此它们将不是构造函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP接口和抽象类继承的最佳实践?

来自分类Dev

抽象类-为什么我的受保护方法可以公开访问?

来自分类Dev

抽象类中受保护的内部构造函数

来自分类Dev

从抽象类继承方法

来自分类Dev

抽象类和接口

来自分类Dev

抽象类受保护的方法junit测试用例

来自分类Dev

抽象类和虚拟方法的问题:“无法分配抽象类型的对象”

来自分类Dev

PHP抽象类数组保护的属性

来自分类Dev

重载抽象类中的抽象方法

来自分类Dev

抽象类中受保护的抽象或公共抽象方法

来自分类Dev

Java抽象类:受保护的字段或公共set / get方法

来自分类Dev

公共与受保护的抽象类方法

来自分类Dev

PHPUnit使用名为“ Method”的方法测试和抽象类

来自分类Dev

抽象类和toString()方法

来自分类Dev

PHP-如果抽象类中的所有方法都是抽象的,那么接口和抽象类之间的区别是什么

来自分类Dev

PHP中的抽象类

来自分类Dev

如何声明抽象类和模型实现方法?

来自分类Dev

非抽象类的非空方法和抽象方法的抽象方法的好处?

来自分类Dev

PHP单元测试抽象类中的受保护变量

来自分类Dev

Java实例vs抽象类和方法

来自分类Dev

phpunit中具有受保护方法的抽象类

来自分类Dev

抽象类中的抽象方法

来自分类Dev

接口,抽象类和抽象类的方法

来自分类Dev

PHPUnit使用名为“ Method”的方法测试和抽象类

来自分类Dev

没有抽象类的抽象方法

来自分类Dev

从抽象类测试子类的抽象方法

来自分类Dev

@ModelAttribute和抽象类

来自分类Dev

构造函数和抽象类中的java调用方法?

来自分类Dev

c#和php抽象类实现的区别