शामिल यह काम नहीं करता:विस्तारित वर्ग नहीं मिला जब बेस वर्ग एक अलग में है फ़ाइल
test.php:
include_once('test-include.php');
$main = new mainClass();
//======================================================================
class mainClass {
function __construct() {
$test2 = new Test2();
echo $test2->var;
}
}
//======================================================================
class Test2 extends Test1 { // test2
var $var = 'b';
}
परीक्षण include.php:
// this does get printed out, so I know the include statement is working
echo 'DEBUG: this is the test-include.php file<br>';
//======================================================================
class Test1 { // test1
var $var = 'a';
}
यह निम्नलिखित त्रुटि देता है
PHP Fatal error: Class 'Test2' not found in /path/to/test.php on line 8
इस जबकि
काम करता है
test2.php:
// this is in the same position as the include statement in test.php
//======================================================================
class Test1 { // test1
var $var = 'a';
}
$main = new mainClass();
//======================================================================
class mainClass {
function __construct() {
$test2 = new Test2();
echo $test2->var;
}
}
//======================================================================
class Test2 extends Test1 { // test2
var $var = 'b';
}
क्यों बच्चे वर्ग है कि यह विस्तार नहीं पाया जा करने के लिए एक में शामिल फ़ाइल में बेस वर्ग (Test1) डालने का कारण नहीं है ? दूसरे शब्दों में, पहला उदाहरण विफल रहा है क्योंकि जब हम इसे तुरंत चालू करने का प्रयास करते हैं तो यह टेस्ट 2 नहीं ढूंढ सकता है। इस तरह की समझ में आता है क्योंकि हम कोड निष्पादन प्रवाह में अभी तक टेस्ट 2 तक नहीं पहुंच पाए हैं। हालांकि, दूसरे उदाहरण में (शामिल कथन के बिना) कोई त्रुटि नहीं है, भले ही यह एक समान स्थिति है (हम कोड निष्पादन में टेस्ट 2 कक्षा तक नहीं पहुंच पाए हैं)
ओह, और यह संस्करण 5.1.6 के तहत है ।
अद्यतन:
ठीक है, Daff सही है - अगर मैं test.php उदाहरण में समाप्त करने के लिए
$main = new mainClass();
ले जाते हैं, यह काम करता है। मैं अभी भी जानना चाहूंगा कि उपर्युक्त रेखा अंत में क्यों नहीं है - यह test2.php उदाहरण में ठीक काम करता है जिसमें अंत में $ main = new mainClass() लाइन नहीं है ।
अद्यतन 2:
ठीक है, मैं include_once
के स्थान पर require, require_once
और include
का उपयोग कर की कोशिश की है - इन में से कोई भी काम। और मैंने test-include.php फ़ाइल में एक टेस्ट इको स्टेटमेंट भी जोड़ा और इसे मुद्रित किया जाता है (साथ ही मुझे एक अस्तित्व में शामिल फ़ाइल के बारे में कोई त्रुटि नहीं मिलती है) इसलिए मुझे पता है कि शामिल कथन काम कर रहा है।
क्या आप वाकई काम कर रहे हैं? – Rufinus
यह कैसे विफल हो जाता है? संकलन त्रुटि, निष्पादन त्रुटि, कोई त्रुटि लेकिन गलत परिणाम? – Lucky
यदि आप "आवश्यकता" का उपयोग करते हैं तो आप क्या देखते हैं? यदि आप "echo" डालते हैं तो आप क्या देखते हैं यह test-include.php 'है; " "test-include.php" की शुरुआत में? क्या एक ही निर्देशिका में "test-include.php" है? क्या यह आपके पथ में शामिल है? – GZipp