[PHP] PHP 정의, 동작 원리, 기본 문법 정리

김희정·2023년 11월 18일
0

프리랜서

목록 보기
8/10

💎 들어가며

이번 포스팅에서는 php의 정의, 동작원리, 기본 문법 등을 정리해보고자 합니다.

프로그래밍 언어들이 문법이 거의 유사해 코드를 읽고 수정하는 데 큰 문제는 없지만 정확한 문법을 공부하지 않으면 처음부터 코드를 짤 수 없기 때문에 php의 기본기를 다지는 시간을 갖고자 합니다.


1. PHP란

순수 HTML은 내용이 많아질수록 많은 코드를 써야하고 코드가 복잡해지고, 변경이 쉽지 않기 때문에 생산성이 떨어집니다.

그래서 프로그래밍 문법을 이용하여 조건문, 반복문 등을 이용하여 반복작업을 빠르게 처리할 수 있는 동적 페이지가 필요한데, php를 이용하면 간단하게 동적페이지를 사용할 수 있습니다.


1.1 정의

PHP(Hypertext Preprocessor)는 C언어 기반으로 만들어진 서버 측에서 실행되는 서버 사이드 스크립트 언어 입니다.

PHP로 작성된 코드를 HTML 코드 안에 추가하면, 웹 서버는 해당 코드를 해석하여 자동으로 HTML 문서를 생성합니다.


1.2 장단점

PHP는 다음과 같은 장단점을 갖고 있습니다.

  • 장점
  1. 주요 운영체제와 대부분의 웹 서버에서 지원
  2. 직관적인 코드 작성
  3. 텍스트 처리에 특화되어 있어 HTML 문서 처리에 적합
  • 단점
  1. 간단한 사이트를 제작하기 위해 만든 언어라서 복잡한 사이트를 만드는 데는 효율적이지 못함
  2. 보안에 안전하지 않은 언어 구조

1.3 서버 사이드 언어

이렇게 웹 시스템 중 서버 측에서 실행되는 서버 사이드 언어웹 프로그래밍 언어라고도 부릅니다. 이러한 웹 프로그래밍 언어 중 많이 사용되는 언어는 다음과 같습니다.

주요 서버 사이드 언어

  1. PHP
  2. JSP
  3. ASP.NET

예전에는 많은 상업용 사이트가 PHP를 사용하였지만, 보안상의 취약성으로 인해 JSP나 ASP.NET으로 대체되고 있습니다.

하지만 아직도 소규모나 개인 사이트는 대부분의 사이트가 PHP를 사용하여 제작되고 있습니다.


1.4 동작 원리

다음 그림은 PHP의 동작 원리를 간략히 보여줍니다.

PHP 동작원리

  1. 클라이언트가 웹 브라우저를 통해 웹 서버에 원하는 웹 페이지(php 페이지)를 요청합니다.
  2. 웹 서버는 클라이언트가 요청한 웹 페이지의 로직 처리를 위해 PHP 파서(parser)에 이에 대한 처리를 요청합니다.
  3. PHP 파서는 로직을 처리하고, 처리 결과를 웹 서버로 전달합니다.
  4. 웹 서버는 전달받은 데이터로 웹 페이지를 완성하여 웹 브라우저로 응답을 전송합니다.


2. 기본 문법

2.1 코드 영역

php 코드는 웹 페이지의 어느 부분에서나 위치할 수 있습니다. 따라서 PHP 파서가 PHP 코드를 인식하기 위해서는 그 시작과 끝을 알려줄 필요가 있습니다.

php 코드는 <?php ?> 형태로 작성됩니다. php 코드만 있는 경우, 종료 태그 ?>는 생략될 수 있습니다.

<?php
	echo "Hello World";
?>

2.2 세미콜론

C언어처럼 PHP 명령문도 마지막은 세미콜론(;)으로 끝납니다.

<?php
	echo "Hello World";
?>

2.3 주석

주석(comment)이란 코드 내에 삽입된 일종의 설명문입니다. PHP 주석은 다음과 같이 여러 가지 스타일을 사용할 수 있습니다.

  1. 한 줄 C언어 스타일 : //주석문
  2. 여러 줄 C언어 스타일 : /*주석문*/
  3. 한 줄 쉘 스타일 : #주석문


3. 데이터 타입

php의 데이터 타입에는 다음과 같이 있습니다.

3.1 String

String은 "Hello Word"와 같은 문자열 집합입니다. String은 쿼테이션(quotes) 안에 어떤 텍스트던 넣을 수 있습니다.

  • 싱글 쿼테이션(single quotes): '
  • 더블 쿼테이션(double quotes): "
$word = "Hello world";
echo $word;

3.2 Integer

Integer 데이터 유형은 -2,147,483,648에서 2,147,483,647 사이의 소수점이 없는 숫자입니다.

  • 최소한 하나의 숫자
  • 소수점이 없어야 함
  • 정수는 양수, 음수 모두 가능
  • 10진수, 16진수, 8진수, 2진수 표기법 지정 가능
$x = 5985;
var_dump($x);

3.3 Float

float(부동 소수점 수)는 소수점이 있는 숫자 또는 지수 형식의 숫자입니다.

$x = 10.365;
var_dump($x);

3.4 Boolean

부울은 TRUE 또는 FALSE라는 두 가지 가능한 상태를 나타냅니다.

$x = true;
$y = false;

3.5 Array

Array는 다양한 값을 담을 수 있는 배열입니다.

배열 생성

array() 함수를 사용하여 배열을 만듭니다.


배열 종류

php의 배열에는 세가지 유형이 있습니다.

  • 인덱스 배열: 숫자 인덱스가 있는 배열
  • 연관 배열: 명명된 키가 있는 배열
  • 다차원 배열: 하나 이상의 배열을 포함하는 배열

예제 1. 인덱스 배열

  • 예시 코드
$cars = array("Volvo","BMW","Toyota", 1);
echo $cars[0];
var_dump($cars);
  • 실행 결과
Volvo

array(4) { [0]=> string(5) "Volvo" [1]=> string(3) "BMW" 
[2]=> string(6) "Toyota" [3]=> int(1) }

예제 2. 연관 배열

연관 배열은 다른 프로그래밍 언어에서 Key-Value 쌍을 저장하는 Hash의 기능과 유사합니다.

  • 예시 코드
$age = array("Peter"=> 35, "Ben"=> 37, "Joe"=> 43);
echo "Peter is ".$age['Peter']." years old.";
  • 실행 결과
Peter is 35 years old.

3.6 Object

php객체지향(Object-oriented)을 지원합니다. php 버전 5부터 객체지향 관련 기능이 대거 추가되었다고합니다.

<?php  
class Car {  
  public $color;  
  public $model;  
  public function __construct($color, $model) {  
    $this->color = $color;  
    $this->model = $model;  
  }  
  public function message() {  
    return "My car is a " . $this->color . " " . $this->model . "!";  
  }  
}  
  
$myCar = new Car("black", "Volvo");  
echo $myCar -> message();  
echo "<br>";  
$myCar = new Car("red", "Toyota");  
echo $myCar -> message();  
?>
  • class 키워드를 사용하여 객체를 정의하고, new 키워드를 사용하여 객체를 생성할 수 있습니다.


4. 변수

4.1 변수의 종류

PHP의 변수에는 지역 변수, 전역 변수, 정적 변수, 슈퍼 글로벌 등을 제공합니다.

  • 지역 변수 (local variable): 함수 내에서 선언된 변수, 오직 함수 내부에서만 접근 가능
  • 전역 변수 (global variable): 함수 밖에서 선언된 변수로, 함수 밖에서만 바로 접근 가능. 내부에서 접근하고자 할 때는 global 키워드를 함께 사용. $GLOBALS 배열을 통해서도 접근 가능
  • 정적 변수 (static variable): PHP에서 미리 정의된 전역 변수.

4.2 변수 선언

변수를 선언하기 위해서는 $기호를 통해 표시합니다.

syntax

$variable =;
echo variable;

4.3 전역 변수

$var = 10; // 전역 변수 선언

function varFunc() {
    echo "값: {$var}<br>";
    global $var; // 전역 변수 명시

	// global 키워드를 사용한 예
    echo "값: {$var}<br>";

	// $GLOBALS 를 사용한 예
    echo "값: {$GLOBALS['var']}<br>";
}

varFunc();

echo "값: {$var}";

위의 예제에서 맨 처음 호출한 echo 함수는 아무런 값도 출력하지 못하지만 사용할 전역 변수를 global 키워드로 명시하고 나서 다시 호출한 echo 함수는 정확한 전역 변수의 값을 출력합니다.


4.4 정적 변수

정적 변수(static variable)란 함수 내부에서 static 키워드로 선언한 변수를 의미합니다.

함수 내부에서 선언된 정적 변수는 함수의 호출이 종료되더라도 메모리상에서 사라지지 않습니다. 하지만 지역 변수처럼 해당 함수 내부에서만 접근할 수 있습니다.

function counter() {
    static $count = 0;
    echo "값: {$count}<br>";
    $count++;
}
counter();
counter();
counter();

4.5 슈퍼 전역변수

PHP는 미리 정의된 전역 변수슈퍼 전역변수(superglobal)를 제공합니다. 이러한 슈퍼 전역변수는 특별한 선언 없이 스크립트 내의 어디에서라도 바로 사용할 수 있습니다.

PHP에서 제공하는 슈퍼 글로벌

  1. $GLOBALS: 전역변수 배열
  2. $_SERVER: 서버 및 클라이언트 요청에 대한 정보
  3. $_GET:
  4. $_POST
  5. $_FILES
  6. $_COOKIE
  7. $_SESSION
  8. $_REQUEST
  9. $_ENV

$_GET, $_POST

$_GET$_POST 변수는 사용자의 요청 파라미터를 처리할 때 사용합니다. 예시로, 아래와 같은 form 태그를 통해 요청을 보냅니다.

<html>
<body>
    <form action="request.php" method="post">
        이름 : <input type="text" name="name"><br>
        이메일 : <input type="text" name="email"><br>
        <input type="submit">
    </form>
</body>
</html>

request.php에서 값을 받아 요청을 처리합니다.

$name = $_POST["name"];
$email = $_POST["email"];


echo $name."님의 이메일 주소는 ".$email."입니다.";

$_SERVER

$_SERVER 변수는 서버 및 클라이언트 요청에 대한 정보

echo $_SERVER[´SERVER_NAME´]; // 호스트 서버 이름
echo $_SERVER[´HTTP_HOST´]; // 현재 request에 대한 호스트 헤더
echo $_SERVER[´HTTP_REFERER´]; // 현재 페이지의 URL 전부
echo $_SERVER[´HTTP_USER_AGENT´]; // 사용자의 브라우저 정보
echo $_SERVER[´SCRIPT_NAME´]; // 현재 실행중인 스크립트의 절대 주소

5. 조건문

코드를 작성할 때 다양한 조건에 대해 작업을 분기해서 수행할 때 조건문을 사용할 수 있습니다.


5.1 if ~ elseif ~ else

조건(condition)에 따라 실행할 코드를 선택합니다.

if (condition) {
  // condition이 true이면 실행
} elseif (condition) {
  // 두번째 condition이 true이면 실행
} else {
  // 모든 condition이 false이면 실행
}

5.2 Switch 문

switch명령문을 사용하여 실행할 여러 코드 블록 중 하나를 선택합니다 .

switch (n) {
  case "student":
    echo "학생입니다."
    break;
  case "salayman":
    echo "직장인입니다."
    break;
  case "official":
    echo "공무원입니다."
    break;
    ...
  default:
  	echo "사람입니다."
}
  • break는 코드가 자동으로 다음 사례로 실행되는 것을 방지하는 데 사용
  • default는 일치하는 항목이 없을 때 실행 명령문


6. 반복문

동일한 코드 블록이 특정 횟수만큼 반복해서 실행하고자 할 때 반복문을 사용합니다.


6.1 while

while

while 문은 지정된 조건이 true인 동안 코드 블록을 실행합니다.

syntax

while (condition is true) {
  // 실행될 코드
}
$x = 1;

while($x <= 5) {
  echo "count: $x <br>";
  $x++;
}

do... while

do...while 문은 항상 코드 블록을 한 번 실행한 다음 조건을 확인하고 지정된 조건이 true인 동안 루프를 반복합니다.

syntax

do {
  // 실행될 코드
} while (condition is true);
$x = 1;

do {
  echo "count: $x <br>";
  $x++;
} while ($x <= 5);

6.2 for

for

for 문은 지정된 횟수만큼 코드 블록을 반복합니다.

syntax

for (init counter; test counter; increment counter) {
  // 실행될 코드
}
  • init counter: 루프 카운터 값을 초기화합니다.
  • test counter: 각 루프 반복에 대해 평가됩니다. TRUE로 평가되면 루프가 계속됩니다. FALSE로 평가되면 루프가 종료됩니다.
  • increment counter : 루프 카운터 값을 증가시킵니다.
for ($x = 0; $x <= 10; $x++) {
  echo "count: $x <br>";
}

foreach

foreach 문은 배열의 각 요소에 대한 코드 블록을 반복합니다.

syntax

foreach ($array as $value) {
  // 실행될 코드
}
$colors = array("red", "green", "blue", "yellow");

foreach ($colors as $value) {
  echo "$value <br>";
}


7. 함수

php에서는 미리 작성되어 제공되는 많은 내장 함수들이 있습니다. 하지만 필요로하는 기능이 없다면 직접 함수를 만들 수도 있습니다.

이러한 함수를 사용자 정의 함수라고 합니다.

syntax

function 함수이름(매개변수1, 매개변수2,...){
    // 실행될 코드
}

function 키워드로 함수의 정의를 시작하고, 함수의 이름, 매개변수, 블록({ }) 사이에 들어갈 코드를 명시합니다.

PHP는 함수 오버로딩을 지원하지 않으므로, 이미 선언된 함수를 다시 선언할 수 없습니다. 또한, 함수의 이름은 대소문자를 구분하지 않기 때문에 sum()과 SUM()은 같은 함수로 취급됩니다.

  • 예시 코드
function sum($x, $y){
	return $x + $y;
}

echo sum(2, 3); // 실행 결과: 5

💎 마치며

아직 외주를 많이 해보지는 않았지만, 퍼플리싱 경험이 점차 늘어남에 따라 통상적으로 php 기술을 사용한다는 결론에 수렴할 거 같습니다.


References

profile
Java, Spring 기반 풀스택 개발자의 개발 블로그입니다.

0개의 댓글