PHP는 서버에서 사용되는 스크립팅 언어이다.
실제로 웹 어플리케이션의 실행은 서버 프로그램이 담당하는데 이 때 사용하는 서버 프로그래밍 언어 중 하나이다.
Mac을 기준으로 하였다.
XAMPP를 설치하고 Manage Servers에서 Start All을 누른다.
이 때 Apache Web Server가 실행되지 않는 경우, 터미널에 다음과 같이 입력한다.
sudo /Applications/XAMPP/xamppfiles/bin/apachectl start
아래 hello.php
파일의 경로는 다음과 같다.
xampp설치경로/htdocs/hello.php
<?php // php 실행을 시작
echo "Hello PHP"; // 출력을 담당하는 명령어
?> // php 실행을 끝냄
주석 작성은 다음과 같다.
주석의 내용은 해석하지 않는다.
// 한 줄 주석은 다음과 같이 작성한다.
/*
여러 줄 주석은
다음과 같이
작성한다.
*/
변수의 형태는 다음과 같다.
$변수 이름 = 변수에 들어갈 값
PHP의 변수는 $
로 시작한다.
영어, 숫자, 언더바(_
)만 가능하며 숫자로 시작할 수 없다.
PHP의 변수는 타입 선언을 하지 않는다
<?php
$a = 1; // 정수 int
$b = 2; // 정수 int
$c = $a + $b; // 정수 계산
$d = 3.14; // 실수 float
$e = "hi"; // 문자열 string
$f = 'hello'; // 문자열 string
$g = array(1,2,3,4); // 배열 array
$h = array('a'=>1, 'b'=> 2); // 연관배열 associative array
var_dump($a);echo "<br />";
var_dump($b);echo "<br />";
var_dump($c);echo "<br />";
var_dump($d);echo "<br />";
var_dump($e);echo "<br />";
var_dump($f);echo "<br />";
var_dump($g);echo "<br />";
var_dump($h);echo "<br />";
int(1)
int(2)
int(3)
float(3.14)
string(2) "hi"
string(5) "hello"
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(2) { ["a"]=> int(1) ["b"]=> int(2) }
var_dump
는 데이터의 정보를 보여주는 내장 함수이다.
echo "<br />";
은 html에서 줄바꿈을 보여주기 위한 문장이다.
배열은 여러 개의 값을 한 번에 넣을 수 있는 자료 구조이다.
PHP의 배열은 값의 타입이 달라도 상관없다.
PHP에서 배열의 선언은 array
구문으로 한다.
PHP 5.4 버전 이상에서는 []
기호로도 대체 가능하다.
$a1 = array();
$a2 = [];
배열을 생성하며 초기값을 넣을 수 있다.
$a1 = array(1,2,3,4);
$b1 = [1,2,3,4];
일반 배열은 연속된 값을 넣을 수 있다.
키는 숫자로 자동으로 붙여진다.
$a = array(1, 2, 3, 4);
일반 배열에 항목을 추가할 때는 array_push(배열, 넣을 값)
형식으로 사용하면 된다.
가장 큰 숫자 키 값 + 1이 새로운 배열의 키가 된다.
array_push($a, 5);
아래는$a[4]
가 새롭게 추가된 배열 값의 키다.
array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
일반 배열에서 항목을 삭제할 때는 PHP에서 변수를 제거하는 구문인 unset
을 사용한다.
이 때 남은 배열의 다른 항목들의 인덱스가 재배치되지 않는다
unset($a[0]);
아래는 unset($a[0])
후의 결과가 [1]
부터 시작되는 것을 볼 수 있다.
array(4) { [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
연관 배열은 키:값
쌍으로 이루어진 자료 구조이다.
$b = array('a' => 10);
연관 배열에서 선언하며 초기값을 넣을 때는 키 => 값
형태로 넣는다.
PHP는 일반 배열과 연관 배열이 혼합된 형태로도 사용 가능하다.
$c = [1,2,3];
$c['age'] = 999;
var_dump($c);
연관 배열에 값을 추가할 때는 변수명[키] = 값
형태로 넣는다.
$b['b'] = 20;
연관 배열에서 항목을 삭제할 때는 일반 배열과 동일하게 unset
을 사용한다.
unset($b['a']);
산술 연산자는 각각의 항목을 연산하는 키워드이다.
문자열 연산자는 문자열을 연산한다.
<?php
$a = 10;
$b = 20;
$c = $a + $b;
$d = $a - $b;
$e = $a * $b;
$f = $a / $b;
$g = $a % $b;
$h = 'hi ';
$i = "php";
$j = $h . $i;
$k = "$h nice to meet you. $i";
var_dump($a);echo "<br />";
var_dump($b);echo "<br />";
var_dump($c);echo "<br />";
var_dump($d);echo "<br />";
var_dump($e);echo "<br />";
var_dump($f);echo "<br />";
var_dump($g);echo "<br />";
var_dump($h);echo "<br />";
var_dump($i);echo "<br />";
var_dump($j);echo "<br />";
var_dump($k);echo "<br />";
위 코드를 실행하면 다음과 같다.
int(10)
int(20)
int(30)
int(-10)
int(200)
float(0.5)
int(10)
string(3) "hi "
string(3) "php"
string(6) "hi php"
string(25) "hi nice to meet you. php"
비교 연산자는 두 값을 비교하는 연산자이다.
무조건 bool
타입을 반환하며 대부분 조건문에서 사용한다.
<?php
$a = 10;
$b = "10";
$c = $a == $b;
$d = $a === $b;
$e = $a != $b;
$f = $a <> $b;
$g = $a !== $b;
$h = 20;
$i = $a > $h;
$j = $a < $h;
$k = $a >= $h;
$l = $a <= $h;
var_dump($a); echo "<br />";
var_dump($b); echo "<br />";
var_dump($c); echo "<br />";
var_dump($d); echo "<br />";
var_dump($e); echo "<br />";
var_dump($f); echo "<br />";
var_dump($g);echo "<br />";
var_dump($h);echo "<br />";
var_dump($i);echo "<br />";
var_dump($j);echo "<br />";
var_dump($k);echo "<br />";
var_dump($l);echo "<br />";
위 코드를 실행하면 다음과 같다.
int(10)
string(2) "10"
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)
int(20)
bool(false)
bool(true)
bool(false)
bool(true)
==
는 값이 같은지 비교한다. 타입은 신경쓰지 않는다.
===
는 값과 타입이 같은지 비교한다.
!=
와 <>
는 값이 다른지 비교한다. 타입은 신경쓰지 않는다.
!==
는 값과 타입이 다른지 비교한다.
<?php
$a = true;
$b = false;
$c = $a && $b;
$d = $a || $b;
$e = !$a;
var_dump($a);echo "<br />";
var_dump($b);echo "<br />";
var_dump($c);echo "<br />";
var_dump($d);echo "<br />";
var_dump($e);echo "<br />";
위 코드를 실행하면 다음과 같다.
bool(true)
bool(false)
bool(false)
bool(true)
bool(false)
조건문은 프로그램의 흐름을 제어할 때 쓰인다.
<?php
$second = date('s');
echo $second;
if ($second % 3 == 0){
echo " : 나머지가 0임";
}
elseif ($second % 3 == 1) {
echo " : 나머지가 1임";
}
else{
echo " : 나머지가 2임";
}
반복문은 연속된 값을 꺼내서 처리할 때 사용한다.
대부분 배열을 대상으로 반복한다.
PHP에서는 거의 대부분의 반복문을 foreach
로 해결한다.
for
나 while
등 다른 반복문은 사용 빈도가 낮다.
<?php
$a = array(1,2,3,4,5);
foreach($a as $item){
echo $item;
echo "<br />";
}
echo "<br />";
$b = array('a'=>10, 'b'=>20, 'c'=> 'hi php');
foreach($b as $key=>$value){ // 키와 값을 하나씩 빼낸다.
echo "$key => $value";
echo
위 코드를 실행하면 다음과 같다.
1
2
3
4
5
a => 10
b => 20
c => hi php
함수는 특정 기능을 나눠놓은 코드 조각이다.
함수는 function
키워드로 정의하고 바로 다음에 이름을 기술한다.
( )
안에 파라미터를 선언하며 블럭 { }
안에 내용을 기술한다.
함수는함수명(파라미터들)
형태로 호출한다.
함수는 기본 파라미터를 가질 수 있다.
파라미터가 전달되지 않으면 기본 파라미터를 사용하고 파라미터를 전달하면 전달된 파라미터를 사용하게 된다.
<?php
function hello_php()
{
echo "hello php";
}
hello_php();
echo "<br />";
function nicetomeet($var)
{
echo "nice to meet $var";
}
nicetomeet("you");
echo "<br />";
function add($a, $b)
{
$result = $a + $b;
return $result;
}
$result = add(1, 2);
echo $result;
echo "<br />";
function defaultfunc($name='yse'){
echo "my name is $name";
}
defaultfunc();
echo "<br />";
defaultfunc('30min php');
echo "<br />";
위 코드를 실행하면 다음과 같다.
hello php
nice to meet you
3
my name is yse
my name is 30min php
php는 언어와 내장 함수들이 웹과 강하게 연결되어 있는 언어이기 때문에 웹을 다루기 위한 기능이 내장되어 있다.
http 메소드는 크게 9개가 있다. 이 중 브라우저에서는 GET과 POST 2개를 주로 사용한다.
브라우저에서 주소창으로 전달하는 GET 파라미터는 ?
로 시작하고 각 항목은 키:값
형태로 구성하며 항목 간의 연결에는 &
로 표시한다.
<?php
$name = $_GET['name'];
$age = $_GET['age'];
echo "name is $name, age is $age";
위 코드를 get.php 파일에 저장하고 브라우저에서
아래 링크에 접속하면 다음과 같은 결과가 나타난다.
http://localhost/get.php?name=yse&age=22
name is yse, age is 22
<form method="post">
name : <input type="text" name="name" />
age : <input type="text" name="age" />
<input type="submit" />
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = $_POST['name'];
$age = $_POST['age'];
echo "name is $name, age is $age";
}
?>
위 코드를 post.php 파일에 저장하고 브라우저에서 결과를 확인한다.
name 란에 aaa를, age 란에 222를 입력하고 제출 버튼을 클릭한다.
name is aaa, age is 222
리다이렉트는 다른 페이지로 이동하는 것을 말한다.
<?php
header("Location: /target_url");
exit();
위 코드를 redirect.php 파일에 저장하고 브라우저에서 결과를 확인한다.
http://localhost/redirect.php 에 접속하면 http://localhost/target_url 로 이동하는 것을 확인할 수 있다.
물론 해당하는 서버 리소스가 없으므로 브라우저에서는 404 not found 오류를 내 보낸다.
세션은 서버에 저장되는 접속 클라이언트 별 사용자의 정보다.
<?php
function redirect($url){ // 편의를 위해 작성
header('Location: ' . $url);
exit();
}
session_start(); // 세션 준비, 작성 필수
$action = $_GET['action'];
// $action 변수는 파라미터에 따라 하는 일을 구분하는 용도이다.
if ($action == "set"){ // set: 세션을 설정
$_SESSION['key'] = 'session_value';
redirect("?action=get");
}elseif ($action == "get"){ // get: 세션을 가지고 옴
// 세션은 $_SESSION 글로벌 전역 변수를 통해 사용이 가능하다.
// 연관 배열과 사용이 같다.
// iset은 변수가 존재하는지 확인하는 내장 함수이다.
if (isset($_SESSION['key'])){
echo $_SESSION['key'];
}else{
echo "NO SESSION";
}
}elseif ($action == "remove"){ // remove: 세션 삭제
if (isset($_SESSION['key'])){
// 세션에서 값을 삭제하기 위해 unset을 사용한다.
unset($_SESSION['key']);
}
redirect("?action=get");
}
<?php
$date1 = date("Y-m-d H:i:s");
$date2 = new DateTime();
$date2_str = $date2->format("Y-m-d H:i:s");
var_dump($date1); echo "<br />";
var_dump($date2); echo "<br />";
var_dump($date2_str); echo "<br />";
$tomorrow = $date2->add(new DateInterval("P1D"));
var_dump($tomorrow); echo "<br />";
위 코드를 실행하면 다음과 같다.
string(19) "2020-07-23 07:28:18"
object(DateTime)#1 (3) { ["date"]=> string(26) "2020-07-23 07:28:18.498365" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
string(19) "2020-07-23 07:28:18"
object(DateTime)#1 (3) { ["date"]=> string(26) "2020-07-24 07:28:18.498365" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Berlin" }
참고 | PHP 3분 핵심 요약집