PHP | 개발 환경 설정 / 문법

S·2024년 2월 12일
0

WEB

목록 보기
3/8

PHP


PHP는 서버에서 사용되는 스크립팅 언어이다.
실제로 웹 어플리케이션의 실행은 서버 프로그램이 담당하는데 이 때 사용하는 서버 프로그래밍 언어 중 하나이다.

개발 환경 설정

Mac을 기준으로 하였다.

설치 프로그램

  1. XAMPP
    PHP와 MySQL 등이 포함된 프로그램 패키지이다.
  2. VSCode
    프로그래밍 텍스트 편집기이다.

실행

XAMPP를 설치하고 Manage Servers에서 Start All을 누른다.

이 때 Apache Web Server가 실행되지 않는 경우, 터미널에 다음과 같이 입력한다.

sudo /Applications/XAMPP/xamppfiles/bin/apachectl start

 

기초 문법


php 프로그램 만들기

아래 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로 해결한다.
forwhile 등 다른 반복문은 사용 빈도가 낮다.

<?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은 데이터를 읽어올 때 사용하고 POST는 데이터를 저장하고, 수정하고, 삭제하는 역할을 한다.
  • GET 요청은 주소창에 파라미터를 담아서 서버에 요청을 보낸다.
  • POST 요청은 파라미터가 http 본문(body)에 실려서 서버로 전송되기 때문에 주소창에는 변화가 없다.

GET 파라미터

쿼리스트링

브라우저에서 주소창으로 전달하는 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

 

POST 파라미터

<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분 핵심 요약집

profile
Someone has been here

0개의 댓글