개발&Development/프로그래밍 일반

PHP의 Double Quoted String과 Static과의 만남 : 이스케이핑은 항상 정확하게.

겐도 2008. 6. 27. 18:57
오늘도 발견한 신기한 PHP의 성질.

우선 static 키워드는 뒤의 변수는 상수만을 어사인 할 수 있고 Expression은 오지 못한다.
http://www.php.net/manual/en/language.variables.scope.php 의 Example 7 참고.

이제 스트링을 어사인 하는 경우를 생각해 보자.

static $a = "a";


이경우는 문제가 없다. 허나

static $a = "$b";


이때는 스트링이 익스프레션으로 간주 되기 때문에 문법 에러가 발생한다. '$b'가 문제.

자 이제 첼린지.

static $a = "$";


$뒤에 문자가 저렇게 되면? 역시나 문법 에러가 발생한다.

Double Quoted String에서 '$'는 '\$'로 이스케이핑 하는 것이 정석이다.

대충
static $pattern = "@^gendoh$@";

에서 망했다 오늘. 코딩경력 20년차에 문법에러라니.. 쪽팔려라 ㅠ.ㅠ
레귤라 익스프레션과 스태틱이 만나면 이런 일도 발생한다.

재미있는 것은 Eclipse의 PDT나 Zend Studio에서는 '$b'는 문법 에러를 보여주지만 '$'나 '$@'만 쓰면 정상적이라고 인식한다. '$'뒤에 '{'나 alpha-numeric 이 오지 않으면 당연히 '$'는 '$' 케릭터로 인식할 수 있지만 파서의 특성 차이로 아마 이런 일이 발생하는 듯. PHP 파서는 '$'만 나타나면 익스프레션으로 파싱하는듯 하다. 그와중에 뿜는 에러명이

PHP Parse error:  syntax error, unexpected '"' in ...


쌍따옴표가 못온다고라고라;;;;;

Double Quoted String에서 '$'를 쓸땐 이스케이핑 해 주는 것이 정석일듯 하다.