웹마스터 팁
PHP 5.4 대응 코딩(1) - stdClass
2014.04.29 11:25
PHP가 5.3에서 5.4로 업데이트 되면서 기존에 WARNING이 아니었던 내용이 WARNING, 즉 경고가 발생하는 부분이 있습니다. 여러 부분이 있겠지만 제일 보기 쉬운 오류로는 stdClass 관련 오류가 있겠습니다.(Creating default object from empty value)
PHP 5.3까지는 $aa->bb 와 같이 사용하면 자동으로 $aa를 stdClass로 초기화해 주었습니다.
하지만, 이것은 개발자가 오류를 찾기 힘들게 합니다.
예제를 하나 보겠습니다.
function setVars() { if(otherFunc()) { $aa->bb='cc'; } return $aa; } function MainFunc() { $bb = setVars(); $bb->bb=$bb->bb . 'dd'; }
위 함수에서 만약 otherFunc 함수가 0을 반환한다면 $aa는 stdClass로 초기화되지 않고, 개발자가 의도했던 결과(ccdd) 대신에 'dd'만이 저장될 것입니다.
하지만 어떠한 경고도 발생하지 않기에, 오류를 찾는 것에 시간이 오래 걸릴수 있겠죠.
물론 위 예제에서는 고의적으로 otherFunc의 반환값이 0일 경우를 생각하지 않았습니다만, 소스 코드가 커질 경우 살펴보기 어려워질 수 있겠죠.
따라서 무조건 WARNING을 끄기보다는, 왜 WARNING이 발생하는지 알아 보고, 적절한 위치에 stdClass 선언을 추가해 주는것이 좋을 것입니다.
외부 주소:
php 5.2 - 경고 미발생, 하지만 오작동중:http://yjsoft.bl.ee/error.php
php 5.3 - 역시 경고 미발생, 오작동중:http://yjsoft.pusku.com/error.php
php 5.4 - WARNING 발생:http://crecrew.pusku.com/error.php
php 5.4 - 수정이후 정상 동작:http://crecrew.pusku.com/normal.php