시리즈:쉽게 배우는 프로그래밍 입문/PHP

문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.

이 문서에는 독자적으로 연구한 내용이 들어갑니다. 다른 사람의 의견을 존중하면서 무례하지 않도록 작성해 주시고, 의견 충돌 시 토론 문서에서 토론해 주세요.
리브레 프로그래밍 시리즈
초급
프로그래밍
중급
프로그래밍
고급
프로그래밍
Python
협업

PHP에 대해서[편집 | 원본 편집]

PHP는 1995년 라스무스 러도프(Rasums Lerdorf)가 개발한 웹페이지 제작에 특화된 언어입니다. 기본적으로 HTML 처리에 특화된 언어로 PHP 스크립트를 HTML 코드 사이에 <?php ?>라는 PHP 실행 코드를 집어넣는 식으로 처리하는 경우가 종종 있습니다. 다만 Laravel 같은 웹 프레임워크는 HTML 코드와 섞어서 사용하지 않기도 합니다.

PHP는 여기 리브레 위키의 엔진인 미디어위키를 비롯해서 도쿠위키, 워드프레스, XE, 그누보드 등 상당히 많은 웹 어플리케이션의 기반 언어입니다. 특히 카페 24를 비롯한 대부분의 웹 호스팅 업체에서 기본 프로그래밍 언어로 사용하고 있습니다. PHP는 인터프리터 언어로, 비교적 진입장벽이 낮은 언어이기에 다양한 곳에 사용가능합니다.

이 페이지는 2014년에 나온 PHP 7 이상의 버전(Modern PHP)을 기준으로 설명할 예정입니다.

준비[편집 | 원본 편집]

PHP는 범용 언어가 아닌 웹 상의 서버를 구현하는데 특화된 언어입니다. 쉘 스크립트 프로그래밍도 가능하지만 기본적으로 HTML을 구동시키기 위해 사용하는 언어입니다. 따라서 개발환경을 구성할 때는 PHP 언어 단독으로 설치하기 보다는 Apache 웹 서버 같은 웹 서버 프로그램과 같이 설치하는 것이 일반적입니다.

보통 PHP는 다음과 같이 Apache, MySQL과 같이 설치하는 경우가 일반적입니다.

  1. Bitnami WAMP Stack - 윈도우 전용 프로그램
  2. Apache XAMPP Stack - Perl까지도 같이 설치하는 패키지. 윈도우, MacOS, 리눅스 모두 설치 가능합니다.

꼭 필요한 것은 아니지만 파이썬의 pip처럼 PHP 패키지를 관리할 때에는 Composer를 같이 설치하는 것이 좋습니다. 패키지 설치할 때 한결 편해집니다.

PHP 단독으로 설치할 때[편집 | 원본 편집]

Windows PHP 사이트를 참조해서 패키지를 설치하시면 됩니다. 그 후에 Apache나 Nginx, IIS 같은 웹 서버와 연동하는 작업을 하는 것이 좋습니다.

Hello, World![편집 | 원본 편집]

PHP는 기본적으로 <?php (구문) ?> 안에서 실행하는 구조입니다. 이 블록 밖에서는 자유롭게 웹 페이지 코드를 작성할 수 있어서 HTML 코드 안에 섞어서 사용할 수 있는 이점이 생깁니다.

기본적으로 출력할 때에는 echo나 print 함수를 사용합니다. 다음과 같이 말이죠.

<?php
echo "Hello, World!";
?>

PHP의 특징[편집 | 원본 편집]

PHP는 C언어, Java와 유사하게 중괄호({})를 블록으로 사용하는 프로그래밍 언어입니다. 대부분의 웹 언어와 마찬가지로 인터프리터 기반으로 한 줄 한 줄 해석하는 방식이며, 객체지향 프로그래밍(OOP)를 구현할 수 있음에도 절차지향적 언어의 특징이 아직 많이 남아있다는 점이 특징입니다. 같은 스크립트 언어여도 거의 완전한 객체지향 언어인 파이썬이나 루비 같은 언어랑은 다른 특징이지요.

PHP는 특히 펄(Perl)의 영향을 많이 받았는데 사용자 변수를 정의할 때 앞에 "$" 기호를 사용해서 내장변수/함수와 구별하는 점, 문자열을 합칠 때 "+" 기호가 아닌 "." 기호를 사용하는 점, 그밖에도 정규표현식을 "/ /" 사이에 넣어서 간단하게 구현할 수 있다는 점 등이 있습니다. 또한 "(int)", "(string)" 등의 표현을 이용해서 형변환이 자유롭다는 점도 장점으로 꼽힙니다.

또한 PHP는 논리 연산자를 "&&, ||" 처럼 전통의 C/자바 계열의 방식 이외에 "and , or"을 이용한 키워드 방식도 같이 지원합니다. 우선순위는 기호로 되어있는 연산자들이 높습니다. 즉 "$a || $b and $c"는 "($a || $b) && $c"와 동일한 의미가 된다는 것이죠.

최신 버전의 PHP는 다른 언어들의 장점을 많이 가져왔습니다. 즉 의외로 자바나 자바스크립트 등의 언어에 익숙하면 PHP도 배우기 쉽다는 점이죠.

웹 서버를 구동시킬 때는 다른 프로그래밍 언어와 마찬가지로 <?php ... ?> 안에 있는 내용부터 php 코드를 이용해 값을 출력한 뒤에 HTML 형식으로 출력합니다. 특별히 변수 하나만을 출력하고 싶을 때에는 <?=(변수명)?> 형식으로 사용하면 됩니다. 예를 들면 아래 코드를 입력하면 php코드에 의해 오전에는 초록색, 오후에는 보라색 글씨를 출력합니다. PHP 7버전 이상에서는 문서 끝줄까지 php 코드로 구성되어 있는 경우 관습적으로 닫는 기호인 "?>"를 생략하는 경우가 많습니다.

<?php
    date_default_timezone_set("Asia/Seoul"); // 한국 시간대 설정
    $t = date("H"); // 24시간 시
    $m = date("i"); // 24시간 분
    $color = (int)$t < 12 ? "green" : "violet";
?>
<h2 class="title" style="color:<?=$color?>">시간에 따라 달라지는 제목</h2>
<p><?php
        echo "지금 시각(24H) : ".$t."시 ".$m."분";
    ?></p>

PHP는 if 같은 키워드나 echo 같은 내장함수를 입력할 때 대소문자를 구별하지 않습니다. 즉 IF로 입력하든 if로 입력하든 iF로 입력하든 다 동일한 의미라는 것이죠. 따라서 CamalCase 같이 대소문자를 구별하는 방식으로 문자열을 나누는 전략은 사용할 수 없습니다. 다만 $로 시작하는 사용자 변수는 대소문자를 구별하기는 하나 코딩하는 사람들은 관습적으로 소문자와 "_" 기호만 사용해서 변수를 작성하려는 경향이 있습니다.

그밖에 웹 서버 프로토콜인 HTTP가 무상태성(stateless)인 만큼 PHP도 기본적으로는 무상태성(stateless) 언어입니다. 사용자가 웹 페이지 실행을 요청할 때마다 PHP를 새로 실행하고, PHP 실행이 끝나면 자동 종료한 뒤에 페이지를 띄우는 방식입니다. 웹 페이지를 띄울 때 클라이언트의 상태 정보를 가져올 필요가 없기에 예상치 못한 오류가 발생해서 웹 페이지 실행에 실패해도 다시 새로고침하면 처음부터 다시 실행돼서 잘 나오게 된다는 점이 있죠. 그러나 이건 단점으로도 작용할 수도 있는데 페이지를 새로고침할 때마다 처음부터 전부 실행해야 하기에 반복된 패턴이 자주 나오는 복잡한 페이지를 구현할 때는 실행시간을 느리게 하는 요인으로도 작용합니다.

이외에도 단점이 몇 가지 있는데 첫 번째로 내장함수 이름의 일관성이 부족한 편이라는 겁니다. 기본적으로 C 언어에서 함수 이름을 가져왔지만 이후 기능을 추가할 때 여러 언어에서 조금씩 가져오다 보니 이름 규칙의 일관성이 부족해졌습니다. 또한 php 7버전 이전에는 정의되지 않은 변수(undefined)를 사용해도 에러를 내지 않는 점이 있어서 프로그래머가 실수하기 쉬운 부분도 있다는 겁니다.

기초 문법[편집 | 원본 편집]

출력[편집 | 원본 편집]

PHP는 echo 또는 print 함수를 이용해서 출력할 수 있으며, 괄호는 생략이 가능합니다.

명령 구분[편집 | 원본 편집]

PHP는 명령이 끝나면 반드시 세미콜론(;)을 사용해서 문장을 끝마쳐야 합니다. 대신 세미콜론으로 구별만 되어 있으면 여러 명령어를 한 줄에 넣는 것도 가능합니다. PHP는 대부분의 C언어와 마찬가지로 명령과 명령 사이의 공백/개행이 몇 줄이 있건 무시하는 특성이 있기 때문이죠. 관습적으로 보기 편하게 하기 위해 한 줄에는 하나의 명렁어를 넣는 것뿐입니다.

<?php
// 한 줄에 여러 명령어도 가능합니다.
$a =1; $b = 2; $c = "만세" ; // $a는 1, $b는 2, $c는 만세로 할당

비교 연산자[편집 | 원본 편집]

대부분의 언어와는 다르게 PHP에서 같다는 기호(==)는 타입을 따지지 않습니다. 따라서 문자열 "1"과 숫자 1이 같다고 인식한다는 것이죠. 타입까지 검사하기 위해서는 등호 세 개를 사용해서 (===)라고 입력하셔야 합니다. 부등호 기호인 !=도 마찬가지로 변수 타입까지 엄밀하게 고려했을 때 같지 않다는 의미로 사용하려면 !==라는 표시를 해야 한다는 것이죠.

변수 지정[편집 | 원본 편집]

PHP에서 변수는 반드시 $ 기호로 시작해야 합니다. 또한 변수명은 숫자로는 시작할 수 없으며 반드시 로마자나 _ 기호만 사용이 가능합니다. 이후에는 로마자, 숫자, _기호를 사용할 수 있습니다. 이외의 문자들은 변수명에서 사용이 불가능합니다.

기본적으로 PHP의 변수는 전역 변수로 정의됩니다. 그러나 중괄호 {}로 블록을 지정하면 블록 안의 변수는 다른 값이 된다는 것이죠. 예를 들면 아래 코드와 같이 $a의 값은 if 블록 안에서는 정의가 되지 않습니다. 다만 global 키워드를 사용하면 블록 밖에서 정의한 변수를 블록 안에서도 사용이 가능합니다.

<?php
$a = 'A1';
$b = "BG";
if ( true ) {
    global $b; // 전역 변수를 불러와서 지역변수로 정의
    echo $a; // $a는 if 블록 안에서 정의됮 않았으므로 빈 값이 출력
    echo $b; // 전역변수를 정의했으므로 "BG"로 출력
}

형변환[편집 | 원본 편집]

PHP는 변수의 형태 변환이 자유롭습니다. 문자열을 정수처럼 사용하고 싶으면 변수명 앞에 (int) 를 넣어서 해결할 수 있습니다. 예를 들면 아래와 같은 코드가 실행 가능합니다.

주석[편집 | 원본 편집]

PHP의 주석은 다른 C-family 언어와 마찬가지로 // (한줄주석) 또는 여러 줄을 표현할 때는 /* (여러 줄 주석) */ 처럼 /* 기호와 */ 기호 사이에 주석을 넣을 수 있습니다. 그 외 다른 한 줄 주석 기호로 # (주석)도 있습니다.

참고[편집 | 원본 편집]

각주