네임스페이스
PHP 5.3의 가장 큰 변화는 의심할 여지 없이 네임스페이스입니다(이전에 관련 PHP 네임스페이스 FAQ가 있었습니다). 이는 PHP 개발자에게 많은 이점을 제공하며 널리 비판을 받고 있는 함수 명명 문제도 해결되었습니다.
코드가 더 명확해졌습니다.
5.3 이전의 일반 코드에는 함수 이름과 클래스 이름을 구별하기 위해 사용자 정의 접두사가 필요합니다.PLAIN
TEXT
CODE:
function MY_wrapper() {}
클래스 MY_DB { }
정의('MY_CONN_STR', '');
MY_wrapper();
새로운 MY_DB();
MY_CONN_STR;
네임스페이스를 사용한 후에는 코드가 더 깔끔해 보입니다.
일반 텍스트
코드:
네임스페이스 MY;
함수 래퍼() {}
클래스 DB { }
const CONN_STR = '';
MY를 MY로 사용하십시오.
싸개();
새로운 DB();
CONN_STR;
하나의 파일에 정의된 여러 네임스페이스
파일에 여러 네임스페이스가 정의된 경우 어떻게 해야 합니까?
일반 텍스트
코드:
네임스페이스 LIB;
클래스 MySQL {}
클래스 SQLite {}
$b = 새로운 SQLite();
네임스페이스 LIB_EXTRA;
클래스 MScrypt {}
$a = 새로운 MScrypt();
var_dump(
get_class($a),
get_class($b)
);
위 코드의 출력은 다음과 같습니다.
일반 텍스트
코드:
string(18)"LIB_EXTRA::MScrypt"
문자열(11)"LIB::SQLite"
PHP는 해석과 실행을 위한 언어이므로 위의 결과는 타당합니다.
네임스페이스 우선순위
네임스페이스에 정의된 함수, 클래스 및 상수가 우선 순위를 가지며 전역 항목이 그 뒤를 따릅니다.
일반 텍스트
코드:
네임스페이스 foo;
함수 strlen($foo) { htmlentities($foo) 반환 }
echo strlen("테스트"); // 테스트
echo ::strlen("테스트") // 4
echo 네임스페이스::strlen("test"); // 테스트
네임스페이스와 자동 로드 간의 우정
autoload는 네임스페이스 이름과 클래스 이름을 기반으로 클래스 파일 위치를 구문 분석합니다. 자동 로드는 네임스페이스에서 클래스 정의를 찾을 수 없는 경우에만 트리거되며 네임스페이스에 정의된 __autoload는 자동으로 호출되지 않습니다.
일반 텍스트
암호:
function __autoload($var) { var_dump($var) } // LIB::foo
"./ns.php"가 필요합니다. /*
<?php
네임스페이스 LIB;
새로운 foo();
*/
네임스페이스 일부 액세서리
일반 텍스트
코드:
네임스페이스 really::long::pointlessness::verbose::ns;
__NAMESPACE__; // 현재 네임스페이스 이름을 나타내는 새로운 매직 상수
클래스 a{}
get_class(new a()); // 정말::long::pointlessness::verbose::ns::a
really::long::pointlessness::verbose::ns::a AS b;// 네임스페이스에서 클래스 참조 참고: 여기에 있는 내용은 PHP 5.3 슬라이드의 pdfIntroduction에서 발췌되었으며 나중에 반복되지 않습니다.
성능 개선
PHP 5.3의 전반적인 성능은 5-15% 향상되었으며
md5()는 10-15% 더 빨라졌습니다.
엔진의 더 나은 스택 구현
읽기 전용 메모리로 이동된 상수
예외 처리 프로세스 개선(단순화, opcode 감소)
(요구/포함)_개선 1회, 중복 오픈 제거
gcc4의 더 작은 바이너리 크기 및 시작 크기
새로운 언어 기능__DIR__
5.3 이전에는 현재 스크립트의 디렉토리를 얻으려면 함수 호출이 필요했습니다
. 일반 텍스트
코드:
echo dirname(__FILE__) // < PHP 5.3
5.3에서는 매직 상수 __DIR__ 하나만 필요합니다.
일반 텍스트
코드:
echo __DIR__ // >= PHP 5.3
?:연산자 편리한 ?:연산자는 두 값/표현식에서 null이 아닌 값을 빠르게 얻을 수 있습니다.
일반 텍스트
코드:
$a = true ?: false;
$a = 거짓 ?: 참 // 참;
$a = "" ?: 1 // 1;
$a = 0 ?: 2;
$a = array() ?: 배열(1); // 배열(1);
$a = strlen("") ?: strlen("a") // 1
__callStatic()
새로운 매직 메소드 __callStatic이 추가되었습니다. 해당 기능은 __call과 유사하지만 정적 메소드에만 유효합니다.
일반 텍스트
코드:
클래스 도우미 {
정적 함수 __callStatic($name, $args) {
echo $name.'('.implode(',', $args).')';
}
}
helper::test("foo","bar") // 테스트(foo,bar)
정적 메서드를 동적으로 호출합니다. 정적 메서드를 동적으로 호출하시겠습니까? 움직임과 고요함의 결합.
일반 텍스트
코드:
클래스 도우미 {
정적 함수 foo() { echo __METHOD__ }
}
$a = "도우미";
$b = "푸";
$a::$b(); // 도우미::foo
후기 정적 바인딩
어떻게 번역해야 할지 모르겠는데, 원문을 남겨주시면 이해가 더 쉬울 것 같습니다. 정적 메소드의 이벤트 처리 타이밍이 변경되었습니다. 기존에는 컴파일 중에 처리되었으나 이제는 실행 중에 처리됩니다.
PHP 5.3 이전에는 다음 코드가 A를 출력했지만 이는 우리가 원하는 것이 아닙니다. whoami 메서드는 클래스 B에서 재정의되었습니다. 우리가 당연하게 여기는 것에 맞게 B를 출력해야 합니다.
일반 텍스트
코드:
클래스 A {
공개 정적 함수 whoami() {
에코 __CLASS__;
}
공개 정적 함수 ID() {
자기::whoami();
}
}
클래스 B는 A를 확장합니다.
공개 정적 함수 whoami() {
에코 __CLASS__;
}
}
B::identity(); // A <-- PHP <5.3
다음 코드에서는 static::whoami()를 사용하여 정적 메서드를 호출합니다. PHP 5.3 이후에는 실행 중에 __CLASS__가 처리되므로 이 예제에서는 클래스 B를 성공적으로 포착할 수 있습니다.
일반 텍스트
코드:
클래스 A {
공개 정적 함수 whoami() {
에코 __CLASS__;
}
공개 정적 함수 ID() {
정적::whoami();
}
}
클래스 B는 A를 확장합니다.
공개 정적 함수 whoami() {
에코 __CLASS__;
}
}
B::identity(); // B <-->= PHP 5.3
mysqlnd
mysqlnd는 PHP 5.3에서 기본 mysql 드라이버가 되었지만
PDO_MySQL은 아직 mysqlnd를 지원하지 않습니다. 현재 mysql(i) 확장만
이전에 소개된 PHP 5.3의 새로운 기능을 사용할 수 있으며 이는 모두 개발자에게 편리합니다. 다음은 웹 호스팅 제공업체가 매우 좋아하는 기능입니다.
향상된 ini 파일 지원
CGI/FastCGI는 .htaccess와 유사한 INI 구성을 지원합니다. 각 디렉터리에는 INI 설정이 있을 수 있습니다. ini의 파일 이름은 php.ini의 구성에 따라 다르지만 [PATH=/var/www/domain.com], [HOST=www .domain.com] 섹션 설정은 사용자가 수정할 수 없습니다.
향상된 오류 처리
변수와 상수는 ini 파일에 정의할 수 있으며 프로그램에서 직접 호출할 수 있습니다.
첨부된 내용은 ini 파일의 예입니다.
일반 텍스트
코드:
#사용자 정의 php.ini 파일 이름(.htaccess) 기본값은 ".user.ini"입니다.
user_ini.filename=".user.ini"
#이 기능을 비활성화하려면 null 값으로 설정하세요.
user_ini.파일 이름=
#사용자 정의 php.ini 파일 TTL 길이(time-to-live), 단위는 초, 캐시 만료 시간으로 이해합니다. 기본값은 300초입니다.
user_ini.cache_ttl=300
[경로=/var/www/domain.com]
변수_순서 = GPC
안전 모드 =1
[내 변수]
somevar = "1234"
anothervar = ${somevar}; anothervar == somevar
[ini 배열]
foo[바]=1
푸[123]=2
foo[]=3