این مقاله راهنمایی کوتاه در مورد نحوه مقابله با خطای Cannot redeclare است:
Fatal error: Cannot redeclare function name (previously declared in /path/to/file.php:3) in
/path/to/other-file.php on line 9
اگر کد شما شامل دو یا چند تابع PHP باشد که دقیقاً به یک نام هستند ، خطای مهلک فوق نشان داده می شود. برخلاف سایر زبان های برنامه نویسی مانند Java و C++ زبان PHP از روش Overloading پشتیبانی نمی کند. در عوض ، باید از پارامترهای تابع پیشفرض/اختیاری استفاده کنید.
فهرست محتوایی مقاله
خطای cannot redeclare در توابع
اگر خطا را با دقت بخوانید ، باید ببینید مسئله چیست. در مثال بالا ، نام تابع مورد نظر قبلاً در LINE 3 در file.php اعلام شده بود. این امر منجر به ایجاد خطای مهلکی در هنگام تلاش برای ایجاد تابع دیگری دقیقا با همان نام در خط 9 در other-file.php شد.
به مثال زیر نگاهی بیندازید:
function test(){
//do something
}
function test(){
//do something else
}
اگر سعی کنید قطعه کد بالا را اجرا کنید ، یک خطای مهلک ایجاد می شود. این بدین دلیل است که من دو تابع جداگانه با یک نام ” test “ایجاد کردم.
خوب ، پس چگونه این خطا را برطرف کنم؟
این مشکل به برنامه PHP شما و آنچه در تلاش هستید به دست آورید بستگی دارد.
نام تابع دیگر را به چیز دیگری تغییر دهید.
اگر به تابعی به نام test نیازی ندارید ، می توانید تابع دوم را به چیز دیگری تغییر نام دهید.
نحوه استاندارد تعریف یک تابع در PHP
در مورد بالا ، ما می توانیم موارد زیر را انجام دهیم:
function test(){
//do something
}
function myTest(){
//do something
}
همانطور که مشاهده می کنید ، من به سادگی دومین تابع آزمایشی را به myTest تغییر نام دادم.
بررسی کنید آیا نام تابع قبلاً استفاده شده است یا خیر.
اگر در موقعیتی قرار گرفتید که ممکن است نام تابع وجود داشته باشد یا نداشته باشد ، می توانید بررسی کنید که آیا نام تابع قبلاً تعریف شده است یا خیر.
مثالی از این رویکرد اختصاص به مسئله ای که در بالا داشتیم:
function test(){
//do something
}
if(!function_exists('test')){
function test(){
//do something
}
}
در قطعه کد بالا ، من از تابع function_exists استفاده کردم تا بررسی کنم آیا تابع test از قبل به عنوان یک تابع وجود دارد یا خیر. از آنجا که در مثال فوق وجود دارد ، تابع دوم هرگز ایجاد نمی شود.

خطای cannot redeclare در کلاس ها
Fatal error: Cannot redeclare Classname::function
توجه داشته باشید که متدها/توابع کلاس PHP نیز باید از همین قانون پیروی کنند:
/**
* Class called Test.
*/
class Test{
//Function 1
public function test(){
//do something
}
//Function 2
protected function test(){
//do something
}
}
$test = new Test();
اگر کد بالا را اجرا کنید ، منجر به خطای زیر می شود:
Fatal error: Cannot redeclare Test::test() in /path/to/file.php on line 14
دلیل این امر این است که یک کلاس PHP نمی تواند دو تابع با نام دقیقا یکسان داشته باشد. توجه داشته باشید که من در تابع اول از public استفاده کرده و در تابع دوم از protected استفاده کردم زیرا می خواستم نشان دهم که در این حالت قابلیت مشاهده یا نوع تابع اصلا مهم نیست.
امیدوارم که مقاله نحوه رفع خطای Cannot redeclare برای شما مفید واقع شده باشد! سوالات خود را از طریق دیدگاه ها با ما در میان بگذارید.