কেউ কি জানেন যে কী কারণে এই সমস্যা হতে পারে?
পিএইচপি মারাত্মক ত্রুটি: শ্রেণি পুনরায় ঘোষিত করতে পারে না
if(!class_exists('YourClass')){ include 'YourClass.php'; }
কেউ কি জানেন যে কী কারণে এই সমস্যা হতে পারে?
পিএইচপি মারাত্মক ত্রুটি: শ্রেণি পুনরায় ঘোষিত করতে পারে না
if(!class_exists('YourClass')){ include 'YourClass.php'; }
উত্তর:
এর অর্থ আপনি ইতিমধ্যে একটি ক্লাস তৈরি করেছেন।
এই ক্ষেত্রে:
class Foo {}
// some code here
class Foo {}
যে দ্বিতীয় ফু ত্রুটি নিক্ষেপ করবে।
আপনার একই নামের ক্লাস একাধিকবার ঘোষিত হয়েছে। হতে পারে একাধিক মাধ্যমে। অন্যান্য ফাইলগুলি অন্তর্ভুক্ত করার সময় আপনার মতো কিছু ব্যবহার করা দরকার
include_once "something.php";
একাধিক অন্তর্ভুক্তি রোধ করতে। এটি হ'ল এটি খুব সহজ, যদিও এটি সর্বদা সুস্পষ্ট নয়, যেহেতু আপনি একে অপরের দ্বারা অন্তর্ভুক্ত হওয়া ফাইলগুলির একটি দীর্ঘ শৃঙ্খলা থাকতে পারে।
আপনি যখন কোনও পৃষ্ঠায় একাধিকবার ক্লাস ঘোষণা করেন তা ঘটে। আপনি যদি এই ক্লাসটি একটি if স্টেটমেন্ট (নীচের মত) দিয়ে মোড়ানো দ্বারা এটি ঠিক করতে পারেন, বা আপনি এটি একটি পৃথক ফাইলে রাখতে পারেন এবং require_once()
পরিবর্তে ব্যবহার করতে পারেন include()
।
if (!class_exists('TestClass')) {
// Put class TestClass here
}
class_exists('TestClass') === false
বা!class_exists('TestClass')
যদি আমরা পিএইচপি লাইব্রেরিতে অন্তর্নির্মিত কোনও ক্লাস ব্যবহার করি তবে এটি ঘটবে। আমি ক্লাসের নামটি ডিরেক্টরি হিসাবে ব্যবহার করেছি এবং একই ত্রুটি পেয়েছি। আপনি যদি ত্রুটি পান তবে প্রথমে নিশ্চিত হয়ে নিন যে আপনি যে শ্রেণীর নামটি ব্যবহার করছেন সেটি কোনও অন্তর্নির্মিত শ্রেণীর মধ্যে নয়।
আপনি যদি __construct
একাধিকবার পদ্ধতিটি নির্ধারণ করেন তবে এই ত্রুটিটিও ঘটতে পারে ।
কখনও কখনও এটি পিএইচপি এর ফাস্টসিজিআই-তে কিছু বাগের কারণে ঘটে happens
এটি পুনরায় চালু করার চেষ্টা করুন। উবুন্টুতে এটি:
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;
উভয় ফাইলে।
পিএইচপি 5.3 (আমি মনে করি পুরানো সংস্করণগুলিও) বিভিন্ন ক্ষেত্রে একই নামের সাথে সমস্যা রয়েছে। ক্লাস লগইন এবং ইন্টারফেসটি এটি লগইন প্রয়োগ করে তখন আমার এই সমস্যাটি হয়েছিল। আমি লগইনটির নাম লগ-ইন করার পরে সমস্যাটি সমাধান হয়ে গেল।
আপনি যখনই ক্লাস.লগিন.পিপি নামের ফাইলের নাম অন্তর্ভুক্ত করেন বা প্রয়োজন হয় কেবল একটি কাজ করুন। আপনি এটি এইভাবে অন্তর্ভুক্ত করতে পারেন:
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>';
}
আপনার ক্লাস অন্তর্ভুক্ত ফাইলের শীর্ষে এই ফাংশনটি কল করুন।
আপনার ক্লাসটি দুই বা ততোধিকবার অন্তর্ভুক্ত করা হলেও কখনও কখনও এটি কেবল একবার মুদ্রণ করা হবে। কারণ পিএইচপি আসলে কোনও কোড কার্যকর করার আগে একটি ফাইলের সমস্ত উচ্চ-স্তরের শ্রেণিকে পার্স করে এবং তাত্ক্ষণিকভাবে মারাত্মক ত্রুটি ছুঁড়ে দেয়। এটির প্রতিকারের জন্য, আপনার শ্রেণীর ঘোষণাটি মোড়ানোif(true) { ... }
যা আপনার শ্রেণিকে সুযোগের এক স্তরে নামিয়ে দেবে। তারপরে আপনার পিএইচপি মারাত্মক ত্রুটির আগে আপনার দুটি ট্রেস পাওয়া উচিত।
এটি আপনাকে কোনও জটিল প্রকল্পে একাধিকবার থেকে ক্লাসটি কোথায় অন্তর্ভুক্ত করা হচ্ছে তা সন্ধান করতে সহায়তা করবে।
আর একটি সম্ভাব্য অপরাধী হ'ল উত্স নিয়ন্ত্রণ এবং অমীমাংসিত বিরোধ। এসভিএন একই শ্রেণীর দ্বন্দ্বযুক্ত কোড ফাইলটিতে দুবার প্রদর্শিত হতে পারে; এর দুটি বিকল্প সংস্করণ ("আমার" এবং "তাদের")।
আমি একই সমস্যাটির মুখোমুখি হয়েছি: নতুন পিএইচপি সংস্করণ একই ফাইলের একাধিক ইনক্লুয়েস (লাইব্রেরি হিসাবে) এর সাথে একই আচরণ করে না, তাই এখন আমাকে কিছু অন্তর্ভুক্ত_আন্সে আমার সমস্ত পরিবর্তন করতে হবে।
অথবা এই কৌশলগুলি সাহায্য করতে পারে, যদি আপনার গ্রন্থাগারে খুব বেশি ক্লাস না থাকে ...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
আমার একই সমস্যা ছিল "পিএইচপি মারাত্মক ত্রুটি: এক্সওয়াইজেড.এফপি ক্লাসটি পুনরায় ঘোষণা করতে পারে না"।
আমি দুই ডিরেক্টরি মত আছে controller
এবং model
আমি উভয় ডিরেক্টরিগুলি থেকে ভুল করে XYZ.php দ্বারা আপলোড করা। (ইস্যু কারণ একই নামের ফাইল তাই)।
আপনার পুরো প্রকল্পটি সন্ধান করুন এবং নিশ্চিত করুন যে আপনার কাছে কেবলমাত্র একটি ক্লাস XYZ.php আছে।
আপনার শ্রেণিতে একটি নেমস্পেস যুক্ত করুন যাতে আপনি একই শ্রেণীর নাম ব্যবহার করতে পারেন।
এর অর্থ হ'ল ক্লাসটি ইতিমধ্যে পৃষ্ঠায় ঘোষণা করা হয়েছে এবং আপনি এটি পুনরায় তৈরি করার চেষ্টা করছেন।
একটি সহজ কৌশল অনুসরণ করা হয়।
আমি নিম্নলিখিতটি দিয়ে সমস্যাটি সমাধান করেছি। আশা করি এটি আপনাকে কিছুটা সাহায্য করবে।
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}