PHP 5.3 的重要特性:命名空间
PHP 5.3 的一个新的重要特性就是 命名空间(namespace)。
这一特性在 PHP5.0x 时候就提出过,后来被取消并安排在 PHP6 中实现。而此次又再次“提前”到了 PHP 5.3 发布,可见开发人员对其的重视以及谨慎的态度。
官方发布时说明文档的内容可能已过期(documentation maybe out dated),所以在这里简单的说明命名空间的用法:首先是声明一个命名空间,加入了新的关键字 namespace ,其应在类文件的开头
1 2 3 4 5 6 7 8 로그인 후 복사 |
<span style="FONT-WEIGHT: bold; COLOR: #000000"><?php</span> namespace Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">;</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">class</span> User <span style="COLOR: #009900">{</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">const</span> STATUS_OK <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">true</span><span style="COLOR: #339933">;</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">function</span> register<span style="COLOR: #009900">(</span><span style="COLOR: #000088">$data</span><span style="COLOR: #009900">)</span> <span style="COLOR: #009900">{</span> <span style="COLOR: #339933">...</span> <span style="COLOR: #009900">}</span> <span style="COLOR: #339933">...</span> <span style="COLOR: #009900">}</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">?></span> 로그인 후 복사 |
然后在控制器中(可能是其他文件)就可以这样调用
1 2 로그인 후 복사 로그인 후 복사 로그인 후 복사 |
<span style="COLOR: #000088">$user</span> <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">new</span> Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> <span style="COLOR: #000088">$user</span><span style="COLOR: #339933">-></span><span style="COLOR: #004000">register</span><span style="COLOR: #009900">(</span><span style="COLOR: #000088">$register_info</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 로그인 후 복사 |
的确与平常的并无两样,但是我们可以将两个相互独立的类联系起来。比如
1 2 로그인 후 복사 로그인 후 복사 로그인 후 복사 |
Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #339933">;</span> Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">Blog</span><span style="COLOR: #339933">;</span> 로그인 후 복사 |
这样就能从语言本身更容易描述和理解变量、类之间的关系,从而避免了“传统”上的 Project_Module_Blog 这样冗长的命名方式。
上面的说明可能很难说明使用命名空间带来了什么好处,新增加的 use 和 as 关键字或许能更好的说明问题。use 和 as 语句可以引用和声明 命名空间的“别名”。比如,上述的控制器中实例化类的代码可以这样写
1 2 3 로그인 후 복사 로그인 후 복사 로그인 후 복사 |
use Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">;</span> <span style="COLOR: #000088">$user</span> <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">new</span> Module<span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> <span style="COLOR: #000088">$user</span><span style="COLOR: #339933">-></span><span style="COLOR: #004000">register</span><span style="COLOR: #009900">(</span><span style="COLOR: #000088">$register_info</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 로그인 후 복사 |
甚至
1 2 3 로그인 후 복사 로그인 후 복사 로그인 후 복사 |
use Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span> <span style="COLOR: #b1b100">as</span> ModuleUser<span style="COLOR: #339933">;</span> <span style="COLOR: #000088">$user</span> <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">new</span> ModuleUser<span style="COLOR: #339933">;</span> <span style="COLOR: #000088">$user</span><span style="COLOR: #339933">-></span><span style="COLOR: #004000">register</span><span style="COLOR: #009900">(</span><span style="COLOR: #000088">$register_info</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 로그인 후 복사 |
类中的常量也可以通过命名空间访问,比如上述类中的 STATUS_OK 就可以通过命名空间
1 로그인 후 복사 로그인 후 복사 |
Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">STATUS_OK</span> 로그인 후 복사 |
访问。进一步的,也可以用别名简化那么长的“变量名称”
1 2 로그인 후 복사 로그인 후 복사 로그인 후 복사 |
use Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">STATUS_OK</span> as STATUS_OK; echo STATUS_OK; 로그인 후 복사 |
顺便提下“超空间(The Global Namespace)”的概念。所谓的“超空间”,就是没有指定命名空间的变量、类和函数。比如
1 2 3 로그인 후 복사 로그인 후 복사 로그인 후 복사 |
<span style="FONT-WEIGHT: bold; COLOR: #000000">function</span> foo<span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span> <span style="COLOR: #009900">{</span> <span style="COLOR: #339933">...</span> <span style="COLOR: #009900">}</span> 로그인 후 복사 |
这的函数,可以使用 foo() 执行的同时,也可以使用 ::foo(); 这样执行。
最后,配合使用 autoload 函数即可载入指定命名空间的类。简单的函数如下
1 2 3 4 5 로그인 후 복사 |
<span style="FONT-WEIGHT: bold; COLOR: #000000">function</span> __autoload<span style="COLOR: #009900">(</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #009900">)</span> <span style="COLOR: #009900">{</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #339933">=</span> <span style="COLOR: #990000">strtolower</span><span style="COLOR: #009900">(</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #339933">=</span> <span style="COLOR: #990000">str_replace</span><span style="COLOR: #009900">(</span> <span style="COLOR: #0000ff">'::'</span><span style="COLOR: #339933">,</span> DIRECTORY_SEPARATOR<span style="COLOR: #339933">,</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> <span style="COLOR: #b1b100">require_once</span><span style="COLOR: #009900">(</span> <span style="COLOR: #990000">dirname</span><span style="COLOR: #009900">(</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">__FILE__</span> <span style="COLOR: #009900">)</span> <span style="COLOR: #339933">.</span> <span style="COLOR: #0000ff">'/'</span> <span style="COLOR: #339933">.</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #339933">.</span> <span style="COLOR: #0000ff">'.class.php'</span> <span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> <span style="COLOR: #009900">}</span> 로그인 후 복사 |
这样,比如调用
1 로그인 후 복사 로그인 후 복사 |
__autoload<span style="COLOR: #009900">(</span><span style="COLOR: #0000ff">'Project::Module::User'</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 로그인 후 복사 |
就可以自动载入 Project_Module_User.class.php 文件(虽然这样看起来并不方便多少)。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Python 개발 과정에서 모듈을 찾을 수 없다는 오류가 자주 발생합니다. 이 오류의 구체적인 표현은 Python이 모듈을 가져올 때 ModuleNotFoundError 또는 ImportError라는 두 가지 오류 중 하나를 보고한다는 것입니다. 이 오류는 매우 짜증나고 프로그램이 제대로 실행되지 않을 수 있으므로 이 기사에서는 이 오류의 원인과 해결 방법을 살펴보겠습니다. Pyth의 ModuleNotFoundError 및 ImportError

Java9 버전에서 Java 언어는 모듈이라는 매우 중요한 개념을 도입했습니다. JavaScript 코드의 모듈식 관리에 익숙하다면 Java 9의 모듈식 관리를 보면 익숙할 것입니다. 1. 자바 모듈이란 무엇입니까? Java의 패키지와 다소 유사하게 모듈은 또 다른 수준의 Java 코드 그룹화를 도입합니다. 이러한 각 그룹(모듈)에는 많은 하위 패키지가 포함되어 있습니다. 모듈의 소스 코드 파일 패키지 루트에 module-info.java 파일을 추가하여 폴더와 해당 하위 폴더를 모듈로 선언합니다. 파일 구문

Docker에서 탑재 디렉터리의 권한 문제는 일반적으로 탑재 디렉터리를 지정하기 위해 -v 매개 변수를 사용할 때 권한 관련 옵션을 추가하는 방법으로 해결됩니다. 마운트된 디렉토리 뒤에 ro 또는 :rw를 추가하여 마운트된 디렉토리의 권한을 지정할 수 있습니다. 이는 각각 읽기 전용 및 읽기-쓰기 권한을 나타냅니다. 예: dockerrun-v/host/path:/container/path:roimage_name 컨테이너 내부 작업이 권한 요구 사항을 준수하는지 확인하기 위해 컨테이너에서 실행 중인 사용자를 지정하려면 Dockerfile에서 USER 지시어를 정의하세요. 예: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

1. 먼저 Linux 시스템 커널 [root@localhost~]#uname-r-p2.6.18-194.el5i6862를 확인하여 http://sourceforge.net/projects/linux-ntfs/files/로 이동하여 rpm 패키지를 다운로드합니다. 해당 커널 중 정확히 동일한 커널을 찾을 수 없으면 가장 가까운 커널을 찾을 수 있습니다. 내가 다운로드한 것과 똑같은 것을 찾을 수 없습니다: kernel-module-ntfs-2.6.18-128.1.1.el5-2.1.27-0.rr.10.11.i686.rpm3 rpm 패키지를 설치합니다. -ivhkernel -m

Vuex는 주로 State, Getter, Mutation, Action 및 Module의 다섯 가지 부분으로 구성됩니다. 아래에서는 Vuex 모듈 상태 웨어하우스 분할을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다.

Python의 os 모듈은 운영 체제와 상호 작용하는 데 사용되는 표준 라이브러리 중 하나입니다. 이는 파일 및 디렉터리 작업에 유용한 많은 기능과 변수를 제공합니다. 다음은 몇 가지 일반적인 os 모듈 함수의 사용법입니다: 1. 현재 작업 디렉토리를 가져옵니다: importoscwd=os.getcwd()print(cwd) 2. 현재 작업 디렉토리를 전환합니다: importosos.chdir('/path/to/new /directory' )3. 디렉토리의 모든 파일과 하위 디렉토리를 나열합니다: importosfiles=os.listdir('/path/to/dire

기술적으로 기계식은 아니지만 최근 몇 년 동안 전자 폐기물에서 진정한 괴짜 금으로 변한 IBM Model M과 같은 복고풍 기계식 키보드가 요즘 대세입니다. 그러나 모델 M만이 매력적인 키보드는 아닙니다.

기술적으로 기계식은 아니지만 최근 몇 년 동안 전자 폐기물에서 진정한 괴짜 금으로 변한 IBM Model M과 같은 복고풍 기계식 키보드가 요즘 대세입니다. 그러나 모델 M만이 매력적인 키보드는 아닙니다.
