जवाबों:
इसका मतलब है कि आपने पहले ही एक वर्ग बना लिया है।
उदाहरण के लिए:
class Foo {}
// some code here
class Foo {}
वह दूसरा फू त्रुटि को फेंक देगा।
आपके पास एक से अधिक बार घोषित किए गए समान नाम का एक वर्ग है। शायद कई के माध्यम से शामिल हैं। अन्य फ़ाइलों को शामिल करते समय आपको कुछ का उपयोग करने की आवश्यकता होती है
include_once "something.php";
कई समावेशन को रोकने के लिए। ऐसा होना बहुत आसान है, हालांकि यह हमेशा स्पष्ट नहीं होता है, क्योंकि आपके पास एक दूसरे द्वारा शामिल की जा रही फाइलों की एक लंबी श्रृंखला हो सकती है।
ऐसा तब होता है जब आप किसी पृष्ठ में एक से अधिक बार कक्षा घोषित करते हैं। आप उस क्लास को या तो एक स्टेटमेंट के साथ (जैसे नीचे) लपेट कर ठीक कर सकते हैं, या आप require_once()
इसके बजाय एक अलग फाइल और उपयोग में ला सकते हैं include()
।
if (!class_exists('TestClass')) {
// Put class TestClass here
}
class_exists('TestClass') === false
या!class_exists('TestClass')
यह तब होगा जब हम php लाइब्रेरी में बिल्ट इन क्लास में से किसी का भी इस्तेमाल करेंगे। मैंने निर्देशिका के रूप में वर्ग नाम का उपयोग किया और मुझे वही त्रुटि मिली। यदि आपको त्रुटि मिलती है, तो पहले यह सुनिश्चित कर लें कि आपके द्वारा उपयोग किया जाने वाला वर्ग नाम अंतर्निहित कक्षाओं में से एक नहीं है।
यदि आप __construct
विधि को एक से अधिक बार परिभाषित करते हैं तो यह त्रुटि भी हो सकती है ।
कभी-कभी PHP के FastCGI में कुछ बग के कारण ऐसा होता है।
इसे पुनः आरंभ करने का प्रयास करें। उबंटू में यह है:
service php-fastcgi restart
autoload
इस तरह का उपयोग करते समय मुझे एक ही समस्या थी :
<?php
function __autoload($class_name)
{
include $class_name . '.php';
}
__autoload("MyClass1");
$obj = new MyClass1();
?>
और अन्य वर्ग में था:
namespace testClassNamespace;
class MyClass1
{
function __construct()
{
echo "MyClass1 constructor";
}
}
namespace testClassNamespace;
दोनों फाइलों में मेरे उदाहरण में नाम स्थान की अनुकूलता बनाए रखने के लिए विनम्रता है ।
PHP 5.3 (मुझे लगता है कि पुराने संस्करण भी) विभिन्न मामलों में एक ही नाम के साथ समस्या है। इसलिए मुझे यह समस्या तब हुई जब एक वर्ग लॉगिन और इंटरफ़ेस यह लॉग इन लागू करता है। जब मैंने LogIn का नाम बदलकर Log_In कर दिया तो समस्या हल हो गई।
जब भी आप एक चीज़ को शामिल करते हैं या आवश्यकता होती है, तो उसका नाम होता है, जैसे कि class.login.php। आप इसे इस तरह से शामिल कर सकते हैं:
include_once class.login.php or
require_once class.login.php
इस तरह यह कभी भी त्रुटि नहीं करता है।
यह फ़ंक्शन आपको यह बताने के लिए एक स्टैक प्रिंट करेगा जहां से इसे बुलाया गया था:
function PrintTrace() {
$trace = debug_backtrace();
echo '<pre>';
$sb = array();
foreach($trace as $item) {
if(isset($item['file'])) {
$sb[] = htmlspecialchars("$item[file]:$item[line]");
} else {
$sb[] = htmlspecialchars("$item[class]:$item[function]");
}
}
echo implode("\n",$sb);
echo '</pre>';
}
इस फ़ंक्शन को उस फ़ाइल के शीर्ष पर कॉल करें जिसमें आपकी कक्षा शामिल है।
कभी-कभी यह केवल एक बार प्रिंट करेगा, भले ही आपकी कक्षा को दो या अधिक बार शामिल किया जा रहा हो। ऐसा इसलिए है क्योंकि PHP वास्तव में किसी भी कोड को निष्पादित करने से पहले एक फाइल में सभी शीर्ष स्तर की कक्षाओं को पार्स करता है और घातक त्रुटि को तुरंत फेंकता है। इसे मापने के लिए, अपनी कक्षा की घोषणा को इसमें शामिल करेंif(true) { ... }
, जो आपकी कक्षा को एक स्तर के दायरे में ले जाएगी। फिर आपको पीएचपी घातक त्रुटियों से पहले अपने दो निशान प्राप्त करने चाहिए।
इससे आपको यह पता लगाने में मदद मिलेगी कि आप एक जटिल परियोजना में कई बार कहाँ से शामिल किए जा रहे हैं।
एक अन्य संभावित अपराधी स्रोत नियंत्रण और अनसुलझे संघर्ष है। SVN परस्पर विरोधी कोड फ़ाइल में एक ही वर्ग को दो बार दिखाई दे सकता है; इसके दो वैकल्पिक संस्करण ("मेरा" और "उनका")।
मुझे उसी समस्या का सामना करना पड़ा है: नया php संस्करण एक ही फ़ाइल के एकाधिक झुकाव (एक पुस्तकालय के रूप में) के साथ समान व्यवहार नहीं करता है, इसलिए अब मुझे अपने सभी शामिल को कुछ change_once द्वारा बदलना होगा।
या यह ट्रिक मदद कर सकती है, यदि आप अपने पुस्तकालय में बहुत अधिक कक्षा में हैं ...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
मुझे एक ही समस्या थी "PHP घातक त्रुटि: वर्ग XYZ.php redeclare नहीं कर सकता"।
मेरे पास दो निर्देशिकाएं हैं controller
और model
मैंने दोनों निर्देशिकाओं में गलती से XYZ.php द्वारा अपलोड किया है। (इसलिए एक ही नाम से फ़ाइल समस्या का कारण बनती है)।
अपनी पूरी परियोजना में खोजें और सुनिश्चित करें कि आपके पास केवल एक वर्ग XYZ.php है।
अपनी कक्षा में एक नाम स्थान जोड़ें ताकि आप उसी वर्ग के नाम का उपयोग कर सकें।
इसका वास्तव में मतलब है कि पृष्ठ में कक्षा पहले से ही घोषित है और आप इसे फिर से बनाने की कोशिश कर रहे हैं।
एक सरल तकनीक इस प्रकार है।
मैंने निम्नलिखित के साथ समस्या हल की। आशा है कि यह आपकी थोड़ी मदद करेगा।
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}