이전 글에서는 네임스페이스의 내부 요소에 액세스하는 방법을 배웠습니다. 필요한 경우 "편집기가 네임스페이스의 내부 요소에 액세스하는 방법(php 버전)"을 읽어보세요. 이번에는 네임스페이스의 순서를 소개하겠습니다. 필요하시면 참고하시면 됩니다.
먼저 작은 예를 살펴보겠습니다.
<?php namespace A; use B\D, C\E as F; // 函数调用 foo(); // 首先尝试调用定义在命名空间"A"中的函数foo() // 再尝试调用全局函数 "foo" \foo(); // 调用全局空间函数 "foo" my\foo(); // 调用定义在命名空间"A\my"中函数 "foo" F(); // 首先尝试调用定义在命名空间"A"中的函数 "F" // 再尝试调用全局函数 "F" // 类引用 new B(); // 创建命名空间 "A" 中定义的类 "B" 的一个对象 // 如果未找到,则尝试自动装载类 "A\B" new D(); // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象 // 如果未找到,则尝试自动装载类 "B\D" new F(); // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象 // 如果未找到,则尝试自动装载类 "C\E" new \B(); // 创建定义在全局空间中的类 "B" 的一个对象 // 如果未发现,则尝试自动装载类 "B" new \D(); // 创建定义在全局空间中的类 "D" 的一个对象 // 如果未发现,则尝试自动装载类 "D" new \F(); // 创建定义在全局空间中的类 "F" 的一个对象 // 如果未发现,则尝试自动装载类 "F" // 调用另一个命名空间中的静态方法或命名空间函数 B\foo(); // 调用命名空间 "A\B" 中函数 "foo" B::foo(); // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法 // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B" D::foo(); // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法 // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D" \B\foo(); // 调用命名空间 "B" 中的函数 "foo" \B::foo(); // 调用全局空间中的类 "B" 的 "foo" 方法 // 如果类 "B" 未找到,则尝试自动装载类 "B" // 当前命名空间中的静态方法或函数 A\B::foo(); // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法 // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B" \A\B::foo(); // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法 // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B" ?>
위의 작은 예를 주의 깊게 살펴보면 무엇을 관찰할 수 있나요? 당당, 지금부터 답변해드리겠습니다.
함수를 호출할 때 "foo()
"만 쓰면 네임스페이스에 있는 함수가 먼저 호출된 다음 전역 함수가 호출되지만 "foo; () )
", 이는 전역 함수만 호출합니다. foo()
”,先调用的命名空间中的函数,然后在调用全局函数;但如果是“foo()
”,这就只调用全局函数了。
在类应用的时候,如果我们写了“new B();
”,将会创建命名空间中定义的类"B"的一个对象,但如果未找到,则尝试自动装载类"AB
"。
在调用另一个命名空间中的静态方法或命名空间函数的时候,如何我们写了“Bfoo()
”,这表明我们将调用命名空间中的函数“foo()
”;但如果写的是“B::foo();
”就不一样了,他先调用命名空间中的函数“foo()”,但如果未找到,则尝试自动装载类"AB"。
在当前命名空间中的静态方法或函数的时候,如何我们写了“AB::foo();
new B();
"라고 적으면 네임스페이스에 정의된 "B" 클래스의 객체가 생성되는데, 해당 객체가 없으면 자동으로 클래스 로드를 시도해보세요. "AB
". 다른 네임스페이스에서 정적 메서드나 네임스페이스 함수를 호출할 때 "Bfoo()
"라고 씁니다. 이는 " foo()
" 네임스페이스에서 함수를 호출할 것임을 나타냅니다. >"; 그러나 "B::foo();
"라고 쓰면 다릅니다. 먼저 네임스페이스에서 "foo()" 함수를 호출하지만 찾을 수 없으면 시도합니다. 클래스 "AB"를 자동 로드합니다. AB::foo();
"를 작성합니다. 이는 "AA" 네임스페이스에 정의된 클래스를 호출할 것임을 나타냅니다. "B"의 "foo" 메소드는 클래스 "AAB"가 발견되지 않으면 자동으로 로드합니다. 이제 요약해 보겠습니다. 네임스페이스(예: ab)에서 정규화되지 않은 이름에 대한 함수 호출은 런타임 시 해결됩니다. 예를 들어 foo() 함수 호출은 다음과 같이 구문 분석됩니다.
전역 공간에서 foo() 함수를 찾아 호출해 보세요.
네임스페이스(예: ab) 내의 정규화되지 않은 이름 또는 정규화된 이름 클래스(정규화되지 않은 이름)에 대한 호출은 런타임 시 해결됩니다. 다음은 new c()와 new de()를 호출하는 파싱 과정이다. new c() 파싱:
ABC 클래스를 자동 로딩해 보세요.
new DE() 분석:
ABDE 클래스를 자동 로딩해 보세요.
글로벌 네임스페이스에서 글로벌 클래스를 참조하려면 정규화된 이름 new C()를 사용해야 합니다.
🎜🎜그게 다입니다. 더 알고 싶다면 여기를 클릭하세요. → →🎜php 비디오 튜토리얼🎜🎜위 내용은 편집자는 네임스페이스의 호출 순서를 알려줄 것입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!