Aptallık Giriş: PHP Class dosyasında Sınıf dosyası değil Sınıfı bulur

1 Cevap php

Ben burada bir kaybı var. Ben başka bir dosya ve bir alt sınıfta soyut bir üst sınıfı tanımladık. Ben bir bunu eklemek bulmak için süper sınıflar dosya ve yığın izleme raporlarını gerektirmiştir. Ancak, o 'uzanır' Sınırda zaman bir hata döndürür: Fatal error: Class 'HTMLBuilder' not found in View/Markup/HTML/HTML4.01/HTML4_01Builder.php on line 7. Bunun bir an önce fabrika kullanan başka bir sınıfı ağaç ile çalışma vardı. Ben sadece fabrika ve tüketici arasında oluşturucu bir katman ekledi. Fabrika tabakası neredeyse tam olarak aynı açısından içerir ve bağımlılıkları baktı. Yani bana en HTMLBuilder.php dosya düzgün dahil veya doğru yorumlanması ya da böyle değil neden bu aptalca bir şey yapmış olmalı düşündürüyor.

İşte tam yığın izleme (yolları biraz değişmiş) bulunuyor:

#   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

Burada söz kodu:

Üst sınıf (View / Biçimlendirme / 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);

}

?>

Çocuk Sınıfı, (View/Markup/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;
    }

}


?>

Ben her türlü fikir seviniriz. Ben yanlış gidiyor ne gibi burada tam bir kaybı yaşıyorum. Bunu ben sadece göremiyorum aptalca şey olduğundan emin değilim ...

1 Cevap

Unutmayın, izleme, HTMLBuilder.php MarkupBuilder.php HTML4_01Builder.php gerektirir gerektirir. Bir şunlardır döngüsü var. HTML4_01Builder tanımlandığında, PHP HTMLBuilder.php işlem bitmiş değil. Özellikle, abstract class HTMLBuilder tanımı başlangıcını ulaşamamıştır.

Atası tanımlarken soyundan sınıfı dahil etmek gerek yoktur. PHP sınıf adları geç bağlama kullanır, bu nedenle soyundan yalnızca yöntemlerinin çağrıldığı zaman bulunması gerekir.

MarkupBuilder.php:

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

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