PHP에서 사용하는 배열은 정말 많은 영역에서 자유롭게 사용이 가능하며 관련되어 지원되는 내장 함수들도 많기때문에 배열처리를 하여 자주 사용하게 된다. 하지만 웹 영역만 접해본 개발자들에게 배열은 그냥 편리한 존재일 수 있지만 C 나 JAVA 처럼 소포트웨어쪽 개발도 접해본사람이라면 PHP 배열을 접했을 시 이게 배열인지 그냥 멀티 저장변수인지 신기할 수 있다.
$a = array('가-나'=>1);
C 같은 경우 배열선언 시 배열의 크기도 지정해줘야하고 배열의 시작 키값은 무조건 0부터 시작해야한다. 또한 배열 키값은 INT 만 허용되는 규칙이 있다. 이러한 규칙에 어긋나면 당연히 컴파일도 되지 않는다. 하지만 PHP에서 배열은 이와 다르게 배열 형식만 따를 뿐 다른 규칙들은 무시한채 사용이 가능하다. 따라서 웹에서는 어떠한 형태의 데이터도 저장가능한 변수로 인식이 되고 있다.
이러한 히어로 변수도 상황에 따라 조심해야 하는 경우가 있는데 바로 아래와 같은 경우다.
$a = array('가-나'=>1);
$e = json_encode($a);
$d = json_decode($e);
echo $d->가-나;
위의 소스는 배열에 `가-나` 키값을 1로 선언하여 json_encode 후 다시 json_decode 하여 객체로 변환하였는데 위의 결과물은 당연히 에러가 출력될 수 밖에 없다. 객체 특성상 `가-나`의 경우 가르킬 수 없는 상수형태이기 때문이다.
이를 바로 잡는다면 아래와 같이 처리를 해주어야 정상적인 결과를 얻을 수 있다.
$a = array('가-나'=>1);
$e = json_encode($a);
$d = json_decode($e);
echo $d->{'가-나'};
객체 특성상 저장된 데이터를 출력할때는 `$변수->상수명` 형태로 사용할 수 있는데 위에서 보면 하이픈(-)은 상수로 사용할 수 없기때문에 에러가 발생된다. 이러한 특성은 아래와 같이 상수 설정시에도 동일하다.
define('가-나',1);
echo 가-나;
위 소스의 결과도 에러를 발생시킨다. 상수에서는 위의 결과물을 올바르게 출력할려면 아래와 같이 `constant` 함수를 사용해야한다.
define('가-나',1);
echo constant('가-나');
PHP가 가지고 있는 편리함을 100% 활용하기 위해선 이러한 예외처리정도는 알고 있어야 한다. 하지만 더 중요한건 사용이 제한된 상수등을 사용하지 않는게 좋다. 또한 메모리를 많이 잡아먹는 키값들도 되도록 피해야한다.
메모리 같은 경우 웹에서는 새로고침 하는순간 초기화 되기 때문에 부족할 경우 서버 메모리 설정을 늘려 크게 신경을 쓰지 않고 사용하게 되는데 이것도 언제까지나 서버 사양이 좋고 트래픽이 적을 때 이야기다. 트래픽이 많이 몰릴때 서버 메모리가 올라간다면 서버는 다운이 되고 만다.
반대로 C언어와 같은 웹이 아닌 프로그램에서는 프로그램 종료 후 재시작 하지 않는 이상 초기화 할 수 없기때문에 사용이 완료된 메모리는 즉시 해제해주는 설계등이 필요하다. 만약 메모리 효율성이 떨어진다면 모든 피해는 사용자 PC가 고스란히 받을 수 밖에 없다.
하지만 요즘은 서버 사양이 워낙 좋다보니 일반 사이트를 개발할 시 PHP 메모리를 크게 고려할 필요는 없다. 이런것 까지 크게 고려한다면 개발의 자유도를 떨어뜨리기 때문에 적당한 규칙만 가지고 사용하면 된다.