gpt4 book ai didi

PHP 父方法覆盖不起作用(使用命名空间)

转载 作者:行者123 更新时间:2023-12-04 17:06:40 25 4
gpt4 key购买 nike

对于代码的每个部分,我都有三个不同的文件。 (我使用类自动加载器)。
第一个文件(/classes/Test/Foo.php):

<?php
namespace Test;

class Foo
{
public $id;

function __construct(int $id)
{
$this->id = $id;
}

public function get() : string
{
return "FOO:" . $this->id;
}
}

第二个文件(/classes/Test/Bar.php):
<?php
namespace Test;

class Bar extends Foo
{
public function get() : string
{
return "BAR:" . $this->id;
}
}

第三个文件(/index.php):
<?php
namespace Test;
include "autoloader.php";
$bar = new Bar(1);
echo $bar->get();

当我执行第三个文件时,我根本没有得到任何输出,甚至没有错误
...但如果我将所有代码放在一个文件中,它就可以工作。
<?php
namespace Test;

class Foo
{
public $id;

function __construct(int $id)
{
$this->id = $id;
}

public function get() : string
{
return "FOO:" . $this->id;
}
}

class Bar extends Foo
{
public function get() : string
{
return "BAR:" . $this->id;
}
}

$bar = new Bar(1);
echo $bar->get();

输出:酒吧:1

可能是什么问题呢?

自动加载代码:
<?php
spl_autoload_register(function($class) {
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/" . str_replace("\\", "/", $class) . ".php";
});

最佳答案

自动加载器所需的文件路径将反射(reflect)类名 包括命名空间 - 这需要与磁盘上的目录结构完全匹配。

内回调到 spl_autoload_register , $class将首先作为 传入测试\酒吧 .这导致它试图包含文件 类/测试/Bar.php ,它不存在。这将引发 fatal error - 听起来您的错误报告设置未配置为显示此错误。

对于您发布的文件,您的目录结构需要如下所示:

.
├── classes
│   └── Test
│   ├── Bar.php
│   └── Foo.php
├── autoloader.php
└── index.php

关于PHP 父方法覆盖不起作用(使用命名空间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50739892/

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