PHP 함수가 있는지 체크하고 정의 하는 방법

2025. 6. 4. 22:46프로그램/PHP 초급

PHP에서 함수가 정의되어 있지 않다면 그 함수를 정의하는 방법은 function_exists() 함수를 활용하여 조건부로 함수를 선언하는 것입니다. 이 방법은 특히 플러그인, 라이브러리, 또는 환경에 따라 특정 기능의 존재 여부가 달라질 수 있는 경우에 매우 유용합니다.

왜 조건부 함수 정의가 필요할까요?

  • 중복 정의 방지: 같은 이름의 함수를 두 번 정의하면 PHP Fatal Error가 발생하여 스크립트 실행이 중단됩니다. function_exists()를 사용하면 이러한 오류를 피할 수 있습니다.
  • 하위 호환성: 특정 함수가 구버전 PHP에는 없지만 신버전에는 있을 때, function_exists()로 확인하여 구버전을 위한 폴백(fallback) 함수를 정의할 수 있습니다.
  • 확장성 및 유연성: 다른 개발자가 내 함수와 같은 이름의 함수를 정의할 수 있는 상황(예: 워드프레스 플러그인)에서, 내 함수가 이미 존재하는 경우 충돌을 피하고 다른 함수가 없는 경우에만 내 함수를 사용할 수 있도록 합니다.

function_exists()를 이용한 조건부 함수 정의 예시

가장 일반적인 패턴은 다음과 같습니다.

PHP
 
<?php

// MyCustomFunction 함수가 정의되어 있지 않다면 정의한다.
if (!function_exists('MyCustomFunction')) {
    /**
     * 이것은 MyCustomFunction의 설명입니다.
     * 인사를 출력하는 간단한 함수입니다.
     *
     * @param string $name 인사를 받을 이름
     * @return void
     */
    function MyCustomFunction($name) {
        echo "안녕하세요, " . htmlspecialchars($name) . "님!<br>";
    }
}

// 이제 함수가 정의되었으니 호출할 수 있습니다.
MyCustomFunction("홍길동"); // 출력: 안녕하세요, 홍길동님!

// 만약 MyCustomFunction을 다른 곳에서 다시 정의하려고 시도하면...
// if (!function_exists('MyCustomFunction')) {
//     function MyCustomFunction($name) {
//         echo "다른 안녕하세요, " . htmlspecialchars($name) . "님!<br>";
//     }
// }
// 이 부분은 'MyCustomFunction'이 이미 존재하므로 실행되지 않습니다.
// 따라서 Fatal Error 없이 안전하게 작동합니다.

// 존재하지 않는 함수를 호출하면 여전히 오류가 납니다.
// nonExistentYetFunction(); // Fatal Error 발생!

?>

코드 설명

  1. if (!function_exists('MyCustomFunction')) { ... }:
    • function_exists('MyCustomFunction')는 'MyCustomFunction'이라는 이름을 가진 함수가 PHP 엔진에 현재 정의되어 있는지 확인합니다.
    • ! (논리 NOT 연산자)는 이 결과가 false일 때(함수가 정의되어 있지 않을 때) true가 됩니다.
    • 따라서 이 if문은 'MyCustomFunction' 함수가 아직 정의되지 않았다면 중괄호 {} 안의 코드를 실행하라는 의미입니다.
  2. function MyCustomFunction($name) { ... }:
    • if 조건이 참일 때, 이 함수가 실제로 정의됩니다.
    • 일단 정의되고 나면, 이후에는 function_exists()가 true를 반환하므로 같은 이름의 함수를 다시 정의하려는 시도는 무시되거나 발생하지 않아 안전합니다.

이 패턴은 PHP 애플리케이션이나 라이브러리를 개발할 때 매우 유용하며, 코드의 안정성과 유연성을 크게 높여줍니다.