PHP Tutorial

HackBeom·2022년 10월 28일
0

php_study

목록 보기
1/3
post-thumbnail

php란

서버 사이드 스크립트 언어이다.

기본 PHP 구문

<?php
	//PHP code 
    /*PHP 파일의 기본 확장자는 .php이고  
    php파일에는 일반적으로 HTML 태그와 일부 PHP 스크립팅 코드가 포함되어 있다. 
    또한 php문은 c와 같이 세미콜론( ; )로 끝난다.*/
?>
<?php
	echo "Hello World!";
    
    // php 페이지에 hello world 출력
?>

대소문자 구분

<?php
//PHP에서 키워드(ex: if, else, while, echo등), 클래스, 함수 및 사용자 정의 함수는 대소문자를 구분하지 않는다.

ECHO "Hello World!<br>";

echo "Hello World!<br>";

EcHo "Hello World!<br>";

//위 와 같이 코딩하더라도 출력결과는 아래와 동일하다. 

?>

<?php
	$var = "HackBeom";
    echo "My name is" .$var . "<br>";
    echo "My name is" .$Var . "<br>";
    echo "My name is" .$vAr . "<br>";
    
      /*
       위 와 같이 코딩을 하게되면 첫 번째 echo에 있는 변수값만 출력이 된다. 
	   why? => $var, $Var, $vAr 변수 모두 다른 변수로 취급되기 때문이다. 
     */
?>

<?php
  // 한줄 주석 시 슬래쉬 2개 사용 또는 #도 사용가능함

  /* 회사일은 매우 
  힘들군요 집에가고싶습니다.
  위와 같이 여러줄 주석은 해당 형식으로 사용*/
?>

변수

<?php
	$a = 1000;
    $B = 7777;
  echo "$a<br>$B";
  
//변수 할당 및 출력 결과 변수는 대소문자 구분함으로 유의
?>

PHP 변수 범위

  • php에서 변수는 스크립트 어느 곳에서나 선언이 가능하다.
  • 변수의 범위는 변수를 참조/사용할 수 있는 스크립트의 일부이다.
  • PHP에는 세 가지 다른 변수 범위가 있습니다.

전역변수 지역변수

<?php

  $x = 10000; // 전역 변수

  function myTest() {
    // $x 변수는 전역변수임으로 함수 내에서 사용 시 에러가 발생한다.
    echo "<p>Variable x inside function is: $a</p>";
  }
  myTest();

  echo "<p>Variable x outside function is: $a</p>";




  function myTest2() {
    $b = 500; // 지역 변수
    echo "<p>Variable x inside function is: $b</p>";
  }
  myTest2();

  // $b는 지역 변수이다. 즉 myTEST2 함수 안에서만 사용 가능하기 때문에 그 외의 곳에서 사용 시 에러가 발생한다.
  echo "<p>Variable x outside function is: $b</p>";

?>

PHP 글로벌 키워드

global 키워드는 함수 내에서 전역 변수에 액세스하는 데 사용
적용 하려면 global 변수 앞에 키워드를 사용 (함수 내부

<?php
$var1 = 100; $var2 = 500; // 전역변수 설정

function TEST() 
{
  global $var1, $var2; //global 키워드 사용하여 TEST함수 안에서 전역변수 사용가능
  $var2 = $var1 + $var2;
}

TEST();
echo $var2;

?>

PHP 정적 키워드

<?php
function TEST()  // 일반적으로 함수가 완료/실행되면 모든 변수가 삭제됩니다.
                 // 하지만 지역 변수가 추가작업에 필요하다면 STATIC 변수를 사용합니다.
{
  static $a = 0; // 선언을 하게 되면 해당 변수는 함수가 마지막으로 호출된 때부터 포함된 정보를 계속 가지고 있다.
  echo $a;
  $a++;
}

TEST();
TEST();
TEST();
?>

PHP echo 및 print 문

echo는 print와 거의 비슷하다 차이점이라 하면 echo는 반환값이 없는 반면 print 반환 값은 1이므로 표현식에 사용이 가능하다.
echo는 여러 매개변수를 사용할 수 있지만 print 하나의 인수를 사용할 수 있다.
echo보다 pirnt가 약간 더 빠르다.

<?php
  // echo 문 사용방법
  echo "<h2>PHP echo</h2>";
  echo "Hello world!<br>";
  echo "I'm about to learn PHP!<br>";
  echo "This ", "string ", "was ", "made ", "with multiple parameters.";

  $txt1 = "Learn PHP";
  $txt2 = "W3Schools.com";
  $x = 5;
  $y = 4;

  echo "<h2>" . $txt1 . "</h2>";
  echo "Study PHP at " . $txt2 . "<br>";
  echo $x + $y;

  //print 문 사용방법
  print "<h2>PHP Print</h2>";
  print "Hello world!<br>";
  print "I'm about to learn PHP!";


  $txt1 = "Learn PHP";
  $txt2 = "W3Schools.com";
  $x = 5;
  $y = 4;

  print "<h2>" . $txt1 . "</h2>";
  print "Study PHP at " . $txt2 . "<br>";
  print $x + $y;

?>

PHP 객체

<?php
  class 클래스이름
  {
      function __construct(매개변수1, 매개변수2, ...) // 생성자
      {
          $this->프로퍼티이름;
          // 생성자가 호출될 때 실행될 코드;
      }

      function __desturct() // 소멸자
      {
         //  소멸자가 호출될 때 실행될 코드;
      }
  }
  $객체이름 = new 클래스이름(인수1, 인수2, ...); // new 연산자
  $객체이름->프로퍼티이름; // 접근
  $객체이름->메소드이름();
?>

class 기본적인 구조이다.
php class는 이해가 잘 되지않아 여러 자료를 찾으면서 코드 분석부터 해보겠다.

<?php
class Car {
  //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();

?>

<?php
  class Lunch
  {
    public $memu; //메뉴 라는 인스턴스 변수
    public $cost; // 가격이라는 인스턴스 변수
    public function __construct($memu, $cost) // memu와 cost 생성
    {
      $this->memu = $memu;
      $this->cost = $cost;
    }
    public function message() // 어디서나 접근이 가능한 메시지 함수 생성
    {
      return "당신의 점심메뉴 리스트입니다. <br>" .$this->memu . " ".$this->cost . "<br>";
    }
  }

  $myLunch = new Lunch("밥", "1,100원");
  echo $myLunch -> message();
  echo "<br>";

  $myLunch = new Lunch("고기", "15,000원");
  echo $myLunch -> message();
  echo "<br>";

  $myLunch = new Lunch("쫄면", "10,000원");
  echo $myLunch -> message();
  echo "<br>";

?>

PHP NULL 값

<?php
$x = "Hello world!";
$x = null; #변수 x에 null 값을 넣어 null로 변경
$y; #변수 y에 아무런 값이 없으면 null로 출력
var_dump($x);
var_dump($y);
?>

PHP 문자열 함수

strlen()

strlen() 함수는 문자열의 길이를 반환합니다.

<?php
  echo strlen("HackBeom");  // 문자열의 길이가 8임으로 8을 출력
  echo "<br>";
  echo strlen("Hack Beom"); //공백까지 포함하여 길이가 9임으로 9를 출력
?>

str_word_count()

str_word_count()함수는 문자열의 단어 수를 계산합니다.

<?php
  echo str_word_count("KIM hack beom"); // 단어가 3개 임으로 3 출력
  echo str_word_count("Hack Beom"); // 단어가 2개 임으로 2출력
  echo str_word_count("WEB"); // 단어가 1개 임으로 1 출력
  echo str_word_count("kim hack 1234")// 숫자는 단어로 보지 않기 때문에 2를 출
?>

strrev()

PHP strrev() 함수는 문자열을 뒤집습니다.

<?php
  echo strrev("kimHackBeom"); // moeBkcaHmik 로 출력
  echo "<br>";
  echo strrev("LostArk"); // krAtsoL 로 출력
  echo "<br>";
  echo strrev("1234567"); // 숫자를 넣어도 뒤집혀서 출력
  echo "<br>";
  echo strrev(1234567); // 위와 같은 결과
?>

strpos()

PHP strpos()함수는 문자열 내에서 특정 텍스트를 검색
일치하는 항목이 발견되면 이 함수는 첫 번째 일치 항목의 문자 위치를 반환
일치하는 항목이 없으면 FALSE를 반환

<?php
  // 문자열의 첫 번째 문자 위치는 0 이다.
  echo strpos("Hello world!", "world"); // 6출력
  echo "<br>";
  echo strpos("operation cwal show me the money", "cwal"); // 문자열은 0부터 시작함으로 10출력
?>

str_replace()

PHP str_replace() 함수는 문자열의 일부 문자를 다른 문자로 바꿉니다.
시큐어 코딩 시 특수문자 필터링 하는데 사용되기도 한다.

<?php
  echo(" 1'or'1=1' "); // sql 인젝션에 들어가는 흔한 sql 인젝션 문
  echo "<br>";
  echo str_replace("or", "mu", " 1'or'1=1' "); // or을 아무 의미없는 문자로 치환 sql 방지
?>

PHP Numbers

PHP는 자동 데이터 유형 변환을 제공합니다.
따라서 변수에 정수 값을 할당 -> 해당 변수의 유형은 자동으로 정수가 됩니다.
그런 다음 동일한변수에 문자열을 할당하면 -> 유형이 문자열로 변경된다.
위와 같은 자동 변환은 때때로 코드를 손상시킬 수 있다.

Int, Float

<?php
echo "===================<br>"; //정수
$x = 6987; // 정수
var_dump(is_int($x)); // 해당 변수 데이터 유형이 int (정수)형 인가
echo "<br>";
var_dump(is_float($x));
echo "<br>";

$var = PHP_INT_MAX; // 지원되는 가장 큰 정수
print_r($var);
echo "<br>";

$var2 = PHP_INT_MIN; // 지원되는 가장 작은 정수
print_r($var2);
echo "<br>";

$var3 = PHP_INT_SIZE; // 바이트 단위의 정수 크기
print_r($var3);
echo "<br>";

echo "===================<br>"; // 실수

$y = 59.855; // 소수 때문에 실수로 들어감
var_dump(is_int($y));
echo "<br>";
var_dump(is_float($y));
echo "<br>";

$par1 = PHP_FLOAT_MAX; // 표현 가능한 가장 큰 부동 소수점 숫자
print_r($par1);
echo "<br>";

$par2 = PHP_FLOAT_MIN; // 표현 가능한 가장 작은 양의 부동 소수점 숫자
print_r($par2);
echo "<br>";

$par3 = PHP_FLOAT_MAX; // 표현 가능한 가장 작은 음수 부동 소수점 숫자
print_r($par3);
echo "<br>";

$par4 = PHP_FLOAT_DIG; // 정밀도 손실 없이 부동 소수점으로 반올림할 수 있는 소수점 이하 자릿수
print_r($par4);
echo "<br>";

$par5 = PHP_FLOAT_EPSILON; // 표현 가능한 가장 작은 양수
print_r($par5);
echo "<br>";
echo "===================<br>";

?>

Infinity

PHP_FLOAT_MAX보다 큰 숫자 값은 무한으로 간주됩니다.
PHP에는 숫자 값이 유한인지 무한인지 확인하는 함수가 존재합니다.

  • is_finite()
  • is_infinite()
<?php
  	$var = 1.9e411;
	var_dump($var);
?>

NaN

NaN은 숫자가 아님을 나타냅니다.
NaN은 불가능한 수학 연산에 사용됩니다.

<?php
  $var = acos(8); // acos() 다른 숫자의 역 코사인을 반환
  var_dump($var);
?>

Numerical Strings

is_numeric() 함수는 변수가 숫자인지 여부를 찾는 데 사용할 수 있습니다.
해당 함수는 변수가 숫자 또는 숫자 문자열이면 true를 반환 그렇지 않다면 False를 반환합니다.

<?php
$var = 112233445566; // 숫자 임으로 true를 반환
var_dump(is_numeric($var));
echo"<br>";

$var2 = "112233445566"; // 숫자 문자열임으로 true를 반환
var_dump(is_numeric($var2));
echo"<br>";

$var3 = "59.85" + 100; // 숫자{실수(정수)} 이니까 true를 반환
var_dump(is_numeric($var3));
echo"<br>";

$var4 = "Hello"; // 숫자 또는 숫자 문자열이 아님으로 flase를 반환
var_dump(is_numeric($var4));
echo"<br>";
?>

PHP Casting Strings and Floats to Integers

데이터 유형 변환

<?php
// 실수 -> 정수
$var = 23465.768;
$int_cast = (int)$var;
var_dump($int_cast);
echo "<br>";

 // 문자열 -> 정수형
$var2 = "23465.768";
$int_cast = (int)$var2;
var_dump($int_cast);
echo "<br>";

// 문자열 -> 실수형
$var3 = "60000";
$float_cast = (float)$var3;
var_dump($float_cast);
echo "<br>";

?>

PHP Math

PHP에는 숫자에 대한 수학 작업을 수행할 수 있는 수학 함수 세트가 있다.
상당히 짧고 쉽기 때문에 코드에 달린 주석으로 정리하겠다.

<?php
      ini_set('display_errors', 1);
      ini_set('display_startup_errors', 1);
      error_reporting(E_ALL);

      $pi = pi();
      echo "<h2> PHP pi() 함수 </h2>";
      echo "<h3>파이의 값은 ".$pi." 입니다. </h3>";

      echo "<h2> max() 및 min() 함수를 사용하여 인수 목록에서 가장 낮거나 높은 값을 찾을 수 있습니다.</h2>";

      $min = (min(0, 10, 100, 1000, -10, -100, -1000));
      echo "<h3>0, 10, 100, 1000, -10, -100, -1000 값 중에서\n 최솟값은 ".$min." 입니다.</h3>";

      $max = (max(0, 10, 100, 1000, -10, -100, -1000));
      echo "<h3>0, 10, 100, 1000, -10, -100, -1000 값 중에서\n 최댓값은 ".$max." 입니다.</h3>";

      echo "<h2> abs() 함수는 절대값을 구하는 함수입니다.</h2>";
      $var = abs(-513525235);
      echo "<h3> -513525235 값에서 절대값은 ".$var." 입니다.</h3>";

      echo "<h2> sqrt() 함수는 제곱근을 반환하는 함수입니다.</h2>";
      $var2 = 128;
      $var3 = sqrt($var2);
      echo "<h3> $var2 의 제곱근은  ".$var3." 입니다.</h3>";

      echo "<h2> round()함수는 부동 소수점 숫자를 가장 가까운 정수로 반올림합니다. </h2>";
      $var4 = 0.5;
      $var5 = round($var4);
      echo "<h3> $var4 를 반올림 하면  ".$var5." 입니다.</h3>";

      echo "<h2> rand는 난수를 생성합니다.".rand()."</h3>";
      echo "<h2> 10~20 사이의 난수를 생성합니다.".rand(10, 20)."</h3>";
    ?>

PHP Constants

상수는 일단 정의되면 변경하거나 해제할 수 없다는 점을 제외하고는 변수와 같다.
참조: 변수와 달리 상수는 전체 스크립트에서 자동으로 전역입니다.

Create a PHP Constant

상수를 생성하려면 define()함수를 사용
syntax: define(name, value, case-insensitive)
name: 상수의 이름을 지정
value: 상수의 값을 지정
대소문자 구분: 기본값은 Flase이다.

<?php
  define("HackBeom", "직장인 HackBome"); //대소문자를 구분하는 상수
  echo HackBeom."<br>";

//대소문자를 구분하지 않는 상수 인데 php8.1 부터는 지원을 안하기 때문에 사용이 불가능하다.
  define("GREETING", "Welcome to W3Schools.com!", true); 
  echo greeting;
?>

PHP Constant Arrays

상수 배열

<?php
define("cars", ["Alfa Romeo", "BMW", "Toyota"]);
echo cars[0]."<br>";

define("classs", ["초급 기술자", "중급 기술자", "고급 기술자", "특급 기술자"]);
echo classs[3];

define("ppap", ["사과", "배", "바나나", "버섯"]);
echo "<br>".ppap[1]."<br>\n".ppap[2]."<br>\n".ppap[0];
?>

Constants are Global

상수는 자동으로 전역적이며 전체 스크립트에서 사용이 가능합니다.

<?php
define("GREETING", "Welcome to W3Schools.com!"); // 상수 선언

function myTest() {
  echo GREETING; // myTest 함수 내에서도 사용이 가능함
}

myTest();
?>

1개의 댓글

comment-user-thumbnail
2022년 10월 28일

PHP 연산자 부터는 다음 글에 작성할 예정입니다.

답글 달기