워드프레스는 PHP를 사용하기 때문에 기초 정도는 정리해서 볼 필요가 있다고 생각했습니다.
PHP 연습 사이트
연습사이트: https://www.mycompiler.io/ko/new/php
공부사이트: https://codingeverybody.kr/category/php
공부사이트: https://www.tcpschool.com/php/intro
PHP(Hypertext Preprocessor)란
PHP는 대표적인 서버사이드 언어이며 현재는 범용 프로그래밍 언어이다.
PHP 기본 문법
코드 작성 방법
PHP 코드는 <?php … ?>태그 안에 작성
<?php
// 이곳에 코드를 작성
?>
주석
<?php
// 한 줄 주석
# 한 줄 주석
/*
여러 줄 주석
여러 줄의 내용을 주석으로 처리할 수 있습니다.
*/
echo "주석을 잘 활용하세요!";
?>
echo와 print (출력하기)
echo는 PHP에서 텍스트, 변수, HTML 태그 등을 출력하는 가장 기본적인 명령어
echo "Hello, World!"; // Hello World
echo "Hello", " ", "PHP"; // PHP 는 재미있습니다!
echo "<h1>PHP 배우기</h1>";
echo "<p>이 문장은 <strong>굵게</strong> 표시됩니다.</p>";
$name = "PHP";
echo "나는 $name를 배웁니다."; // 변수 값이 해석됨 > 나는 PHP를 배웁니다.
echo '나는 $name를 배웁니다.'; // 변수 값이 해석되지 않음 > 나는 $name를 배웁니다.
print "반갑습니다!"; // 단일 값만 출력 가능
큰따옴표("
): 변수 값을 해석하여 출력
작은따옴표('
): 변수 값을 해석하지 않고 문자열 그대로 출력
변수와 데이터 타입
변수 선언
PHP에서 변수를 선언할 때는 $ 기호를 사용
<?php
$name = "PHP";
$age = 20;
$isLearning = true;
echo "이름: " . $name . "<br>";
echo "나이: " . $age . "<br>";
echo "학습 중인가요? " . ($isLearning ? "네" : "아니요");
?>
데이터 타입
데이터 타입 | 예제제 |
---|---|
문자열 (string) | “Hellop, PHP!” |
정수 (integer) | 123 |
실수 (float) | 3.14 |
불리언 (boolean) | true, false |
배열 (array) | [“사과”, “바나나”, “포도”] |
객체 (object) | new ClassName(); |
NULL (null) | NULL |
이런 타입들이 존재하고 PHP는 동적 타입 언어이므로, 변수의 타입이 자동으로 변환
<?php
$value = "10";
$sum = $value + 5; // 문자열 "10"이 숫자로 변환됨
echo $sum; // 15 출력
?>
데이터 타입 확인하기
PHP에서는 var_dump()를 사용하면 변수의 데이터 타입을 확인가능
<?php
$num = 10;
$pi = 3.14;
$text = "Hello";
$isPHP = true;
var_dump($num);
var_dump($pi);
var_dump($text);
var_dump($isPHP);
?>
상수 (define과 const)
변수와 달리 한번 설정하면 변경할 수 없는 값을 상수(Constant)라고 한다.
상수는 define() 함수 또는 const 키워드를 사용해 선언한다.
<?php
define("SITE_NAME", "PHP 기초 강의");
const MAX_USERS = 100;
echo SITE_NAME; // "PHP 기초 강의"
echo "<br>";
echo MAX_USERS; // 100
?>
define() vs const 차이점
기능 | define() | const |
---|---|---|
선언 방식 | define(“NAME”, “value”); | const NAME = “value”; |
조건문 내부 사용 | 가능 | 불가능 |
클래스 내부 사용 | 불가능 | 가능 (public const NAME = “value”;) |
네임스페이스 지원 | 지원하지 않음 | 지원 |
실행 시점 | 런타임(Runtime) | 컴파일 타임(Compile-time) |
연산자(Operators)
연산자는 값을 계산하거나 조작하는 데 사용되는 기호
산술 연산자 (Arithmetic Operators)
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13
echo $a - $b; // 7
echo $a * $b; // 30
echo $a / $b; // 3.3333
echo $a % $b; // 1
?>
비교 연산자 (Comparison Operators)
비교 연산자는 두 값을 비교하고 참(true) 또는 거짓(false)을 반환
연산자 | 설명 | 예제 | 결 |
---|---|---|---|
== | 값이 같으면 참 | 5 == "5" | true |
=== | 값과 타입이 모두 같으면 참 | 5 === "5" | false |
!= | 값이 다르면 참 | 5 != 3 | true |
<> | 값이 다르면 참 (동일한 역할) | 5 <> 3 | true |
!== | 값 또는 타입이 다르면 참 | 5 !== "5" | true |
> | 왼쪽 값이 크면 참 | 10 > 5 | true |
< | 왼쪽 값이 작으면 참 | 3 < 5 | true |
>= | 왼쪽 값이 크거나 같으면 참 | 10 >= 10 | true |
| 왼쪽 값이 작거나 같으면 참 |
|
|
논리 연산자 (Logical Operators)
논리 연산자는 참(true) 또는 거짓(false) 값을 조합하여 논리적인 연산을 수행할 때 사용
<?php
$a = true;
$b = false;
var_dump($a && $b); // false
var_dump($a || $b); // true
var_dump(!$a); // false
?>
대입 연산자 (Assignment Operators)
<?php
$x = 10;
$x += 5; // $x = 15
$x -= 3; // $x = 12
$x *= 2; // $x = 24
$x /= 4; // $x = 6
echo $x; // 6
?>
증감 연산자 (Increment/Decrement Operators)
변수의 값을 증가 또는 감소시킬 때 사용
<?php
$x = 5;
echo ++$x; // 6 (먼저 증가)
echo $x++; // 6 (출력 후 증가)
echo $x; // 7
echo --$x; // 6 (먼저 감소)
echo $x--; // 6 (출력 후 감소)
echo $x; // 5
?>
삼항 연산자 (Ternary Operator)
<?php
$age = 18;
$status = ($age >= 18) ? "성인" : "미성년자";
echo $status; // 성인
?>
제어문 (조건문 & 반복문)
조건문 (Conditional Statements)
if문
<?php
$age = 20;
if ($age >= 18) {
echo "성인입니다.";
}
?>
if – else 문
<?php
$score = 50;
if ($score >= 60) {
echo "합격!";
} else {
echo "불합격!";
}
?>
if – elseif – else 문
<?php
$score = 85;
if ($score >= 90) {
echo "A 학점";
} elseif ($score >= 80) {
echo "B 학점";
} elseif ($score >= 70) {
echo "C 학점";
} else {
echo "F 학점";
}
?>
switch 문
<?php
$fruit = "사과";
switch ($fruit) {
case "사과":
echo "사과를 선택했습니다.";
break;
case "바나나":
echo "바나나를 선택했습니다.";
break;
case "포도":
echo "포도를 선택했습니다.";
break;
default:
echo "선택한 과일이 없습니다.";
}
?>
반복문 (Loops)
for 문
for(초기식; 조건식; 증감식) { 실행할 코드 }
<?php
for ($i = 1; $i <= 5; $i++) {
echo "반복: $i <br>";
}
?>
while 문
while 문은 조건이 참(true)이면 계속 실행, 반복 횟수가 정해지지 않은 경우 사용
<?php
$num = 1;
while ($num <= 3) {
echo "현재 숫자: $num <br>";
$num++;
}
?>
do-while 문
do-while 문은 최소 한 번은 실행
<?php
$num = 5;
do {
echo "현재 숫자: $num <br>";
$num++;
} while ($num <= 3);
?>
foreach 문
배열을 반복할 때 사용
<?php
$fruits = ["사과", "바나나", "포도"];
foreach ($fruits as $fruit) {
echo "과일: $fruit <br>";
}
?>
키(key)와 값(value) 모두 사용하기
<?php
$prices = ["사과" => 1000, "바나나" => 1500, "포도" => 2000];
foreach ($prices as $fruit => $price) {
echo "$fruit 가격: $price 원 <br>";
}
?>
반복문 제어 (break, continue)
break 문
break는 반복문을 즉시 종료
<?php
for ($i = 1; $i <= 5; $i++) {
if ($i == 3) {
break; // 3에서 반복 종료
}
echo "반복: $i <br>";
}
?>
continue 문
<?php
for ($i = 1; $i <= 5; $i++) {
if ($i == 3) {
continue; // 3은 건너뜀
}
echo "반복: $i <br>";
}
?>
함수
함수(Function)는 특정 작업을 수행하는 코드 블록, 코드의 재사용성을 높이고, 유지보수를 쉽게 하며, 가독성을 개선하는 데 도움을 줌
PHP에서는 기본적으로 제공되는 내장 함수(Built-in Functions)와 사용자가 직접 만드는 사용자 정의 함수(User-defined Functions)가 있음
함수 정의
function 함수이름(매개변수) {
// 실행할 코드
return 반환값; // (선택 사항)
}
실행하기
<?php
function sayHello() {
echo "안녕하세요!<br>";
}
sayHello(); // 함수 호출
?>
매개변수
<?php
function greet($name) {
echo "안녕하세요, $name 님!<br>";
}
greet("Sangmin"); // 안녕하세요, Sangmin 님!
greet("PHP"); // 안녕하세요, PHP 님!
?>
기본값을 가진 매개변수 (Default Parameters)
매개변수에 기본값을 설정하면, 함수 호출 시 인자를 생략가능
<?php
function introduce($name = "손님") {
echo "반갑습니다, $name 님!<br>";
}
introduce("Sangmin"); // 반갑습니다, Sangmin 님!
introduce(); // 반갑습니다, 손님 님!
?>
반환값이 있는 함수 (Return Values)
<?php
function add($a, $b) {
return $a + $b;
}
$sum = add(10, 5);
echo "10 + 5 = $sum"; // 10 + 5 = 15
?>
여러 개의 반환값 (배열 반환)
<?php
function getUserInfo() {
return ["이름" => "Sangmin", "나이" => 25, "국적" => "대한민국"];
}
$user = getUserInfo();
echo "이름: " . $user["이름"] . "<br>";
echo "나이: " . $user["나이"] . "<br>";
echo "국적: " . $user["국적"] . "<br>";
?>
가변 인자 함수 (Variable-length Arguments)
매개변수의 개수를 정해두지 않고 여러 개의 인자를 받을 수 있는 함수
<?php
function sumAll(...$numbers) {
return array_sum($numbers);
}
echo sumAll(1, 2, 3, 4, 5); // 15
?>
값 전달 vs 참조 전달 (Pass by Value vs Reference)
기본적으로 PHP에서 함수는 변수의 값을 복사하여 전달
<?php
function changeValue($num) {
$num += 10;
}
$a = 5;
changeValue($a);
echo $a; // 5 (원본 값 변경 없음)
?>
참조 전달
변수 앞에 &를 붙이면 원본 변수가 변경
<?php
function changeValue(&$num) {
$num += 10;
}
$a = 5;
changeValue($a);
echo $a; // 15 (원본 값이 변경됨)
?>
&를 사용하면 함수 내부에서 변수 값을 직접 수정할 수 있음
익명 함수 (Anonymous Function, Lambda)
<?php
$greet = function($name) {
return "안녕하세요, $name 님!";
};
echo $greet("Sangmin");
?>
화살표 함수 (Arrow Function, PHP 7.4+)
return 키워드를 생략할 수 있어 더 간결한 코드 작성이 가능
<?php
$square = fn($x) => $x * $x;
echo $square(5); // 25
?>
배열과 배열 함수
배열(Array) 기본 개념
배열은 여러 개의 데이터를 하나의 변수에 저장할 수 있음, PHP에서 배열을 생성하는 방법은 크게 세 가지
인덱스 배열 (Indexed Array)
숫자 인덱스를 사용하여 값을 저장
<?php
$fruits = ["사과", "바나나", "포도"];
echo $fruits[0]; // 사과
echo $fruits[1]; // 바나나
?>
인덱스 배열 생성 방법
<?php
$arr1 = array("사과", "바나나", "포도"); // array() 사용
$arr2 = ["사과", "바나나", "포도"]; // [] 사용 (PHP 5.4+)
?>
연관 배열 (Associative Array)
문자열 키(key)를 사용하여 값을 저장
<?php
$user = [
"이름" => "Sangmin",
"나이" => 25,
"국적" => "대한민국"
];
echo $user["이름"]; // Sangmin
echo $user["나이"]; // 25
?>
다차원 배열 (Multidimensional Array)
배열 안에 배열을 포함할 수 있음
<?php
$students = [
["이름" => "철수", "나이" => 20],
["이름" => "영희", "나이" => 21],
];
echo $students[0]["이름"]; // 철수
echo $students[1]["나이"]; // 21
?>
배열 다루기 (추가, 수정, 삭제)
추가
<?php
$fruits = ["사과", "바나나"];
$fruits[] = "포도"; // 새로운 값 추가
print_r($fruits);
?>
특정 키에 값 추가하기 (연관 배열)
<?php
$user["주소"] = "서울";
print_r($user);
?>
삭제
<?php
unset($fruits[1]); // 바나나 삭제
print_r($fruits);
?>
배열 반복문 (foreach)
인덱스
<?php
$fruits = ["사과", "바나나", "포도"];
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
?>
연관 배열
<?php
$user = ["이름" => "Sangmin", "나이" => 25];
foreach ($user as $key => $value) {
echo "$key: $value <br>";
}
?>
배열 관련 주요 함수
배열 개수 확인 (count())
<?php
$fruits = ["사과", "바나나", "포도"];
echo count($fruits); // 3
?>
배열 정렬
함수 | 설명 |
---|---|
sort($arr) | 오름차순 정렬 (값 기준) |
rsort($arr) | 내림차순 정렬 (값 기준) |
asort($arr) | 오름차순 정렬 (키 유지) |
ksort($arr) | 키를 기준으로 오름차순 정렬 |
arsort($arr) | 내림차순 정렬 (키 유지) |
krsort($arr) | 키를 기준으로 내림차순 정렬 |
<?php
$numbers = [3, 1, 4, 1, 5];
sort($numbers);
print_r($numbers); // [1, 1, 3, 4, 5]
?>
배열에 값 추가 (array_push(), array_unshift())
<?php
$fruits = ["사과", "바나나"];
array_push($fruits, "포도"); // 끝에 추가
array_unshift($fruits, "딸기"); // 앞에 추가
print_r($fruits); // Array ( [0] => 딸기 [1] => 사과 [2] => 바나나 [3] => 포도 )
?>
배열에서 값 제거 (array_pop(), array_shift())
<?php
array_pop($fruits); // 마지막 요소 제거
array_shift($fruits); // 첫 번째 요소 제거
print_r($fruits);
?>
특정 값이 배열에 있는지 확인 (in_array())
<?php
$fruits = ["사과", "바나나", "포도"];
if (in_array("바나나", $fruits)) {
echo "바나나가 배열에 있습니다!";
}
?>
배열을 문자열로 변환 (implode())
<?php
$fruits = ["사과", "바나나", "포도"];
echo implode(", ", $fruits); // "사과, 바나나, 포도"
?>
문자열을 배열로 변환 (explode())
<?php
$text = "사과,바나나,포도";
$fruits = explode(",", $text);
print_r($fruits); // Array ( [0] => 사과 [1] => 바나나 [2] => 포도 )
?>
클래스(Class)와 객체(Object)
클래스(Class)는 객체를 생성하는 설계도이며, 객체(Object)는 클래스를 기반으로 생성된 인스턴스이다.
클래스(Class) 생성 및 객체(Object) 생성
class 클래스이름 {
// 속성 (Property)
// 메서드 (Method)
}
기본 클래스와 객체 생성
<?php
class Car {
public $brand = "BMW"; // 속성 (property)
public function drive() { // 메서드 (method)
return "자동차가 달립니다!";
}
}
$myCar = new Car(); // 객체 생성
echo $myCar->brand; // BMW
echo $myCar->drive(); // 자동차가 달립니다!
?>
생성자(Constructor)와 소멸자(Destructor)
생성자 (__construct())
객체가 생성될 때 자동으로 실행되는 메서드
<?php
class User {
public $name;
// 생성자
public function __construct($name) {
$this->name = $name;
}
public function greet() {
return "안녕하세요, {$this->name} 님!";
}
}
$user1 = new User("Sangmin");
echo $user1->greet(); // 안녕하세요, Sangmin 님!
?>
소멸자 (__destruct())
객체가 더 이상 사용되지 않을 때 자동 실행, PHP가 객체를 메모리에서 제거할 때 자동 실행
<?php
class Test {
public function __construct() {
echo "객체 생성!<br>";
}
public function __destruct() {
echo "객체 소멸!";
}
}
$obj = new Test();
?>
접근 제어자 (Public, Private, Protected)
PHP 클래스는 속성과 메서드에 접근 제한을 설정가능
접근 제어 | 설명 |
---|---|
public | 모든 곳에서 접근 가능 |
private | 클래스 내부에서만 접근 가능 |
protected | 클래스 내부 및 상속된 클래스에서 접근 가능 |
public (공개 속성)
<?php
class Person {
public $name = "Sangmin"; // 공개 속성
}
$p = new Person();
echo $p->name; // Sangmin
?>
private (비공개 속성)
<?php
class Person {
private $age = 25;
public function getAge() {
return $this->age; // 내부 접근 가능
}
}
$p = new Person();
// echo $p->age; // 오류 발생 (직접 접근 불가)
echo $p->getAge(); // 25
?>
protected (상속된 클래스에서만 접근 가능)
<?php
class ParentClass {
protected $secret = "이것은 비밀!";
}
class ChildClass extends ParentClass {
public function getSecret() {
return $this->secret; // 자식 클래스에서 접근 가능
}
}
$child = new ChildClass();
echo $child->getSecret(); // 이것은 비밀!
?>
상속 (Inheritance)
PHP에서는 extends 키워드를 사용하여 클래스를 상속할 수 있다.
<?php
class Animal {
public function sound() {
return "소리를 냅니다!";
}
}
class Dog extends Animal {
public function bark() {
return "멍멍!";
}
}
$dog = new Dog();
echo $dog->sound(); // 소리를 냅니다!
echo $dog->bark(); // 멍멍!
?>
메서드 오버라이딩 (Method Overriding)
자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있음
<?php
class ParentClass {
public function greet() {
return "안녕하세요!";
}
}
class ChildClass extends ParentClass {
public function greet() { // 메서드 재정의
return "Hello!";
}
}
$child = new ChildClass();
echo $child->greet(); // Hello!
?>
정적 메서드와 정적 속성 (static)
static 키워드를 사용하면 객체 생성 없이도 클래스 속성이나 메서드에 접근할 수 있다.
<?php
class Math {
public static $pi = 3.14;
public static function square($num) {
return $num * $num;
}
}
echo Math::$pi; // 3.14
echo Math::square(4); // 16
?>