좋은 PHP 코드는 구조화되어야 합니다. 좋은 PHP 코드는 적응적이어야 합니다. 좋은 PHP 코드는 안전해야 합니다.
제가 SitePoint에서 면접관으로 일할 때 꼭 물어볼 것입니다. 어떻게 생각하시나요? PHP 코드의 장점과 단점은 무엇입니까? 이 질문은 단순히 PHP 기능 숙달 여부를 테스트하는 것이 아니라 지원자가 어떤 유형의 프로그래머인지 대략적으로 알 수 있기 때문입니다(Zend의 PHP 자격증이 이에 적합하고 Yahoo의 PHP 프로그래머 인터뷰 질문도 그렇습니다).
중요한 것은, 이 질문을 통해 후보자가 게으른 프로그래머로부터 지저분한 코드 조각을 가져와 재사용하거나 이러한 유형의 일로 팀의 다른 구성원을 돕는 경험이 있는지 알 수 있습니다.
물론 나 자신도 이 질문에 대한 만족스러운 대답을 갖고 있지는 않습니다. 하지만 내가 듣고 싶은 대답은 알고 있습니다.
좋은 PHP 코드는 구조화되어야 합니다. 코드의 큰 부분은 함수나 메소드로 나누어야 하며, 눈에 띄지 않는 작은 코드 부분은 나중에 목적이 명확해질 수 있도록 주석을 달아야 합니다. 그리고 HTML, CSS, Javascript 등의 프론트엔드 코드는 프로그램과 최대한 분리되어야 합니다. PHP의 객체 지향 프로그래밍 기능은 프로그래머가 코드를 질서 있게 구성하는 데 도움이 될 수 있습니다.
좋은 PHP 코드는 표준화되어야 합니다. 변수 및 함수 이름에 대한 명명 규칙 설정, 데이터베이스 작업 및 오류 처리와 같은 재사용 가능한 프로세스 표준화 또는 코드 들여쓰기 방법 지정과 같은 간단한 작업 등 이러한 표준화를 통해 코드 가독성이 크게 향상될 수 있습니다.
좋은 PHP 코드는 적응력이 있어야 합니다. PHP에는 매직 따옴표 및 짧은 태그와 같은 많은 기능이 있습니다. 이러한 기능을 켜거나 끄면 프로그램 실행에 영향을 미칩니다. 그러므로 좋은 프로그래머는 프로그램이 환경에 따라 조정될 수 있도록 코드에 적절한 명령문을 추가해야 합니다.
좋은 PHP 코드는 안전해야 합니다. PHP는 고정된 프레임워크가 없는 효율적이고 유연한 언어이지만 보안 문제는 프로그래머의 몫입니다. XSS(교차 사이트 스크립팅), CSRF(교차 사이트 요청 위조), 코드 삽입 취약성, 문자 인코딩 루프 취약성 등과 같은 잠재적인 보안 취약성에 대한 깊은 이해는 오늘날의 전문 프로그래머에게 매우 중요합니다.
후보자가 이러한 질문에 대답하면 나는 그 사람을 고용해야 할지 명확하게 알 수 있습니다. 물론 때로는 프로그래머가 문제를 제대로 설명하지 못하는 경우가 있으므로 우리는 그들에게 PHP 테스트를 요청합니다. 시험의 많은 질문은 표면적으로는 매우 단순해 보일 수 있지만, 주의 깊게 살펴보면 문제를 발견할 수 있기 때문에 응시자에게 자신을 표현할 기회도 제공합니다.
다음과 같은 "불량한" PHP 코드의 작은 조각은 단순화된 테스트 질문입니다. 이 질문은 다음과 같습니다. 이 코드를 어떻게 최적화해야 합니까?
<?
echo("<p>검색어에 대한 검색 결과: " .
$_GET['쿼리'] .".</p>");
?>
이 코드의 주요 문제점은 사용자가 제출한 데이터를 웹 페이지에 직접 표시하여 XSS 취약점을 생성한다는 것입니다. 실제로 이 구멍을 메울 수 있는 방법은 여러 가지가 있습니다. 그렇다면 우리가 원하는 코드는 무엇입니까?
<?
echo("<p>검색어에 대한 검색 결과: " .
htmlspecialchars($_GET['query']) ".</p>");
?>
이는 최소 요구사항입니다. XSS 취약점은 htmlspecialchars 함수로 채워져 불법 문자를 차단합니다.
<?php
if (isset($_GET['쿼리']))
{
echo '<p>검색어에 대한 검색 결과: ',
htmlspecialchars($_GET['query'], ENT_QUOTES), '.</p>';
}
?>
그런 코드를 작성할 수 있는 사람은 제가 채용하고 싶은 사람이어야 합니다.
<?는 XML 사양과 더 일치하는 <?php로 대체되었습니다.
$_GET['query'] 값을 출력하기 전에 먼저 비어 있는지 확인하십시오.
echo 명령의 추가 괄호가 제거되었습니다.
문자열은 작은 따옴표로 한정되어 문자열에서 대체 가능한 변수를 검색하는 PHP 시간을 절약합니다.
에코 시간을 절약하려면 마침표 대신 쉼표를 사용하세요.
작은따옴표도 이스케이프되도록 하려면 ENT_QUOTES 플래그를 htmlspecialchars 함수에 전달하세요. 이것이 가장 중요한 것은 아니지만 좋은 습관이기도 합니다.
불행하게도 이렇게 만족스러운 답을 줄 수 있는 프로그래머는 거의 없습니다. 우리가 만족할 수 있는 프로그래머를 채용하는 데 3개월이 걸렸습니다.
그렇다면 이 기사의 시작 부분에 제기된 질문에 어떻게 답하시겠습니까? PHP 코드의 장점과 단점은 무엇이라고 생각하시나요? PHP 프로그래머가 갖춰야 할 다른 자질은 무엇이라고 생각하시나요?
이 기사의 출처는 http://www.yeeyan.com/articles/view/38585/18736 입니다.
원본 링크: http://www.sitepoint.com/blogs/2007/05/25/good-and-bad-php-code/