PHP에서 정의되지 않은 함수 호출

Shraddha Paghdar 2022년1월21일
PHP
PHP에서 정의되지 않은 함수 호출

많은 분들이 Fatal error: Call to undefined function function_name()이라는 오류가 여러 번 발생했습니다. 오늘의 게시물에서는 이 오류를 해결하는 방법을 찾고 있습니다. 그러나 이 문제를 해결하기 전에 PHP가 함수를 평가하는 방법을 이해합시다.

함수를 정의하고 호출하는 방법에는 여러 가지가 있습니다. function.php 파일에 작성하고 main.php 파일에서 호출한다고 가정해 보겠습니다.

    // function.php
<?php
    namespace fooNamespace {
        function foo() {
            return "Calling foo"
        }
    }
?>
    // main.php
include function.php
<?php
    echo fooNamespace\foo();
?>

네임스페이스는 작업을 수행하기 위해 함께 작동하는 클래스를 그룹화하여 더 나은 관리를 가능하게 하는 한정자입니다. 여러 클래스에 동일한 이름을 사용할 수 있습니다. PHP가 코드에 필요한 네임스페이스의 요소를 어떻게 아는지 아는 것이 중요합니다. PHP 네임스페이스는 일종의 파일 시스템으로 작동합니다. 파일 시스템의 파일에 액세스하는 방법에는 3가지가 있습니다.

  1. fooBar.txt와 같은 상대 파일 이름. fooDirectory는 현재 사용 중인 디렉토리인 fooDirectory/fooBar.txt로 확인됩니다.
  2. subdirectory/fooBar.txt와 같은 상대 경로 이름. fooDirectory/subdirectory/fooBar.txt로 해석됩니다.
  3. /main/fooBar.txt와 같은 절대 경로 이름. /main/fooBar.txt로 확인됩니다.

PHP의 네임스페이스 요소는 동일한 원칙을 따릅니다. 예를 들어, 클래스 이름은 세 가지 방법으로 지정할 수 있습니다.

  1. 정규화되지 않은 이름/접두사가 없는 클래스 이름:
    $a = new foo();
    
    또는,
    foo::staticmethod();
    
    현재 네임스페이스가 foonamespace인 경우 항상 foonamespace\foo로 해석됩니다. 코드가 네임스페이스가 없는 전역 코드인 경우 foo로 해석됩니다.
  2. 한정된 이름/접두사 클래스 이름:
    $a = new fooSubnamespace\foo();
    
    또는,
    fooSubnamespace\foo::staticmethod();
    
    현재 네임스페이스가 foonamespace인 경우 항상 foonamespace\fooSubnamespace\foo로 확인됩니다. 코드가 네임스페이스가 없는 전역 코드인 경우 fooSubnamespace\foo로 확인됩니다.
  3. 전역 접두사 연산자가 있는 정규화된 이름/접두사 이름:
    $a = new \foonamespace\foo();
    
    또는,
    \foonamespace\foo::staticmethod();
    
    이것은 항상 foonamespace\foo 코드에 배치된 리터럴 이름으로 해석됩니다.

이제 클래스를 정의하고 동일한 네임스페이스 내에서 클래스의 메서드를 호출한다고 가정합니다.

<?php
    class foo {
        function barFn() {
          echo "Hello foo!"
        }
        function bar() {
            barFn();
            // interpreter is confused which instance's function is called
            $this->barFn();
        }
    }
    $a = new foo();
    $a->bar();
?>

$this 의사 변수에는 현재 개체의 메서드와 속성이 있습니다. 이러한 것은 클래스의 모든 멤버 변수와 메서드에 액세스할 수 있기 때문에 유용합니다. 클래스 내부에서는 $this->functionName()이라고 합니다. 클래스 외부에서는 $theclass->functionName()이라고 합니다.

$this는 인터프리터가 생성한 PHP object에 대한 참조이며, 여기에는 변수 배열이 포함되어 있습니다. 일반 클래스의 일반 메소드 내에서 $this를 호출하면 $this는 이 메소드가 속한 객체를 반환합니다.

PHP에서 정의되지 않은 함수 호출 오류를 해결하는 단계

  • 파일이 존재하는지 확인합니다. 함수 정의가 작성된 PHP 파일을 찾습니다.
  • 페이지의 위 파일에 대한 require(또는 include) 문을 사용하여 파일이 포함되었는지 확인합니다. require/include의 경로가 올바른지 확인하십시오.
  • require 문에서 파일 이름의 철자가 올바른지 확인합니다.
  • 포함된 파일의 단어를 인쇄/반향하여 제대로 포함되었는지 확인합니다.
  • 파일 끝에 별도의 함수를 정의하고 호출합니다.
  • 확인 기능이 제대로 닫혔습니다. (중괄호를 추적)
  • 클래스의 메소드를 호출하는 경우 $this->가 작성되었는지 확인하십시오.
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn