PHP 5.4.0 정식버전 릴리즈. PHP 5.4에서 바뀌는 점. While이 에 작성. 41,930번 읽힘.
드디어 아주 많은 기능들이 추가된 PHP 5.4.0의 정식버전이 릴리즈 되었다. 기존에는 RC 버전만 배포되고 있었다.
PHP 공식 홈페이지에서는 5.4 버전의 릴리즈가 기존 5.1~5.3 버전까지 업데이트에 비해서 상당히 큰 스케일이라 한다.
Deprecated features in PHP 5.4.x
mysql_list_dbs()
get_magic_quotes_gpc() -> 항상 false 를 반환
get_magic_quotes_runtime() -> 항상 false 를 반환
set_magic_quotes_runtime() -> 에러
mcrypt_generic_end()
특히 magic_quote 를 감지하는 함수가 없어지는 것은 이제 더이상 magic_quote 자체를 쓰지 말라는 소리같다.
완전히 없어진 함수
define_syslog_variables()
import_request_variables()
session_is_registered(), session_register() and session_unregister()
mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(), mysqli::client_encoding(), mysqli_stmt::stmt()
새 기능
OOP 기능인 Traits, 짧은 배열 문법, 개발용 빌트인 웹서버가 있다.
짧은 배열
제일 눈에 보이는 것은 배열을 짧게 표현할 수 있는 기능이다. 첨에는 json 정도를 기대했지만 그정도는 아니고 아래와 같이 사용 할 수 있다.
$var = array( 1 => "가나다", 2 => "라마바", 3 => "사아자" );
위와 같은 코드를
$var = [ 1 => "가나다", 2 => "라마바", 3 => "사아자" ];
이렇게 줄일 수 있다. 단지 array 라는 5글자가 사라진 것 뿐이긴 하지만 시각적으로 큰 효과를 보인다.
$object->method()[0]->otherMethod(); $object = new MyClass->method();
추가적으로 위와 같은 문법도 쓸 수 있게 되었다.
Traits
trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo ' World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } }
위와 같이 “형에 상관 없는 상속”을 할 수 있다.
빌트인 웹서버
$ cd ~/public_html $ php -S localhost:8000 -t ./ PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011 Listening on localhost:8000 Document root is /home/me/public_html Press Ctrl-C to quit. [Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read [Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read [Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read [Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read [Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
위와 같이 사용 할 수 있다.
참고로 php_sapi_name() 함수를 호출하여 “cli-server”라는 글이 보이면 위의 코드로 실행을 했다는 것을 알 수 있다.
새로 생긴 함수
- 기존에 bin2hex만 있었는데 hex2bin도 생김.
- http_reponse_code()
- get_declared_traits()
- getimagesizefromstring()
- stream_set_chunk_size()
- socket_import_stream()
- trait_exists()
- header_register_callback()
- class_uses()
- session_status()
- session_register_shutdown()
- mysqli_error_list()
- mysqli_stmt_error_list()
- libxml_set_external_entity_loader()
- ldap_control_paged_results()
- ldap_control_paged_results_response()
- transliterator_create()
- transliterator_create_from_rules()
- transliterator_create_inverse()
- transliterator_get_error_code()
- transliterator_get_error_message()
- transliterator_list_ids()
- transliterator_transliterate()
새로 추가된 상수
PHP Core
- ENT_DISALLOWED
- ENT_HTML401
- ENT_HTML5
- ENT_SUBSTITUTE
- ENT_XML1
- ENT_XHTML
- IPPROTO_IP
- IPPROTO_IPV6
- IPV6_MULTICAST_HOPS
- IPV6_MULTICAST_IF
- IPV6_MULTICAST_LOOP
- IP_MULTICAST_IF
- IP_MULTICAST_LOOP
- IP_MULTICAST_TTL
- MCAST_JOIN_GROUP
- MCAST_LEAVE_GROUP
- MCAST_BLOCK_SOURCE
- MCAST_UNBLOCK_SOURCE
- MCAST_JOIN_SOURCE_GROUP
- MCAST_LEAVE_SOURCE_GROUP
Curl
- CURLOPT_MAX_RECV_SPEED_LARGE
- CURLOPT_MAX_SEND_SPEED_LARGE
LibXML
- LIBXML_HTML_NODEFDTD
- LIBXML_HTML_NOIMPLIED
- LIBXML_PEDANTIC
OpenSSL
- OPENSSL_CIPHER_AES_128_CBC
- OPENSSL_CIPHER_AES_192_CBC
- OPENSSL_CIPHER_AES_256_CBC
- OPENSSL_RAW_DATA
- OPENSSL_ZERO_PADDING
Output buffering
- PHP_OUTPUT_HANDLER_CLEAN
- PHP_OUTPUT_HANDLER_CLEANABLE
- PHP_OUTPUT_HANDLER_DISABLED
- PHP_OUTPUT_HANDLER_FINAL
- PHP_OUTPUT_HANDLER_FLUSH
- PHP_OUTPUT_HANDLER_FLUSHABLE
- PHP_OUTPUT_HANDLER_REMOVABLE
- PHP_OUTPUT_HANDLER_STARTED
- PHP_OUTPUT_HANDLER_STDFLAGS
- PHP_OUTPUT_HANDLER_WRITE
Sessions
- PHP_SESSION_ACTIVE
- PHP_SESSION_DISABLED
- PHP_SESSION_NONE
Stream
- STREAM_META_ACCESS
- STREAM_META_GROUP
- STREAM_META_GROUP_NAME
- STREAM_META_OWNER
- STREAM_META_OWNER_NAME
- STREAM_META_TOUCH
Zlib
- ZLIB_ENCODING_DEFLATE
- ZLIB_ENCODING_GZIP
- ZLIB_ENCODING_RAW
Intl
- U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR
- IDNA_CHECK_BIDI
- IDNA_CHECK_CONTEXTJ
- IDNA_NONTRANSITIONAL_TO_ASCII
- IDNA_NONTRANSITIONAL_TO_UNICODE
- INTL_IDNA_VARIANT_2003
- INTL_IDNA_VARIANT_UTS46
- IDNA_ERROR_EMPTY_LABEL
- IDNA_ERROR_LABEL_TOO_LONG
- IDNA_ERROR_DOMAIN_NAME_TOO_LONG
- IDNA_ERROR_LEADING_HYPHEN
- IDNA_ERROR_TRAILING_HYPHEN
- IDNA_ERROR_HYPHEN_3_4
- IDNA_ERROR_LEADING_COMBINING_MARK
- IDNA_ERROR_DISALLOWED
- IDNA_ERROR_PUNYCODE
- IDNA_ERROR_LABEL_HAS_DOT
- IDNA_ERROR_INVALID_ACE_LABEL
- IDNA_ERROR_BIDI
- IDNA_ERROR_CONTEXTJ
Json
- JSON_PRETTY_PRINT
- JSON_UNESCAPED_SLASHES
- JSON_NUMERIC_CHECK
- JSON_UNESCAPED_UNICODE
- JSON_BIGINT_AS_STRING
기타 자잘한 업데이트 사항
- array_combine()은 이제 false 대신 array() 를 리턴합니다.
- call_user_func_array() 에서도 더이상 call-time pass by reference 를 지원하지 않음.
- <?= 가 항상 허용됨.
- fnv132, fnv164, joaat 알고리즘 추가.
- Class::{expr}() 문법 지원.
- 클로져에서 $this 지원.
자동 위치 재조정 (Automatic Repositioning) While이 에 작성. 18,383번 읽힘.
Objective-J 에서는 아래와 같은 방법으로 뷰영역의 크기 변화에 따라 자동적으로 원하는 뷰를 리포지셔닝(위치 재조정) 하도록 설정 할 수 있다.
사용 방법
[viewInstance setAutoresizingMask:마스크];
위의 마스크 부분에는 여러가지가 들어갈 수 있으나, Repositioning 에 관한 마스크는 CPViewMinXMargin, CPViewMaxXMargin, CPViewMinYMargin, CPViewMaxYMargin 이 들어갈 수 있다.
이 마스크들은 이름만 보고는 무슨 역할을 하는지 예측하기가 힘들다.
- CPViewMinXMargin: 왼쪽 여백을 초기에 로딩 된 값으로 고정
- CPViewMaxXMargin: 오른쪽 여백을 초기에 로딩 된 값으로 고정
- CPViewMinYMargin: 윗쪽 여백을 초기에 로딩 된 값으로 고정
- CPViewMaxYMargin: 아랫쪽 여백을 초기에 로딩 된 값으로 고정
이 마스크 옵션들을 동시에 여러개 지정할 수도 있다. 그럴 경우에는 약간 다르게 동작한다.
- CPViewMinXMargin | CPViewMaxXMargin: 리사이징을 했을 때 양쪽 여백의 비율을 고정
- CPViewMinYMargin | CPViewMaxYMargin: 리사이징을 했을 때 위아래 여백의 비율을 고정
사용 예
[viewInstance setAutoresizingMask:CPViewMinXMargin];
[viewInstance setAutoresizingMask:CPViewMinXMargin | CPViewMinYMargin];