رفع خطای Cannot redeclare function name در PHP

این مقاله راهنمایی کوتاه در مورد نحوه مقابله با خطای PHP زیر است:

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 اعلام شده بود. این امر منجر به ایجاد خطای مهلکی در هنگام تلاش برای ایجاد عملکرد دیگری با همان نام دقیق در LINE 9 در other-file.php شد.

به مثال زیر نگاهی بیندازید:

function test(){
    //do something
}

function test(){
    //do something else
}

اگر سعی کنید قطعه کد بالا را اجرا کنید ، یک خطای مهلک ایجاد می شود و اسکریپت کشته می شود. این به این دلیل است که من دو تست جداگانه با آزمون نام ایجاد کردم.

خوب ، پس چگونه این خطا را برطرف کنم؟
این مشکل به برنامه PHP شما و آنچه در تلاش هستید به دست آورید بستگی دارد.

نام تابع دیگر را به چیز دیگری تغییر دهید.
اگر به تابعی به نام test نیازی ندارید ، می توانید تابع دوم را به چیز دیگری تغییر نام دهید.

در مورد بالا ، ما می توانیم موارد زیر را انجام دهیم:

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 استفاده کردم زیرا می خواستم نشان دهم که در این حالت قابلیت مشاهده یا نوع تابع اصلا مهم نیست.

امیدوارم که این راهنما آموزنده واقع شده باشد!

منابع
_ T I M
تیم تولید محتوا _ آلتیمیت وردپرس
ما در تیم تولید محتوای آلتیمیت وردپرس، سخت در تلاش هستیم تا بهترین مقالات آموزشی در زمینه وردپرس و کسب‌و‌کارهای اینترنتی را برای شما فراهم کنیم. محتوای این صفحه توسط یوسف حسینی کنترل و بررسی خواهد شد.

دیدگاهتان را بنویسید