Hypertext Preprocessor
주로 HTML 코드를 프로그래밍적으로 생성
웹 시스템인 클라이언트 / 서버 환경에서 동작하는 서버 사이드 스크립트 언어
장점
단점
| 언어 | 운영체제 | 웹 서버 | 제조사 | 속도 | 이식성 |
|---|---|---|---|---|---|
| PHP | 리눅스, 윈도우 | Apache 등 | 오픈 소스 | 빠름 | 보통 |
| JSP | 리눅스, 윈도우 | Tomcat,Jeus 등 | Oracle | 느림 | 좋음 |
| ASP.NET | 윈도우 | IIS | Microsoft | 보통 | 나쁨 |

PHP는 키워드, 클래스, 함수, 사용자 함수 이름의 대소문자를 구분하지 않음
예시 코드)

변수를 선언할 때는 변수의 이름 앞에 달러($) 기호를 사용
예시 코드)

지역변수 예시)

전역변수 예시)

정적변수 예시)

한 번 선언되면, 스크립트가 실행되는 동안 그 데이터를 변경하거나 해제(undefined)할 수 없음
: define(상수 이름, 상수 값, 대소문자 구분 여부)
예시)

__LINE__: 파일의 줄 번호 반환
__FILE__: 파일 전체 경로와 이름 반환
__DIR__: 파일의 디렉터리 반환
__FUNCTION__: 함수의 이름 반환
__CLASS__: 클래스의 이름 반환(이름은 대소문자 구분)
__TRAIT__: 트레이트(trait)의 이름 반환
__METHOD__: 클래스의 메소드 이름 반환
__NAMESPACE__: 현재 네임스페이스의 이름 반환
불리언 : false = 정수 : 0 = 실수 : 0.0 = 빈 문자열과 문자열 "0" = 빈 배열 = NULL
예시)

integer가 표현할 수 있는 범위(263 ~ (263 - 1))
$ int_02 은 범위를 넘지 않음
$ int_03 은 범위를 넘음
-> 변수에 정수의 최대 범위를 넘는 값이 대입되면, 그 변수는 자동으로 실수형(float)으로 인식
예시)

e 지수 표현과 E 지수 표현이 모두 가능
대략 ~1.8e307까지 표현
문자열 리터럴은 큰따옴표("")나 작은따옴표('')로 감싸서 표현
예시)

strlen() 함수는 인수로 전달받은 문자열의 길이를 반환하는 함수
같은 키 값으로 여러 번 맵(map)을 선언할 경우, 그 키에 해당하는 값을 계속 덮어써서 맨 마지막에 선언된 값만 저장
예시)

배열에서 키 값의 1과 “1”은 같은 값
같은 키 값을 두 번 선언해서 나중에 선언한 두 번째 값만 남음
클래스의 인스턴스(instance)를 저장하기 위한 타입
예시)

어떠한 값도 대입되지 않은 변수
예시)

초기화하지 않은 변수는 NULL로 자동 초기화
삭제되거나 존재하지 않는 변수를 참조할 경우에도 NULL을 반환
PHP에서 변수의 타입은 해당 변수에 대입하는 값에 따라 자동으로 결정
예시)

사용자가 직접 데이터의 타입을 변환해야 할 경우
-> 변환시키고자 하는 데이터나 변수의 앞에 괄호를 붙이고 변환할 타입을 넣음

변수의 타입뿐만 아니라 변수의 이름까지 동적으로 바꿀 수 있음

$$ PHP는 $ HTML 참조하기 때문에 CSS
$$$ PHP는 $$ HTML를 참조하고 $$ HTML는 $ CSS를 참조하므로 JavaScript
예시)

변수에 값을 대입할 때 사용하는 이항 연산자이며 피연산자들의 결합 방향은 오른쪽에서 왼쪽(=)
피연산자를 1씩 증가 혹은 감소 시킬 때 사용하는 연산자
| 증감 연산자 | 설명 |
|---|---|
| ++$var | 먼저 피연산자의 값을 1 증가 시킨 후에 해당 연산을 수행 |
| $var++ | 먼저 해당 연산을 수행하고 나서 피연산자의 값을 1 증가시킴 |
| --$var | 먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 수행 |
| $var-- | 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 감소시킴 |
피연산자 사이의 상대적인 크기를 판단하여, 참(true)과 거짓(false)을 반환
| === | 왼쪽의 피연산자와 오른쪽의 피연산자가 같고, 같은 타입이면 참을 반환 |
|---|---|
| <> | 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환 |
예시)
var_dump(0 < true); // true
→ 숫자 0을 불리언 값으로 변환하여 비교
논리식을 판단하여, 참(true)과 거짓(false)을 반환
| xor | 논리식이 서로 다르면 참을 반환함. (XOR 연산) |
|---|---|
| ! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함. (NOT 연산) |
-> and, or, xor 연산자는 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽
연산자는 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합 방향은 오른쪽에서 왼쪽
비트(bit) 단위로 논리 연산을 수행
| 비트 연산자 | 설명 |
|---|---|
| & | 대응되는 비트가 모두 1이면 1을 반환(비트 AND 연산) |
| ^ | 대응되는 비트가 서로 다르면 1을 반환 (비트 XOR 연산) |
| ~ | 비트를 1이면 0으로, 0이면 1로 반전시킴(비트 NOT 연산) |
| << | 지정한 수만큼 비트를 전부 왼쪽으로 이동시킴 (left shift 연산) |
| >> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴 (right shift 연산) |
유일하게 피연산자를 세 개나 가지는 조건 연산자

문자열 연산자(.)를 사용하여 문자열을 연결
예시)

피연산자로 오는 두 배열의 합집합을 반환
예시)

$ result_01 의 결과는 [PHP, MySQL, JavaScript]
$ result_02 의 결과는 [HTML, CSS, JavaScript]
조건식의 결과가 참(true)이면 주어진 명령문을 실행하며, 거짓(false)이면 실행X
if 문의 조건식 결과가 거짓(false)일 때 주어진 명령문을 실행
여러 번 사용되어 다양한 조건을 설정
주어진 조건 값에 따라 프로그램이 다른 명령을 수행하도록 하는 조건문
주어진 조건 값과 case 절의 값을 일치 연산자(===)를 사용하여 엄격하게 비교하지 않고 동등 연산자(==)를 사용하여 느슨하게 비교
특정 조건을 만족할 때까지 계속 주어진 명령문을 반복해서 실행
실행될 명령문이 한 줄뿐이라면 중괄호({})를 생략 가능
먼저 루프를 한 번 실행한 후에 표현식을 검사
do {
#조건식의 결과가 참일 동안 반복적으로 실행하고자 하는 명령문
#조건식의 결과를 변경하는 명령문
} while(조건식);
쉼표 연산자(,)를 사용하면 여러 개의 초기식이나 증감식을 동시에 사용
for(초기식; 조건식; 증감식){
#조건식의 결과가 참일 동안 반복적으로 실행하고자 하는 명령문
}
배열의 모든 요소를 손쉽게 순회할 수 있도록 함
정확히 배열의 길이(length)만큼 반복
foreach (배열 as 값을 저장할 변수) {
#실행하고자 하는 명령문;
}

루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어감
보통 반복문 내에서 특정 조건에 대한 처리를 제외하고자 할 때 사용
switch 문에도 continue를 사용할 수 있어, switch 문을 반복문처럼 사용 가능
해당 반복문을 완전히 종료시키고, 반복문 다음에 위치한 명령문으로 이동시킴
프로그램의 흐름을 지정된 레이블(label)로 무조건 변경하는 명령문
가장 손쉽게 사용할 수 있지만, 반면에 프로그램의 흐름을 매우 복잡하게 만듦
조건문에서는 if 문과 switch 문, 반복문에서는 while 문, for 문과 foreach 문에 사용 가능
사용방법

맵(map)으로 이루어진, 순서가 있는 집합
한 쌍의 키(key)와 값(value)
array()라는 함수를 이용해 배열을 생성
$배열이름 = array();
인덱스(index)를 사용
$배열이름[인덱스]
인덱스에 대응하는 배열 요소가 없는 부분

- isset() 함수는 인수로 전달받은 변수가 초기화되어 있는지를 확인
- 존재하는 인덱스는 10뿐이며, 나머지 인덱스에는 배열 요소가 존재
- 홀(hole)을 참조하게 되면. 초기화되지 않은 변수를 참조할 때처럼 NULL을 반환
for문 사용해서 배열 요소 접근 가능
홀(hole)을 가지는 배열에서는 for문 대신 foreach문 사용
count()함수는 홀이 가지는 배열에서 사용 불가능
2차원 이상의 배열
배열 요소로 또 다른 1차원 배열을 사용하는 배열

1차원 배열과 마찬가지로 for 문에 배열의 인덱스를 이용
배열 요소로 2차원 배열을 사용하는 배열

배열의 인덱스를 정수뿐만이 아닌 다양한 타입으로 설정한 배열
$배열이름 = array();
배열 이름과 함께 키(key)를 사용
$배열이름["키"] = 값;
연관 배열을 생성하면서 동시에 배열 요소를 초기화 가능
$배열이름 = array("키1" => 값1, "키2" => 값2, ...);
연관 배열의 인덱스는 숫자가 아니므로, for 문을 사용하여 배열 요소에 접근 불가능 → foreach 문이나 each() 함수를 사용
foreach문 예시)

each() 함수 예시)
