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가지가 있습니다.
fooBar.txt
와 같은 상대 파일 이름. fooDirectory는 현재 사용 중인 디렉토리인fooDirectory/fooBar.txt
로 확인됩니다.subdirectory/fooBar.txt
와 같은 상대 경로 이름.fooDirectory/subdirectory/fooBar.txt
로 해석됩니다./main/fooBar.txt
와 같은 절대 경로 이름./main/fooBar.txt
로 확인됩니다.
PHP의 네임스페이스 요소는 동일한 원칙을 따릅니다. 예를 들어, 클래스 이름은 세 가지 방법으로 지정할 수 있습니다.
- 정규화되지 않은 이름/접두사가 없는 클래스 이름:
또는,
$a = new foo();
현재 네임스페이스가foo::staticmethod();
foonamespace
인 경우 항상foonamespace\foo
로 해석됩니다. 코드가 네임스페이스가 없는 전역 코드인 경우foo
로 해석됩니다. - 한정된 이름/접두사 클래스 이름:
또는,
$a = new fooSubnamespace\foo();
현재 네임스페이스가fooSubnamespace\foo::staticmethod();
foonamespace
인 경우 항상foonamespace\fooSubnamespace\foo
로 확인됩니다. 코드가 네임스페이스가 없는 전역 코드인 경우fooSubnamespace\foo
로 확인됩니다. - 전역 접두사 연산자가 있는 정규화된 이름/접두사 이름:
또는,
$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 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