Adakah yang tahu apa yang bisa menyebabkan masalah ini?
Kesalahan PHP fatal: Tidak dapat mendeklarasikan ulang kelas
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Adakah yang tahu apa yang bisa menyebabkan masalah ini?
Kesalahan PHP fatal: Tidak dapat mendeklarasikan ulang kelas
if(!class_exists('YourClass')){ include 'YourClass.php'; }
Jawaban:
Itu berarti Anda sudah membuat kelas.
Misalnya:
class Foo {}
// some code here
class Foo {}
Foo kedua akan melempar kesalahan.
Anda memiliki kelas dengan nama yang sama dinyatakan lebih dari sekali. Mungkin melalui beberapa termasuk. Saat menyertakan file lain, Anda perlu menggunakan sesuatu seperti
include_once "something.php";
untuk mencegah beberapa inklusi. Sangat mudah untuk ini terjadi, meskipun tidak selalu jelas, karena Anda bisa memiliki rantai panjang file yang dimasukkan satu sama lain.
Itu terjadi ketika Anda mendeklarasikan suatu kelas lebih dari sekali dalam satu halaman. Anda dapat memperbaikinya dengan membungkus kelas itu dengan pernyataan if (seperti di bawah), atau Anda dapat meletakkannya di file yang terpisah dan digunakan require_once()
, sebagai ganti include()
.
if (!class_exists('TestClass')) {
// Put class TestClass here
}
class_exists('TestClass') === false
atau!class_exists('TestClass')
Ini akan terjadi jika kita menggunakan salah satu kelas bawaan di perpustakaan php. Saya menggunakan nama kelas sebagai Direktori dan saya mendapatkan kesalahan yang sama. Jika Anda mendapatkan kesalahan terlebih dahulu pastikan bahwa nama kelas yang Anda gunakan bukan salah satu dari kelas bawaan.
Kesalahan ini juga dapat terjadi jika Anda mendefinisikan __construct
metode lebih dari sekali.
Terkadang itu terjadi karena beberapa bug di FastCGI PHP.
Coba mulai lagi. Di Ubuntu:
service php-fastcgi restart
Saya memiliki masalah yang sama saat menggunakan autoload
seperti berikut:
<?php
function __autoload($class_name)
{
include $class_name . '.php';
}
__autoload("MyClass1");
$obj = new MyClass1();
?>
dan di kelas lain ada:
namespace testClassNamespace;
class MyClass1
{
function __construct()
{
echo "MyClass1 constructor";
}
}
Solusinya adalah untuk menjaga kompatibilitas namespace, dalam contoh saya namespace testClassNamespace;
di kedua file.
PHP 5.3 (dan saya pikir versi yang lebih lama juga) tampaknya memiliki masalah dengan nama yang sama dalam kasus yang berbeda. Jadi saya punya masalah ini ketika kelas Login dan antarmuka mengimplementasikan LogIn. Setelah saya mengganti nama Masuk ke Log_In masalah terselesaikan.
Lakukan saja satu hal setiap kali Anda memasukkan atau memerlukan nama file yaitu class.login.php. Anda dapat memasukkannya dengan cara ini:
include_once class.login.php or
require_once class.login.php
Dengan cara ini tidak pernah terjadi kesalahan.
Fungsi ini akan mencetak tumpukan yang memberi tahu Anda dari mana ia dipanggil:
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>';
}
Panggil fungsi ini di bagian atas file yang termasuk kelas Anda.
Kadang-kadang hanya akan mencetak sekali, meskipun kelas Anda dimasukkan dua kali atau lebih. Ini karena PHP benar-benar mem-parsing semua kelas tingkat atas dalam file sebelum mengeksekusi kode apa pun dan langsung melemparkan kesalahan fatal. Untuk memperbaiki ini, bungkus deklarasi kelas Anda di if(true) { ... }
, yang akan memindahkan kelas Anda ke tingkat yang lebih rendah. Maka Anda harus mendapatkan dua jejak Anda sebelum kesalahan fatal PHP.
Ini akan membantu Anda menemukan di mana kelas Anda dimasukkan dari beberapa kali dalam proyek yang kompleks.
Penyebab lain yang mungkin adalah kontrol sumber dan konflik yang belum terselesaikan. SVN dapat menyebabkan kelas yang sama muncul dua kali dalam file kode yang bertentangan; dua versi alternatifnya ("milikku" dan "milik mereka").
Saya telah mengalami masalah yang sama: versi php yang lebih baru tidak menangani hal yang sama dengan banyak pertikaian dari file yang sama (sebagai perpustakaan), jadi sekarang saya harus mengubah semua menyertakan saya dengan beberapa include_once.
Atau trik ini dapat membantu, jika Anda tidak memiliki terlalu banyak kelas di perpustakaan Anda ...
if( class_exists('TestClass') != true )
{
//your definition of TestClass
}
Saya memiliki masalah yang sama "Kesalahan PHP fatal: Tidak dapat mendeklarasikan ulang kelas XYZ.php".
Saya memiliki dua direktori seperti controller
dan model
dan saya mengunggahnya dengan salah XYZ.php di kedua direktori. (Jadi file dengan nama yang sama menyebabkan masalah).
Temukan di seluruh proyek Anda dan pastikan Anda hanya memiliki satu kelas XYZ.php.
Tambahkan namespace di kelas Anda sehingga Anda dapat menggunakan nama kelas yang sama.
Ini sebenarnya berarti kelas sudah dideklarasikan di halaman dan Anda mencoba membuatnya kembali.
Teknik sederhana adalah sebagai berikut.
Saya memecahkan masalah dengan yang berikut ini. Semoga ini sedikit membantu Anda.
if(!class_exists("testClassIfExist"))
{
require_once("testClassIfExist.php");
}