gpt4 book ai didi

php - 不能将构造函数定义为 protected 或私有(private)的!为什么?

转载 作者:可可西里 更新时间:2023-11-01 12:28:05 24 4
gpt4 key购买 nike

--- A.php ----
require_once 'B.php';

class A
{
public function __constructor($x){...}

public function foo()
{
$b = B::getInstance();
...
}
}

--- B.php ----
require_once 'A.php';

class B extends A
{
protected static $_instance = null;

protected function __construct(){}

public static function getInstance()
{....}
}

PHP 刚到行就停止解释代码

protected function __construct(){}

并输出之前的所有内容,之后不会发送到浏览器的任何内容。

一旦我把那条线去掉,就把它改成

// protected function __construct(){}

一切正常!?

我不明白。

有什么想法吗?

最佳答案

我刚刚创建了一个简单的测试文件来确认这是否也发生在我的机器上,我想我已经找到了答案。采取以下代码:

<?php
error_reporting( E_ALL | E_STRICT );
class Foo {
public function __construct( ) {
}
}

class Bar extends Foo {
protected function __construct( ) {
}
}

当尝试执行该代码时,我收到一个 fatal error :“PHP fatal error :Bar::__construct() 的访问级别必须在/home/berry/foo.php 中公开(如在类 Foo 中) 12"这意味着如果父类已经定义了访问级别,则您不能更改子类中的访问级别,这实际上很有意义:我猜 PHP 不知道要调用哪个构造函数。

作为旁注:通过查看您的代码,B 扩展了 A,而 A 使用 B。为什么会这样,这对我来说似乎是一个奇怪的结构?我猜你真正想要的是 composition, not inheritance .

关于php - 不能将构造函数定义为 protected 或私有(private)的!为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4712169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com