everyday com-eat
작성일
2022. 5. 24. 15:49
작성자
갱수터
728x90

PHP(Hypertext Preprocessor)

PHP는 C언어를 기반으로 만들어진 서버 측에서 실행되는 서버 사이드 스크립트 언어

 

특징

장점

1. 주요 운영체제와 대부분의 웹 서버에서 지원

2. 다른 프로그래밍 언어보다 직관적으로 코드를 작성할 수 있어서, 작성해야 하는 코드의 양이 적음

3. 텍스트 처리에 특화되어 있어 HTML 문서 처리에 적합

 

단점

1. 간단한 사이트를 제작하기 위해 만든 언어라서 복잡한 사이트를 만드는 데 효율적이지 못

2. 보안에 안전하지 않은 언저 구조를 가짐

 

 


 

동작원리

php는 웹 시스템인 클라이언트 / 서버 환경에서 동작하는 서버 사이드 스크립트 언어이다.

출저 TCP School(http://www.tcpschool.com/php/php_intro_works)

 

 

 


 

문법

1. PHP 권장 스타일      : <?php ... ?>
2. HTML 스크립트 스타일 : <script language = "php"> ... </script>
3. SGML 스타일          : <? ... ?>
4. ASP 스타일           : <% ... %>
SGML 스타일과 ASP 스타일은 php.ini 설정 파일의 특정 태그를 활성화했을 경우에만 정확히 인식
키워드, 클래스, 함수, 사용자 함수 이름의 대소문자를 구분하지 않음

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>PHP Syntax</title>
    </head>
    <body>
        <?php
            echo "<table border='1'><thead><tr><th>표제목</th></tr></thead>";
            echo "<tbody><tr><td>html 태그가 먹네</td></tr></tbody>";
            #주석은 자바와 똑같고, 한 줄 주석은 #으로도 가능
        ?>
    </body>
</html>

 

echo() 함수

  • C언어의 printf() 함수나 C++의 cout 객체와 같이 HTML 스트림에 문자열 출력
  • 실제 함수가 아니므로 인수를 전달할 때 괄호를 사용해도 되고 생략해도 된다.
  • 가변 길이 인수와같이 함수 문맥으로 사용할 수 없음
  • 두 개 이상의 인수를 전달할 때는 반드시 괄호를 사용해서는 안됨

 

제어문 대체 문법

<div style="margin: 100px auto; width: 200px; ">
    <?php $var = 7; ?>
    <?php if ($var > 6): ?>
    <h1>변수의 값은 6보다 큽니다.</h1>   <!-- 이 부분은 HTML 구문임 -->
    <?php elseif ($var == 6): ?>
    <h3>변수의 값은 6입니다.</h3>        <!-- 이 부분은 HTML 구문임 -->
    <?php elseif ($var < 6): ?>
    <small>변수의 값은 6보다 작습니다.</small> <!-- 이 부분은 HTML 구문임 -->
    <?php endif; ?>
</div>

 

 


 

변수

$변수명 = 초깃값;
  • 변수명 앞에 달러($) 기호 사용
  • 데이터 타입 명시하지 않음
  • 대입되는 값에 따라 자동으로 타입 변환이 일어남
  • 문자열 내에 변수를 사용할 때는 중괄호로 변수의 이름을 감싸야함
  • php는 모든 전역 변수를 $globals 배열에 저장하기 때문에 함수 내부에서 전역 변수를 호출하려면
        global $변수명;으로 접근하거나 배열을 통해   {$GLOBALS['var']}으로 출력할 수 있다.

 

 

슈퍼글로벌(superglobal) 

- 미리 정의된 전역 변수

  1. $GLOBALS
  2. $_SERVER
  3. $_GET
  4. $_POST
  5. $_FILES
  6. $_COOKIE
  7. $_SESSION
  8. $_REQUEST
  9. $_ENV

 

 

정적 변수

- 키워드 : static

- 함수 호출이 종료되더라도 메모리상에서 사라지지 않음

- 지역 변수처럼 해당 함수 내부에서만 접근 가능

 

 


 

상수

- 변수와 마찬가지로 데이터를 저장할 수 있지만, 한 번 선언되면 스크립트가 실행되는 동안 그 데이터를 변경하거나 해제 할 수 없다.

 

define() 함수

- 상수 선언하는 함수

- 세번째 인수인 대소문자구분여부는 기본값이 false로, 대소문자를 구분함

- 스크립트 어디에서라도 참조할 수 있음(단, 해당 상수가 선언되기 이전 영역은 불가)

define(상수 이름, 상숫값, 대소문자구분여부)

 

마법 상수

__LINE__ 파일의 현재 줄 번호 반환
__FILE__ 파일의 전체 경로와 이름 반환
INCLUDE 내부에서 사용할 경우 INCLUDE된 파일명 반환
__DIR__ 파일의 디렉터리 반환
dirname(__FILE__)과 같은 결과 반환
__FUNCTION__ 함수의 이름을 반환
__CLASS__ 클래스의 이름을 반환.
클래스 이름은 대소문자를 구분함.
__TRAIT__ 트레이트(trait)의 이름을 반환.
트레이트의 이름은 트레이트를 선언한 네임스페이스를 포함함.
__METHOD__ 클래스의 메소드 이름을 반환
__NAMESPACE__ 현재 네임스페이스의 이름을 반환

 


 

기본타입

1. boolean : 참(true)과 거짓(false), 대소문자 구분x, 
정수0/실수0.0/빈 문자열과 문자열 "0"/빈 배열/NULL => false, 위의 값 모든 값(음수도) => true

 

2. 정수(integer) : 부호를 가지는 소수부가 없는 수

 

3. 실수(float) : 소수부나 지수부를 가지는 수

 

4. 문자열(string) : 일련의 연속된 문자들의 집합, 큰따옴표(")/작은따옴표(') 가능
아스키 인코딩 -> 영문1바이트,한글 2바이트 , UTF-8 인코딩 -> 영문 1바이트, 한글 3바이트

 

5. 배열(array) : 한 쌍의 키와 값으로 이루어진 맵(map)으로 구성되는 순서가 있는 집합
키값으로는 정수와 문자열만이 가능, 하나의 배열에 두 가지 키값을 같이 사용할 수 있음

$arr = array(
    1 => "첫 번째 값",  
    "1" => "두 번째 값", 
    10 => "세 번째 값",
    -10 => "네 번째 값"
);
var_dump($arr);
echo $arr[1];		//두 번째 값
echo $arr["1"];		//두 번째 값
echo $arr[10];		//세 번째 값
echo $arr[-10];		//네 번째 값
키 값 자동 타입 변환
- boolean : true=1, false=0
- 유효한 숫자로만 이루어진 문자열은 정수나 실수로 자동 타입 변환
- 실수는 소수 부분이 제거되어 정수로 자동 타입 변환
- NULL은 빈 문자열("")로 자동 타입 변환
- 배열과 객체는 배열의 키 값으로 사용할 수 없음

 

6. 객체(object) : 클래스의 인스턴스(instance)를 저장하기 위한 타입, properties와 methods를 포함할 수 있음

class Lecture {
    function Lecture(){
        $this->lec_01 = "PHP";
        $this->lec_02 = "MySQL";
    }
}

$var = new Lecture;            //객체 생성
echo $var->lec_01."<br>";      //객체의 속성 접근
echo $var->lec_02

 

7. 리소스(resource) : PHP 외부에 존재하는 외부 자원을 의미,
데이터베이스 함수 등에서 데이터베이스 연결 등을 반환할 때 사용

 

8. NULL : 오직 한 가지 값(NULL 상수)만을 가질 수 있는 타입, 아직 어떠한 값도 대입되지 않은 변수

 


 

타입 변환

 

자동 타입 변환(Type juggling) : PHP에서 변수의 타입은 해당 변수에 대입하는 값에 따라 자동으로 결정되기 때문에 변수를 선언할 때 타입을 명시할 필요가 없다.

 

강제 타입 변환(Type casting) : 타입 캐스트 연산자인 괄호를 사용하여 수행 가능

$var_01 = 10;
var_dump($var_01);           // int(10)  
$var_02 = (boolean) $var_01;
var_dump($var_02);           // bool(true)

 

가변 변수(variable variables) : 변수의 타입 뿐만 아니라 변수의 이름까지 동적 변경 가능

$PHP = "HTML";            
$HTML = "CSS";            
$CSS = "JavaScript";            
$JavaScript = "Ajax";            
$Ajax = "PHP";

echo $PHP."<br>";       // HTML        
echo $$PHP."<br>";      // $HTML -> CSS            
echo $$$PHP."<br>";     // $$HTML -> $CSS -> JavaScript            
echo $$$$PHP."<br>";    // $$$HTML -> $$CSS -> $JavaScript -> Ajax            
echo $$$$$PHP."<br>";   // $$$$HTML -> $$$CSS -> $$JavaScript -> $Ajax -> PHP            
echo $$$$$$PHP."<br>";  // $$$$$HTML -> $$$$CSS -> $$$JavaScript -> $$Ajax -> $PHP -> HTML

 

출처 : TCP School