2010-04-24 12 views
5

मैं यहां एक नुकसान में हूं। मैंने एक फ़ाइल में एक अमूर्त सुपरक्लास परिभाषित किया है और दूसरे में एक उप-वर्ग है। मुझे सुपर-क्लास फ़ाइल और स्टैक ट्रेस रिपोर्ट की आवश्यकता है ताकि इसे शामिल किया जा सके। हालांकि, जब यह 'विस्तार' रेखा को हिट करता है तो यह एक त्रुटि देता है: Fatal error: Class 'HTMLBuilder' not found in View/Markup/HTML/HTML4.01/HTML4_01Builder.php on line 7। मैंने यह एक और वर्ग के पेड़ के साथ काम किया था जो एक पल पहले कारखानों का उपयोग करता था। मैंने कारखानों और उपभोक्ता के बीच बिल्डर परत को अभी जोड़ा। कारखाने की परत में शामिल हैं और निर्भरताओं के मामले में लगभग बिल्कुल वही दिखता है। इसलिए मुझे लगता है कि मैंने कुछ मूर्खतापूर्ण तरीके से किया होगा जो HTMLBuilder.php फ़ाइल को सही तरीके से शामिल नहीं किया जा सकता है या सही तरीके से व्याख्या नहीं किया जा सकता है।मूर्खता जांच: PHP कक्षा कक्षा फ़ाइल पाती है लेकिन फ़ाइल में कक्षा

यहाँ पूर्ण स्टैक ट्रेस (पथ से थोड़ा बदल) है:

जनक वर्ग (देखें/मार्कअप/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); 

} 

?> 

# 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 

यहाँ प्रश्न में कोड है

बाल क्लास, (देखें/मार्कअप/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; 
    } 

} 


?> 

मैं किसी भी और सभी विचारों की सराहना करता हूं। क्या गलत हो रहा है के रूप में मैं यहां एक पूर्ण नुकसान पर हूं। मुझे यकीन है कि यह कुछ बेवकूफ है जिसे मैं नहीं देख सकता ...

+0

क्या 'include_path' का क्या महत्व है? – outis

+0

include_path =>।:/Usr/share/php:/usr/share/pear =>।:/Usr/share/php:/usr/share/नाशपाती –

उत्तर

2

ध्यान दें कि, ट्रेस में, HTMLBuilder.php को MarkupBuilder.php की आवश्यकता है HTML4_01Builder.php। आपके पास एक चक्र शामिल है। जब HTML4_01Builder परिभाषित किया गया है, तो PHP ने HTMLBuilder.php को संसाधित नहीं किया है। विशेष रूप से, यह abstract class HTMLBuilder परिभाषा की शुरुआत तक नहीं पहुंच पाया है।

पूर्वजों को परिभाषित करते समय एक वंश वर्ग को शामिल करने की आवश्यकता नहीं है। PHP कक्षा के नामों के देर से बाध्यकारी का उपयोग करता है, इसलिए वंश को केवल विधियों के आह्वान के समय मौजूद होना चाहिए।

MarkupBuilder.php:

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

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

हाँ, मैंने देखा। अजीब बात यह है कि कारखाने के पेड़ में सटीक चक्र शामिल है। संरचना में समान। यह एक हिचकी के साथ काम किया। –

+0

@Daniel: क्या आपका मतलब है कि एक फ़ाइल में परिभाषित एक अमूर्त फैक्ट्री क्लास है जो प्रत्यक्ष या अप्रत्यक्ष रूप से एक फ़ाइल शामिल करती है जो बेस क्लास परिभाषित होने से पहले अमूर्त फैक्ट्री क्लास के वंशज को परिभाषित करती है? मुझे यकीन है कि यह बिल्कुल वैसा ही नहीं है। – outis

+0

बिल्कुल वही। MarkupFactory को एक इंस्टेंस फ़ंक्शन मिलता है जो HTML4_01Factory() पर एक उदाहरण देता है। HTML4_01 फैक्टरी HTMLFactory से निकलती है जो बदले में मार्कअप फैक्ट्री से निकलती है। वही पाश - यह काम किया। जब मैं उस कोड को लिख रहा था तो उसने चेतावनी झंडा लगाया, लेकिन मैंने आगे बढ़ने का फैसला किया और वैसे भी कोशिश की। –

संबंधित मुद्दे