PHP 5.4.0 정식버전 릴리즈. PHP 5.4에서 바뀌는 점. 2012-03-02 11:15:54에 작성. 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) 2012-01-29 01:27:45에 작성. 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];