gpt4 book ai didi

PHP Class 找到 Class 文件但找不到文件中的 Class

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:02 33 4
gpt4 key购买 nike

我在一个文件中定义了一个抽象父类(super class),在另一个文件中定义了一个子类。我需要父类(super class)文件和堆栈跟踪报告来找到一个包含它。

但是,当它到达“extends”行时返回错误:Fatal error: Class 'HTMLBuilder' not found in View/Markup/HTML/HTML4.01/HTML4_01Builder.php on line 7

刚才我让这个与另一个使用工厂的类树一起工作。我刚刚在工厂和消费者之间添加了构建器层。工厂层在包含和依赖方面看起来几乎完全相同。

所以这让我觉得我一定是做了一些愚蠢的事情,导致 HTMLBuilder.php 文件没有被正确包含或解释不正确等等。

这是完整的堆栈跟踪(路径略有改变):

#   Time    Memory  Function    Location
1 0.0001 53904 {main}( ) ../index.php:0
2 0.0002 67600 require_once( 'View/Page.php' ) ../index.php:3
3 0.0003 75444 require_once( 'View/Sections/SectionFactory.php' ) ../Page.php:4
4 0.0003 81152 require_once( 'View/Sections/HTML/HTMLSectionFactory.php' ) ../SectionFactory.php:3
5 0.0004 92108 require_once( 'View/Sections/HTML/HTMLTitlebarSection.php' ) ../HTMLSectionFactory.php:5
6 0.0005 99716 require_once( 'View/Markup/HTML/HTMLBuilder.php' ) ../HTMLTitlebarSection.php:3
7 0.0005 103580 require_once( 'View/Markup/MarkupBuilder.php' ) ../HTMLBuilder.php:3
8 0.0006 124120 require_once( 'View/Markup/HTML/HTML4.01/HTML4_01Builder.php' ) ../MarkupBuilder.php:3

这是有问题的代码:

父类(View/Markup/HTML/HTMLBuilder.php):

<?php

require_once('View/Markup/MarkupBuilder.php');

abstract class HTMLBuilder extends MarkupBuilder {

public abstract function getLink($text, $href);

public abstract function getImage($src, $alt);

public abstract function getDivision($id, array $classes=NULL, array $children=NULL);

public abstract function getParagraph($text, array $classes=NULL, $id=NULL);

}

?>

子类,( View /标记/HTML/HTML4.01/HTML4_01Builder.php):

<?php

require_once('HTML4_01Factory.php');
require_once('View/Markup/HTML/HTMLBuilder.php');


class HTML4_01Builder extends HTMLBuilder {
private $factory;

public function __construct() {
$this->factory = new HTML4_01Factory();
}

public function getLink($href, $text) {
$link = $this->factory->getA();
$link->addAttribute('href', $href);
$link->addChild($this->factory->getText($text));
return $link;
}

public function getImage($src, $alt) {
$image = $this->factory->getImg();
$image->addAttribute('src', $src);
$image->addAttribute('alt', $alt);
return $image;
}

public function getDivision($id, array $classes=NULL, array $children=NULL) {
$div = $this->factory->getDiv();
$div->setID($id);
if(!empty($classes)) {
$div->addClasses($classes);
}
if(!empty($children)) {
$div->addChildren($children);
}
return $div;
}

public function getParagraph($text, array $classes=NULL, $id=NULL) {
$p = $this->factory->getP();
$p->addChild($this->factory->getText($text));
if(!empty($classes)) {
$p->addClasses($classes);
}
if(!empty($id)) {
$p->setID($id);
}
return $p;
}

}


?>

最佳答案

请注意,在跟踪中,HTMLBuilder.php 需要 MarkupBuilder.php 需要 HTML4_01Builder.php。你有一个包含周期。当 HTML4_01Builder 被定义时,PHP 还没有完成对 HTMLBuilder.php 的处理。特别是,它还没有到达 abstract class HTMLBuilder 定义的开头。

定义祖先时不需要包含子类。 PHP 使用类名的后期绑定(bind),因此后代只需要在调用方法时存在。

MarkupBuilder.php:

<?php
// unnecessary:
//require_once('View/Markup/HTML/HTML4.01/HTML4_01Builder.php');

class MarkupBuilder {
static public function getInstance(...) {
...
return new HTML4_01Builder(...);

关于PHP Class 找到 Class 文件但找不到文件中的 Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706412/

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