PHP 기초 정리

워드프레스는 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 != 3true
<>값이 다르면 참 (동일한 역할)5 <> 3true
!==값 또는 타입이 다르면 참5 !== "5"true
>왼쪽 값이 크면 참10 > 5true
<왼쪽 값이 작으면 참3 < 5true
>=왼쪽 값이 크거나 같으면 참10 >= 10true
<=왼쪽 값이 작거나 같으면 참5 <= 10true

논리 연산자 (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
?>

Leave a Comment