> 백엔드 개발 > PHP 튜토리얼 > 2,000줄의 code_php 기술에 대한 PHP 연구 노트 요약

2,000줄의 code_php 기술에 대한 PHP 연구 노트 요약

WBOY
풀어 주다: 2016-05-16 20:35:21
원래의
956명이 탐색했습니다.

이 글은 PHP 학습에서 흔히 발생하는 다양한 문제를 2,000줄이 넘는 코드로 요약하고 있으며 모두 매우 실용적인 기술입니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.

//구문 오류(syntax error) 구문 분석 단계에서는 소스 코드가 실행되지 않아 출력이 없습니다.

/* [이름 지정 규칙] */
클래스 상수의 상수 이름은 모두 대문자로 작성하는 것을 권장하며, 단어는 밑줄로 구분해야 합니다. // MIN_WIDTH
변수 이름은 밑줄로 구분하는 것이 좋습니다. // $var_name
함수 이름에는 Camel Case 명명 방법을 사용하는 것이 좋습니다. // varName
구분 기호에는 모두 대문자를 사용하는 것이 좋습니다. // <<<DING, <<<'DING'
파일 이름은 밑줄과 숫자를 포함하여 모두 소문자인 것이 좋습니다. // func_name.php
전용 속성 이름과 메서드 이름에 밑줄을 긋는 것이 좋습니다. // private $_name _func
인터페이스 이름에 I_ // 인터페이스 I_Name을 추가하는 것이 좋습니다.

/* 언어 구조 */
배열(), 에코(), 비어 있음(), eval(), 종료(), isset(), 목록(), 인쇄(), unset()
echo, print에서는 괄호를 생략할 수 있습니다./* 미리 정의된 상수 */
PATH_SEPARATOR //경로 구분 기호(Windows의 경우 세미콜론, Unix 계열의 경우 콜론)
DIRECTORY_SEPARATOR //디렉토리 구분 기호
PHP_EOL //현재 시스템의 개행 문자
PHP_VERSION //PHP 버전 번호
PHP_OS //PHP 서비스 운영체제
PHP_SAPI //실행을 위해 명령줄을 사용할지 브라우저를 사용할지 결정하는 데 사용됩니다. PHP_SAPI=='cli'가 명령줄에서 실행된다는 의미인 경우
PHP_INT_MAX INT 최대값, 32비트 플랫폼의 값은 2147483647입니다.
PHP_INT_SIZE INT 단어 길이, 값은 32비트 플랫폼에서 4(4바이트)입니다.
M_PI //파이 값
M_E //자연수

//PHP 실행 환경 감지 기능
php_sapi_name() //PHP 및 웹 서버 인터페이스 유형의 소문자 문자열을 반환합니다.
이 함수의 반환 값은 상수 PHP_SAPI와 일치합니다!
인터페이스 유형: SAPI(서버 API, SAPI)
가능한 값: aolserver, apache, apache2filter, apache2handler, caudium, cgi, cgi-fcgi, cli, 연속성, embed, isapi, litespeed milter, nsapi, phttpd, pi3web, roxen, thttpd, tux, webjames


/* 대문자 문제 */
- 클래스명, 메소드명, 속성명, 함수명 : 대소문자 구분
- 변수명, 상수명, 요소 첨자: 대소문자 구분

/* 변수 식별자 */
변수 변수 $i = 3; $k = 'i'; //출력 3
변수함수 function func() {echo 'hello!';} $i = 'func' $i();
변수 아래첨자 $i = '1234'; $k = 3; echo $i[$k];
변수 클래스 이름 class CLS{public $k = 'hello';} $i = 'CLS' $j = new $i echo $j->k;
변수 속성 클래스 CLS{public $k = 'hello';} $i = 'k' $j = new CLS echo $j->$i;
변수 메소드 클래스 CLS{public function k(){echo 'hello';}} $i='k' $j->$i();

/* 변수 변수 */
* 특정 특정 정보를 얻기 위한 비즈니스 로직 판단에 사용됩니다.
  $var_name = "클래스_이름";
  $$var_name = "PHP0913"; // $class_name = "PHP0913";$class_name이 메모리에 저장되었습니다.
  var_dump($class_name); // var_dump($$var_name);

/* 변수 함수 */
get_define_vars //정의된 모든 변수(환경 변수, 서버 변수, 사용자 정의 변수 포함)로 구성된 배열을 반환합니다.


/* 설정 해제() */
* unset()은 현재 변수 이름과 참조만 삭제하고 해당 값은 삭제되지 않습니다.
* 참조 전송 시 변수 및 해당 참조가 삭제되면 다른 변수 및 참조가 존재하며 해당 값은 그대로 유지됩니다.

   echo "<br />";
  $v3 = '값';
  $v4 = &$v3;
  설정 해제($v4);
  var_dump($v3, $v4);

/* 변수의 최대 유효기간 */
* 현재 스크립트의 실행주기. 스크립트 실행이 끝나면 변수는 사라집니다.


/* 미리 정의된 변수/수퍼 전역 변수 */
$GLOBALS
$_쿠키
$_ENV
$_FILES
$_GET
$_POST
$_REQUEST
$_SERVER
$_SESSION


/* 상수 정의 */
Define(상수 이름, 상수 값, [대소문자 구분 매개변수]) //true는 대소문자를 구분하지 않음을 의미하고 false는 대소문자를 구분함을 의미함
const 상수 이름 = 상수 값 // 신규, 권장
상수 이름에는 특수 문자를 사용할 수 있습니다.
Constant($name) // 상수 이름을 가져옵니다.
          //예: 에코 상수('-_-');


/* 상수 관련 함수 */
한정된
get_define_constants


/* 미리 정의된 상수 */
__FILE__ 파일의 절대 경로
__LINE__ 파일의 현재 줄 번호
__DIR__ 파일이 위치한 디렉터리
__FUNCTION__ 함수 이름
__CLASS__ 클래스 이름
__METHOD__ 클래스의 메서드 이름
__NAMESPACE__ 현재 네임스페이스의 이름


/* 정수형 */
정수는 총 4*8=32비트로 4바이트를 차지합니다. 최대값은 2147483647이고 최소값은 -2147483648입니다. 최소값의 절대값은 최대값보다 1 더 큽니다.
가장 높은 값은 양수와 음수를 나타내고, 1은 음수를 나타내고, 0은 양수를 나타냅니다.


/* 베이스 변환 함수 */
십진수와 기타 진수만 변환이 가능하며, 종류는 6가지 뿐입니다.
변환 시 매개변수는 문자열이어야 합니다. 즉, 8진수 "0" 또는 16진수 "0x"를 포함할 수 없습니다.
  12월
   큰 상자
   10월
  마녀
hexdec()는 16진수를 10진수로 변환합니다. hex2dec()도 쓸 수 있습니다.
dechex()는 10진수를 16진수로 변환합니다. dec2hex()도 쓸 수 있습니다.
bindec()은 이진수를 십진수로 변환합니다. bin2dec()도 쓸 수 있습니다.
decbin()은 10진수를 2진수로 변환합니다. dex2bin()도 쓸 수 있습니다.
octdec()는 8진수를 10진수로 변환합니다. oct2dec()도 작성할 수 있습니다.
decoct()는 10진수를 8진수로 변환합니다. dec2oct()도 쓸 수 있습니다.


/* 부동 소수점 수 */
부동 소수점 숫자는 비교할 수 없습니다! ! !
저장된 거의 모든 소수는 정확하지 않고 대략적인 것입니다!
최대값: /- 1.8E308
PHP가 저장할 수 있는 최대 소수점 자리: 14자리

/* 작은따옴표로 묶인 문자열 */
작은따옴표로 묶인 문자열에서는 백슬래시와 작은따옴표만 이스케이프할 수 있습니다.

/* 큰따옴표로 묶인 문자열 */
문자열을 한 번만 구문 분석하세요! ! !
eval은 문자열을 PHP 코드로 실행합니다.
중괄호는 변수를 래핑하여 변수 이름 경계를 결정합니다.예: "aaa{$bbb}ccc"
ASCII 코드는 큰따옴표로 묶인 문자로 변환될 수 있습니다.
"x61" -> a // 문자열에는 0이 필요하지 않습니다. 정수 유형에서는 0x만 앞에 옵니다.
"x49x54x43x41x53x54" ->
ASCII를 문자 함수로 변환 chr()
문자를 ASCII 함수 ord()로 변환
#큰따옴표 이스케이프 목록
n 새로운 줄
r 입력
t 가로 탭 문자
\ 백슬래시
$ 달러 표시
v 수직 탭
전자 탈출
f 페이지 변경
"큰따옴표"
[0-7]{1,3}은 이 정규식 시퀀스와 일치하며 8진수 표기법으로 표현된 문자입니다.
x[0-9A-Fa-f]{1,2}는 이 정규식 시퀀스와 일치하며 16진수 형식으로 표현된 문자입니다.



/* 구분자 */
Herodoc - 큰따옴표와 동일한 기능을 하며 구문 분석할 수 있습니다.
$str = <<<AAA
문자열 내용
AAA;

nowdoc - 작은따옴표와 동일한 기능을 하며 구문 분석할 수 없습니다.
처음에는 작은따옴표만 사용하세요.
$str =  $valn";
}



/* [배열 함수] */
//통계 계산
count 배열의 셀 수 또는 객체의 속성 수를 계산합니다.
array_count_values는 배열에 있는 모든 값의 발생 횟수를 계산합니다.
array_product는 배열의 모든 값의 곱을 계산합니다.
array_sum은 배열의 모든 값의 합계를 계산합니다.
range는 지정된 범위의 셀을 포함하는 배열을 만듭니다.

//배열의 내용을 가져옵니다.
array_chunk는 배열을 여러 개로 나눕니다.
  배열 array_chunk(배열 $input, int $size[, bool $preserve_keys])
array_filter는 콜백 함수를 사용하여 배열의 셀을 필터링합니다.
array_slice는 배열에서 세그먼트를 가져옵니다.
  배열 array_slice($arr, $offset [,$len [,$preserve_keys]])
array_keys는 배열의 모든 키 이름을 반환합니다.
  배열 array_keys(배열 $input[, 혼합 $search_value[, bool $strict]] )
  선택적 매개변수 search_value가 지정되면 값의 키 이름만 반환됩니다. 그렇지 않으면 입력 배열의 모든 키가 반환됩니다.
array_values는 숫자로 색인된 배열의 모든 값을 반환합니다.

array_merge는 하나 이상의 배열을 병합합니다.
  한 배열의 값은 이전 배열에 추가됩니다.
  입력 배열의 문자열 키 이름이 동일한 경우 키 이름 뒤의 값이 이전 값을 덮어씁니다.
  배열에 숫자 키 이름이 포함된 경우 후속 값은 원래 값을 덮어쓰지 않고 추가됩니다.
  배열만 제공되고 배열이 숫자로 색인화되면 키 이름이 연속적으로 다시 색인화됩니다. 
array_merge_recursive는 하나 이상의 배열을 재귀적으로 병합합니다.

//찾다
in_array는 배열에 값이 존재하는지 확인합니다.
  bool in_array(혼합 $needle, 배열 $haystack[, bool $strict])
array_key_exists는 주어진 키 이름이나 인덱스가 배열에 존재하는지 확인합니다.
  isset()은 배열의 NULL 값에 대해 TRUE를 반환하지 않지만 array_key_exists()는
array_search는 배열에서 주어진 값을 검색하고 성공하면 해당 키를 반환합니다.

array_combine은 한 배열의 값을 키로 사용하고 다른 배열의 값을 값으로 사용하여 배열을 생성합니다.
  두 배열의 요소 수가 다르거나 배열이 비어 있으면 FALSE를 반환합니다.
array_rand는 배열에서 하나 이상의 단위를 무작위로 가져와 키 이름 또는 키 이름으로 구성된 배열을 반환합니다. 첨자는 자연스럽게 정렬됩니다.
array_fill은 주어진 값으로 배열을 채웁니다.
  array_fill($start, $num, $value)
array_flip은 배열의 키와 값을 바꿉니다.
array_pad는 배열을 값으로 지정된 길이로 채웁니다.
array_reverse는 셀이 역순으로 배열된 배열을 반환합니다.
array_unique는 배열에서 중복 값을 제거합니다
array_splice는 배열의 일부를 제거하고 이를 다른 값으로 대체합니다.

implode는 특정 문자열을 사용하여 배열 요소 값을 문자열로 연결합니다.
폭발($delimiter, $str [,$limit]) //한 문자열을 사용하여 다른 문자열을 분할합니다.
  $delimiter는 빈 문자열 ""일 수 없습니다.

array_map은 주어진 배열의 단위에 콜백 함수를 적용하며, 요소 값만 처리할 수 있으며 여러 배열을 처리할 수 있습니다.
  콜백 매개변수가 null로 설정되면 여러 배열이 다차원 배열로 병합됩니다.
array_walk는 배열의 각 멤버에 사용자 함수를 적용합니다. 하나의 배열만 처리할 수 있습니다. 키와 값 모두 처리할 수 있습니다. foreach와 동일한 기능을 갖습니다.
  bool array_walk ( 배열 &$array , 콜백 $funcname [, 혼합 $userdata ] )

//스택: 후입선출
스택을 푸시하고 팝하면 인덱스 첨자가 재할당됩니다.
array_push는 하나 이상의 요소를 배열 끝에 푸시합니다(푸시).
array_pop은 배열의 마지막 단위를 팝합니다(스택에서 팝합니다). 이 함수를 사용한 후 배열 포인터가 재설정됩니다(reset()).

//큐: 선입 선출
큐 함수는 인덱스 첨자를 재할당합니다.
array_unshift는 배열의 시작 부분에 하나 이상의 셀을 삽입합니다.
array_shift는 배열의 시작 부분에 있는 요소를 배열 밖으로 이동합니다. 이 함수를 사용하면 배열 포인터가 재설정(reset())됩니다.//정렬 함수
sort 배열을 정렬하다
rsort는 배열을 역순으로 정렬합니다.
asort는 배열을 정렬하고 인덱스 관계를 유지합니다.
asort는 배열을 역순으로 정렬하고 인덱스 관계를 유지합니다.
ksort는 키를 기준으로 배열을 정렬합니다.
krsort는 키 이름을 기준으로 배열을 역순으로 정렬합니다.
usort는 사용자 정의 비교 함수를 사용하여 배열의 값을 정렬합니다.
uksort는 사용자 정의 비교 함수를 사용하여 배열의 키를 정렬합니다.
uasort는 사용자 정의 비교 함수를 사용하여 배열의 값을 정렬하고 인덱스 연관을 유지합니다.
natsort는 "자연 정렬" 알고리즘을 사용하여 배열을 정렬합니다.
natcasesort는 "자연 정렬" 알고리즘을 사용하여 대소문자를 구분하지 않고 배열을 정렬합니다.
array_multisort 여러 배열 또는 다차원 배열 정렬
shuffle 배열을 섞다
  매개변수를 참조로 전달하고 bool 값을 반환합니다.
  인덱스 키 이름을 다시 할당하고 원래 키 이름을 삭제합니다.

//차이 세트
array_udiff_assoc은 인덱스 검사를 통해 배열의 차이 집합을 계산하고 콜백 함수를 사용하여 데이터를 비교합니다.
array_udiff_uassoc은 인덱스 검사를 통해 배열의 차이 집합을 계산하고 콜백 함수를 사용하여 데이터와 인덱스를 비교합니다.
array_udiff는 콜백 함수를 사용하여 데이터를 비교하여 배열의 차이를 계산합니다.
array_diff_assoc은 인덱스 검사를 통해 배열의 차이를 계산합니다.
array_diff_key는 키 이름 비교를 사용하여 배열의 차이를 계산합니다.
array_diff_uassoc은 인덱스 검사를 수행하는 사용자 제공 콜백 함수를 사용하여 배열의 차이를 계산합니다.
array_diff_ukey는 콜백 함수를 사용하여 키 이름을 비교하고 배열의 차이 세트를 계산합니다.
array_diff는 배열의 차이를 계산합니다.
//교차로
array_intersect_assoc은 인덱스 검사를 통해 배열의 교차점을 계산합니다.
array_intersect_key는 키 이름 비교를 사용하여 배열의 교차점을 계산합니다.
array_intersect_uassoc은 인덱스 검사를 통해 배열의 교차점을 계산하고 콜백 함수를 사용하여 인덱스를 비교합니다.
array_intersect_ukey는 콜백 함수를 사용하여 키 이름을 비교하여 배열의 교차점을 계산합니다.
array_intersect는 배열의 교차점을 계산합니다.
array_key_exists는 콜백 함수를 사용하여 키 이름을 비교하여 배열의 교차점을 계산합니다.
array_uintersect_assoc은 인덱스 검사를 통해 배열의 교차점을 계산하고 콜백 함수와 데이터를 비교합니다.
array_uintersect는 배열의 교차점을 계산하고 콜백 함수를 사용하여 데이터를 비교합니다.

extract($arr [,$type [,$prefix]])는 배열의 변수를 현재 기호 테이블로 가져옵니다(결합된 배열 $arr를 매개변수로 받아들이고 키 이름을 변수 이름으로 사용하고 값을 변수로 사용합니다) 값)
Compact($var [,...])는 변수 이름과 그 값을 포함하는 배열을 생성합니다(변수 이름은 키가 되고 변수의 내용은 키의 값이 됩니다)




/* [유사형] */
혼합은 매개변수가 여러(반드시 전부는 아님) 서로 다른 유형을 허용할 수 있음을 나타냅니다.
숫자는 매개변수가 정수 또는 부동 소수점일 수 있음을 나타냅니다.
콜백 콜백 함수
void void를 반환 유형으로 사용하면 함수의 반환 값이 쓸모가 없다는 의미입니다.
      매개변수 목록이 void라는 것은 함수가 어떤 매개변수도 허용하지 않는다는 것을 의미합니다.


/* [데이터베이스 작업] */
#접속인증
mysql_connect는 데이터베이스를 연결하고 인증합니다.
#SQL문 전송 및 실행 결과 수신
mysql_query는 SQL 문을 보냅니다.
    select, show, explain, explain 문이 성공적으로 실행되면 리소스 식별자만 반환되고, 다른 문이 성공적으로 실행되면 true가 반환됩니다. 실행이 실패하면 false를 반환합니다.
#처리결과
mysql_fetch_assoc은 결과 집합에서 연관 배열로 행을 가져옵니다.
    각 항목과 유사하게 한 번에 하나의 항목만 검색됩니다.
  결과 세트 레코드 포인터
mysql_fetch_row는 결과 집합에서 열거된 배열로 행을 가져옵니다.
mysql_fetch_array는 결과 집합에서 연관 배열, 숫자 배열 또는 둘 다로 행을 가져옵니다.
  배열 mysql_fetch_array (리소스 $result [, int $result_type ] )
  선택적 매개변수 result_type 선택적 값은 MYSQL_ASSOC, MYSQL_NUM 및 MYSQL_BOTH(기본값)입니다.
mysql_free_result는 결과 메모리를 해제합니다.
#링크닫기
mysql_close는 연결을 닫는다


/* [클래스 및 객체] */
# 회원:
  클래스 멤버: 클래스 상수, 정적 속성, 정적 메서드
  객체 멤버: 비정적 속성, 비정적 메서드
  # 클래스에는 다른 어떤 것도 포함될 수 없습니다! ! !

# 클래스 이름, 메소드 이름, 속성 이름은 대소문자를 구분하지 않습니다.
# $this는 이 객체를 나타내고, self는 이 클래스를 나타내며, parent는 부모 클래스를 나타냅니다.
# 클래스와 함수 모두 미리 컴파일 가능 (가장 바깥쪽 레이어로 사용되는 경우에만)
# 클래스 정의는 단일 PHP 블록 내에 있어야 하며 여러 PHP 태그로 분할될 수 없습니다.

//건설자
- 생성자가 있는 클래스는 새 객체가 생성될 때마다 이 메서드를 먼저 호출합니다.
void __construct([ 혼합 $args [, $... ]] )
- 생성자에 필요한 매개변수가 new로 인스턴스화되면 클래스에 매개변수 값을 추가합니다.
- 생성자를 수동으로 호출할 수도 있습니다.
- 5.3.3 버전 이전에는 클래스 이름과 동일한 이름의 메소드가 생성자로 지원되었습니다.
- 두 가지가 충돌하는 경우 __construct가 우선합니다.

// 파기방법
- 소멸자는 객체에 대한 모든 참조가 제거되거나 객체가 명시적으로 소멸될 때 실행됩니다.
무효 __destruct(void)
# 기능: 객체가 점유하고 있는 자원을 해제합니다.
# 호출 타이밍
  - 개체를 포함한 모든 리소스는 스크립트가 끝나면 해제됩니다.
  - 개체를 수동으로 삭제하는 경우
  - 객체를 담고 있는 변수에 새로운 값이 할당될 때(null을 포함한 모든 값)
  - 스크립트를 종료하기 위해 exit()를 사용할 때도 호출됩니다.

// 정적 멤버(정적 키워드)
  - 클래스 멤버나 메서드를 정적으로 선언하면 클래스를 인스턴스화하지 않고도 직접 액세스할 수 있습니다.
  - 정적 멤버(속성 또는 메서드)는 클래스에 속하므로 $this 또는 ->를 통해 액세스할 수 없습니다.- 정적 멤버는 모든 개체에서 공유되며 클래스에 속합니다.
  - 정적 멤버는 클래스로 호출되고, 비정적 멤버는 객체로 호출됩니다.
# 정적 속성
  - 개체는 -> 연산자를 통해 정적 속성에 액세스할 수 없습니다.
  - 정적 속성은 문자값이나 상수로만 초기화할 수 있으며, 표현식은 사용할 수 없습니다. 따라서 정적 속성을 정수나 배열로 초기화할 수 있지만 다른 변수나 함수 반환 값이나 객체를 가리킬 수는 없습니다.
# 정적 메소드
  - 정적 메서드에서는 개체 호출이 필요하지 않으므로 정적 메서드에서는 의사 변수 $this를 사용할 수 없습니다.
  - :: 메서드를 사용하여 비정적 메서드를 호출하면 E_STRICT 수준 오류가 발생합니다.

// 구문 분석 연산자에 액세스합니다(::)
  - 정적 멤버, 메서드 및 상수에 액세스하는 데 사용할 수 있으며 클래스의 멤버 및 메서드를 재정의하는 데에도 사용할 수 있습니다. 
  - 클래스 외부에서 이러한 정적 멤버, 메서드 및 상수에 액세스할 때는 클래스 이름을 사용해야 합니다. 
  - 두 개의 특수 키워드 self와 parent는 클래스 내부의 멤버나 메서드에 액세스하는 데 사용됩니다.

//액세스 분석
- 객체 멤버는 내부적으로는 $this를 통해 지정되고 외부에서는 객체 이름을 통해 액세스됩니다. 둘 다 속성에 액세스할 때 $를 추가할 필요가 없습니다.
  객체 이름->속성 이름 객체 이름->메서드 이름() $this->속성 이름 $this->메서드 이름()
- 클래스 멤버는 내부적으로 self 또는 parent를 통해 지정되고 외부적으로는 클래스 이름을 통해 모두 ::를 사용하여 액세스되며 속성에 액세스할 때 $가 필요합니다.
  클래스 이름::$속성 이름 클래스 이름::메서드 이름() self::$속성 이름 self::메서드 이름()
- 특별함: 클래스 멤버는 객체를 통해서도 접근할 수 있습니다. (권장하지 않음)
  개체 이름::$class 속성 이름 $this::$class 속성 이름 개체 이름::$class 메서드 이름() $this::class 메서드 이름()
# 객체 멤버에 접근하려면 ->를 사용하고, 클래스 멤버에 접근하려면 다음을 사용하세요.

- 정적이든 비정적이든 상관없이 메서드는 클래스나 개체를 통해 액세스할 수 있습니다.
- 정적 속성은 클래스를 통해 액세스하고 정적 메서드는 객체를 통해 액세스합니다.
- $this는 객체를 사용하여 비정적 메서드를 호출할 때만 사용할 수 있습니다!
- 정적 메소드는 $this를 사용할 수 없습니다.
- 클래스는 객체 메소드를 호출할 수 있지만 메소드 내부에는 $this가 있을 수 없습니다.
- 비정적 메서드는 정적 속성이나 정적 메서드를 호출할 수 있지만 그 반대는 불가능합니다.

// 클래스 상수
- 상수의 값은 항상 동일하게 유지됩니다.
- 상수를 정의하고 사용할 때 $ 기호를 사용할 필요가 없습니다.
- 상수 값은 고정된 값이어야 하며 변수, 클래스 속성 또는 기타 작업(예: 함수 호출)의 결과일 수 없습니다.
# 정의: const 상수 이름 = 상수 값;
- public과 같은 접근 수정 한정자를 추가할 필요가 없습니다.
- 클래스 상수는 클래스에 속하며 클래스 이름::클래스 상수 또는 self::class 상수를 사용하여 액세스됩니다.

// 자동으로 객체 로드
- 아직 정의되지 않은 클래스를 사용하려고 할 때 자동으로 __autoload 함수를 호출합니다.
- 사용된 클래스 이름 파일을 자동으로 로드합니다. (클래스 이름을 기준으로 해당 이름의 파일을 찾으므로 클래스 이름은 클래스 파일 이름과 일치해야 합니다.)
- 클래스를 로드해야 하는 모든 파일에는 __autoload 함수가 있어야 합니다.
- __autoload 함수를 별도의 파일에 작성한 후 클래스를 사용해야 하는 파일마다 함수 파일을 요구합니다.
- __autoload 매개변수는 클래스 이름입니다.
함수 __autoload($class_name) {
  require_once $_SERVER["DOCUMENT_ROOT"] "/class/$class_name.php";
}
  // $_SERVER["DOCUMENT_ROOT"] 현재 실행 중인 스크립트가 위치한 문서 루트 디렉터리
- 클래스명을 이용하면 해당 클래스가 위치한 파일명을 유추할 수 있어요!
- 프로젝트에 자동 로딩 기능이 여러 개 있는 경우, 로딩을 완료할 수 있는 공통 함수를 정의하고, 해당 기능 이전에 spl_autoload_register를 사용하여 해당 기능을 등록합니다.
# spl_autoload_register
- __autoload() 함수 등록
bool spl_autoload_register ([ 콜백 $autoload_function ] )
- 자동 로딩 기능은 여러 개 등록할 수 있으며, 먼저 등록한 기능이 먼저 실행됩니다.
- 자동 로드 기능이 등록되면 __autoload는 무효화됩니다.
- 함수를 등록할 때 매개변수는 함수 이름(따옴표에 주의)입니다. 메소드를 등록할 때 매개변수는 배열입니다.
# 클래스나 객체를 등록하는 방법이 자동 로딩 방법인 경우 매개변수는 배열이어야 합니다.
spl_autoload_register(array(__CLASS__, '__autoload'));
__CLASS__는 현재 클래스 이름을 나타냅니다. $this를 개체에 사용할 수 있는 경우 자세한 내용은 설명서를 참조하세요.

// 직렬화(직렬화)
# 데이터 전송은 모두 문자열 형식입니다.
# 리소스 유형을 제외하고 모두 직렬화 가능
# 직렬화가 데이터를 저장할 때 데이터 자체와 데이터 유형을 저장합니다.
기능: 1. 네트워크를 통해 데이터를 전송할 때 2. 디스크에 배열이나 개체를 배치할 때
# 직렬화
직렬화는 값의 저장 가능한 표현을 생성합니다.
문자열 직렬화(혼합 $value)
- 값을 나타내는 바이트 스트림을 포함하고 어디에나 저장할 수 있는 문자열을 반환합니다.
- 유형과 구조를 잃지 않고 PHP에서 값을 저장하거나 전달하는 것을 용이하게 합니다.
# 역직렬화
unserialize는 저장된 표현에서 PHP 값을 생성합니다.
혼합 역직렬화( 문자열 $str [, 문자열 $callback ] )
- 직렬화된 단일 변수에 대해 작업하여 이를 다시 PHP 값으로 변환합니다.


# 파일 읽기 및 쓰기 작업
- file_put_contents는 파일에 문자열을 씁니다.
int file_put_contents($file, $data [,$flags])
  $flags: FILE_USE_INCLUDE_PATH(덮어쓰기), FILE_APPEND(추가)
- file_get_contents는 전체 파일을 문자열로 읽어옵니다.
string file_get_contents($file [, bool $use_include_path [,int $offset [,int $maxlen]]])

#객체 직렬화
- 객체 내부의 데이터, 즉 비정적 속성만 직렬화할 수 있습니다.# 객체를 역직렬화하기 전에 클래스를 로드해야 하며 자동 로드 메커니즘도 트리거될 수 있습니다.

__sleep은 직렬화할 속성을 직렬화합니다.
    - 커밋되지 않은 데이터 또는 유사한 정리 작업을 커밋하여 객체를 부분적으로 직렬화합니다.
    - 직렬화되어야 하는 객체의 모든 변수 이름을 포함하는 배열을 반환합니다.
__wakeup 역직렬화 시 객체에 필요한 리소스를 미리 준비합니다.
    - 데이터베이스 연결을 다시 설정하거나 다른 초기화 작업을 수행합니다.
  공개 함수 __sleep() {
    return array('서버', '사용자 이름', '비밀번호', 'db');
  }
  공개 함수 __wakeup() {
    $this->connect();
  }

//객체 상속
클래스 하위 클래스 이름은 상위 클래스 {}를 확장합니다.
객체가 하위 클래스의 객체인 경우 상위 클래스의 객체이기도 합니다.
단일 상속: 클래스는 하나의 상위 클래스만 상속할 수 있으며 동시에 여러 클래스를 상속할 수 없습니다. 그러나 상위 클래스는 여러 하위 클래스에서 상속될 수 있습니다.

instanceof는 객체가 특정 유형의 객체인지 여부를 결정합니다.
  객체 이름 인스턴스 클래스 이름

// 접근 제어
public public (상속 체인, 이 클래스 및 외부에서 접근 가능)
protected protected(상속 체인만 이 클래스에 액세스할 수 있음)
private private (이 클래스만 접근 가능)
멤버 정의 위치와 접속 위치를 기준으로 판단합니다.
# 호환성 문제
- 속성을 선언할 때 var 키워드는 기본적으로 공개 권한을 선언합니다.
- 메서드를 선언할 때 액세스 한정자를 생략하고 기본적으로 공개 권한을 사용합니다.

// 재정의
$this는 이 개체를 나타내며, 이를 호출하는 사람은 누구나 해당 개체를 나타냅니다.
- 상속 시 하위 클래스 멤버 이름이 상위 클래스 멤버 이름과 충돌하는 경우 하위 클래스 멤버가 상위 클래스 멤버를 덮어씁니다.
- 속성과 메서드 모두 하위 클래스로 재정의될 수 있습니다.
- 상위 클래스의 메소드나 속성이 하위 클래스의 요구 사항을 더 이상 충족하지 못하는 경우 다시 작성해야 합니다.
- 불규칙한 네이밍으로 인해 다시 작성될 수도 있습니다.

개인 속성은 재정의할 수 없으며 각 개인 속성이 기록됩니다. 속성 이름을 기록하는 동안 클래스도 기록됩니다.

내장 함수가 재정의되면 상위 클래스 메서드를 호출할 수 있습니다. 예를 들어, 상위 클래스 생성자 parent::__construct()를 호출합니다.

# 다시 쓰기 제한
액세스 제한:
  하위 클래스 멤버에 대한 액세스 제어는 상위 클래스의 액세스 제어와 같거나 약해야 합니다.
메소드 매개변수 제한사항:
  매개변수 개수는 동일해야 하지만 매개변수 이름은 다를 수 있습니다.

# $this가 원리를 결정합니다.
$this는 메소드를 호출하는 객체이며 메소드의 실행 환경 객체를 나타냅니다.
  - 개체 호출
  -환경 전달. 현재 호출(정적 호출) 중에 $this 값을 확인할 수 없는 경우 정적 호출의 개체 환경이 호출된 메서드에 전달됩니다.
$this는 항상 이 개체를 나타내는 것은 아니지만 메서드의 실행 환경에 따라 결정됩니다.

# 최종
상위 클래스의 메서드가 final로 선언되면 하위 클래스는 해당 메서드를 재정의(재정의)할 수 없습니다.
클래스가 final로 선언되면 상속될 수 없습니다.
하지만 final 키워드가 있는 클래스는 여전히 인스턴스화될 수 있습니다!
#추상수업
키워드: 추상
추상 클래스는 직접 인스턴스화할 수 없습니다. 먼저 추상 클래스를 상속한 다음 하위 클래스를 인스턴스화해야 합니다.
추상 클래스에는 하나 이상의 추상 메서드가 포함되어야 합니다. 비추상 클래스에는 추상 메소드가 포함될 수 없습니다.
클래스 메소드가 추상으로 선언되면 구체적인 기능 구현을 포함할 수 없습니다. 추상 메서드에는 중괄호와 메서드 본문이 포함될 수 없습니다.
추상 클래스를 상속할 때 하위 클래스는 추상 클래스의 모든 추상 메서드를 구현해야 합니다.
  즉, 하위 클래스는 추상 상위 클래스의 모든 추상 메서드를 재정의해야 합니다.
또한 이러한 메서드의 가시성은 추상 클래스와 동일하거나 더 완화되어야 합니다.
  즉, 추상 클래스의 추상 메서드가 protected로 선언된 경우 하위 클래스에 구현된 메서드는 protected 또는 public으로 선언되어야 하며 private으로 정의될 수 없습니다.
- 추상 클래스의 하위 클래스에 있는 일반적인 메소드는 다른 클래스와 동일한 방식으로 실행됩니다.
- 기능:
  1. 상속은 공개 작업을 통합하는 확장 클래스입니다.
  2. 제한 구조(규범). 하위 클래스의 구조를 표준화합니다.

//인터페이스
키워드: 인터페이스
- 객체가 객체와 상호작용하기 위해 제공하는 방식이 인터페이스입니다.
- 인터페이스를 사용하여 클래스가 구현해야 하는 메서드를 지정할 수 있지만 이러한 메서드의 특정 내용을 정의할 필요는 없습니다.
- 인터페이스를 통해 인터페이스를 정의하는 것은 표준 클래스를 정의하는 것과 같지만, 그 안에 정의된 모든 메소드가 비어 있습니다. 
- 인터페이스에 정의된 모든 속성과 메소드는 public이어야 하며, public 키워드는 생략 가능합니다.
- 상수(const)는 인터페이스에서도 정의할 수 있습니다. 인터페이스 상수와 클래스 상수는 정확히 동일하게 사용됩니다.
  ::를 사용하여 접근할 수 있습니다. 인터페이스 이름::상수 이름, 구현 클래스::상수 이름.
  모두 고정된 값이며 서브클래스나 서브인터페이스에서 사용할 수 있지만 수정할 수는 없습니다.
- 인터페이스는 속성을 정의할 수 없습니다!
# 인터페이스 정의
인터페이스 인터페이스 이름 {
  인터페이스 콘텐츠(공개 메서드 선언 모음)
}
#인터페이스 구현
- 인터페이스를 구현하려면 Implements 연산자를 사용할 수 있습니다.
- 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 합니다. 그렇지 않으면 치명적인 오류가 보고됩니다.
- 여러 인터페이스를 구현하려는 경우 쉼표를 사용하여 여러 인터페이스의 이름을 구분할 수 있습니다.
- 여러 인터페이스를 구현할 때 인터페이스의 메소드는 동일한 이름을 가질 수 없습니다.
- 확장 연산자를 사용하여 인터페이스를 상속할 수도 있습니다.
클래스 클래스 이름은 인터페이스 이름을 구현합니다.
  인터페이스 메소드 구현
}
# 알아채다
  1. 클래스와 추상 클래스 사이에는 상속 관계가 있고, 클래스와 인터페이스 사이에는 구현 관계가 있습니다.
  2. 클래스와 추상 클래스는 단일 상속을 갖고, 클래스와 인터페이스는 다중 구현을 갖습니다.
  3. 인터페이스는 클래스가 아니며 클래스 구조를 제한합니다.
  4. 인터페이스 간에는 다중 상속이 있습니다.확장 키워드를 사용하십시오.
    인터페이스 I_C는 I_A, I_B {}를 확장합니다.

// 정적 지연 바인딩
self::, 이 클래스를 나타냅니다(현재 코드가 위치한 클래스).
  클래스가 컴파일될 때 결정되므로 항상 이 클래스를 나타냅니다.
  즉, 하위 클래스가 상위 클래스 메서드를 호출할 때 self는 호출하는 하위 클래스를 나타내지 않습니다.
static::은 이 클래스(이 메서드를 호출하는 클래스)를 나타냅니다.
  상속 범위 내에서 정적으로 호출된 클래스를 참조하는 데 사용됩니다.
  표현되는 클래스는 런타임에만 결정됩니다.
  static::은 더 이상 현재 메서드가 정의된 클래스로 확인되지 않지만 실제 런타임에 계산됩니다.

// 객체 순회(반복)
- 객체는 속성을 통해 데이터를 저장하므로 객체의 속성을 순회합니다.
- 각 언어 구조에 대해 속성 이름과 속성 값을 얻습니다.
  foreach($obj as $p_name => $p_value) {}
# 사용자 정의 순회(반복자)
Iterator - 자체 반복자를 내부적으로 반복할 수 있는 외부 반복자 또는 클래스에 대한 인터페이스입니다.
Iterator::current — 현재 요소를 반환합니다.
Iterator::key — 현재 요소의 키를 반환합니다.
Iterator::next — 다음 요소로 앞으로 이동합니다.
Iterator::rewind — 반복자의 첫 번째 요소로 돌아갑니다.
Iterator::valid — 현재 위치가 유효한지 확인합니다.

#객체의 복제
//객체 간 값 전송은 [참조] 전송입니다.
Clone: ​​새 객체 = 기존 객체 복제
  - 모든 참조 속성은 여전히 ​​원래 변수에 대한 참조입니다. 
__clone() 메서드는 객체가 복제될 때 자동으로 호출됩니다.
참고: 생성 방법은 인스턴스화(new)에 해당하고 복제 방법은 복제(clone)에 해당합니다.

// 싱글턴 모드
#삼개인원공공
싱글톤 패턴은 클래스에 대한 고유한 개체를 생성하는 데 사용됩니다. 가장 일반적으로 사용되는 곳은 데이터베이스 연결입니다. 싱글턴 패턴을 사용하여 객체를 생성한 후에는 해당 객체를 다른 많은 객체에서 사용할 수 있습니다.
# 클래스가 여러 번 인스턴스화되는 것을 방지합니다.
클래스 MySQLDB {
  private static $instance = null; // 이 속성에 클래스 인스턴스를 저장합니다.
  // 생성자는 객체의 직접 생성을 방지하기 위해 private으로 선언됩니다.
  개인 함수 __construct() {}
  공개 정적 함수 getInstance() {
    if(!self::$instance 인스턴스of static) {
      self::$instance = 새로운 정적;
    }
    self::$instance를 반환합니다.
  }
  private function __clone() {} // 사용자가 객체 인스턴스를 복사하는 것을 방지합니다.
}

// 매직 메소드
__construct 생성자
__destruct 소멸자 메서드
__clone 클론 객체
__sleep 직렬화된 객체
__wakeup은 객체를 역직렬화합니다.
__autoload는 클래스가 사용되었지만 찾을 수 없을 때 자동으로 로드됩니다.

__toString 객체는 문자열로 사용됩니다.
__invoke 객체를 함수로 호출하려고 할 때

# 과부하 과부하
클래스 속성 및 메서드를 동적으로 "생성"하는 것을 나타냅니다.
사용자는 자유롭게 객체에 추가 속성을 추가할 수 있습니다.
오버로드된 모든 메서드는 공개로 선언되어야 합니다.
오버로드된 메서드는 현재 환경에서 정의되지 않았거나 보이지 않는 클래스 속성이나 메서드가 호출될 때 호출됩니다.
오버로드된 매직 메서드의 매개변수는 참조로 전달할 수 없습니다.
# 속성 오버로딩
- 접근할 수 없는 속성 처리
속성 오버로드는 객체에서만 수행할 수 있습니다.
#정적 속성에는 속성 오버로드가 유효하지 않습니다.
정적 메서드에서는 이러한 매직 메서드가 호출되지 않습니다. 따라서 이러한 메서드는 정적으로 선언할 수 없습니다.
__액세스할 수 없는 속성에 값을 할당할 때 설정
  공개 무효 __set(문자열 $name, 혼합 $값)
  기능: 개인 속성의 일괄 관리, 객체 구조의 간접적 보호
__액세스할 수 없는 속성의 값을 읽을 때 get
  공개 혼합 __get(문자열 $name)
액세스할 수 없는 속성에 대해 isset() 또는 empty()가 호출될 때 __isset
  공개 bool __isset(문자열 $이름)
__unset()가 액세스할 수 없는 속성에 대해 호출될 때
  공개 무효 __unset(문자열 $name)
# 메소드 오버로딩
- 접근 불가능한 메소드 처리
__call은 액세스할 수 없는 비정적 메서드(예: 정의되지 않음 또는 보이지 않음)를 호출할 때 자동으로 호출됩니다.
    공개 혼합 __call(문자열 $name, 배열 $arguments)
__callStatic은 액세스할 수 없는 정적 메서드(예: 정의되지 않음 또는 표시되지 않음)를 호출할 때 자동으로 호출됩니다.
    공개 정적 혼합 __callStatic(문자열 $name, 배열 $arguments)
# $name 매개변수는 호출할 메소드의 이름입니다. $arguments 매개변수는 메소드에 전달될 인수가 포함된 배열입니다.

//형식 제약
함수 매개변수는 객체 또는 배열로만 지정할 수 있습니다.
객체로 제한되는 경우 형식 매개변수 앞에 클래스 이름을 추가하고, 배열로 제한되는 경우 형식 매개변수 앞에 배열을 추가합니다.
유형 제약 조건은 NULL 값을 허용합니다.
유형 제약 조건은 클래스 멤버 메서드뿐만 아니라 함수에서도 사용할 수 있습니다. 

//세 가지 주요 기능
캡슐화: 내부를 숨기는 것은 흡수이며 인터페이스만 개발합니다.
상속: 한 개체의 멤버는 다른 개체에서 사용됩니다. 구문은 코드 공유에 반영됩니다.
다형성: 다양한 형태.// 클래스와 객체·키워드
이것은 이 객체를 나타냅니다
public public (상속 체인, 이 클래스 및 외부에서 접근 가능)
protected protected(상속 체인만 이 클래스에 액세스할 수 있음)
private private (이 클래스만 접근 가능)
parent:: 상위 클래스를 나타냅니다.
self:: 이 클래스를 나타냅니다(현재 코드가 위치한 클래스).
static:: 이 클래스(이 메서드를 호출하는 클래스)를 나타냅니다.
정적 정적 멤버(속성, 메서드)는 모든 개체에서 사용할 수 있으며 외부에서 직접 사용하거나 수정할 수도 있습니다. 정적 메서드는 비정적 멤버에 액세스할 수 없습니다.
최종 메소드는 서브클래스에 의해 오버로드될 수 없으며 클래스(메서드, 클래스)는 상속될 수 없습니다.
const 클래스 상수(속성)
추상 추상 클래스
인터페이스 인터페이스
클래스 상속 확장(하위 인터페이스 상속 인터페이스, 기타 일반 클래스 상속)
인터페이스 구현 구현 (클래스 구현 인터페이스, 추상 클래스 구현 변명) (인터페이스의 다중 구현 및 상속이 있을 수 있음)
Iterator 내장 인터페이스(반복)
클론 클론
인스턴스 인스턴스
객체가 특정 클래스에 속하는지 여부에 대한 인스턴스

/* [클래스 및 객체 관련 함수] */
class_alias([$original [,$alias]]) 는 클래스에 별칭을 제공합니다.
class_exists($class [,$autoload]) 클래스가 정의되었는지 확인합니다.
interface_exists($interface [,$autoload]) 인터페이스가 정의되었는지 확인합니다.
method_exists($obj, $method)는 클래스 메소드가 존재하는지 확인합니다.
property_exists($class, $property)는 객체나 클래스에 속성이 있는지 확인합니다.
get_declared_classes(void)는 정의된 클래스의 이름으로 구성된 배열을 반환합니다.
get_declared_interfaces(void)는 선언된 모든 인터페이스를 포함하는 배열을 반환합니다.
get_class([$obj])는 객체의 클래스 이름을 반환합니다.
get_parent_class([$obj])는 객체 또는 클래스의 상위 클래스 이름을 반환합니다.
get_class_methods($class)는 클래스 메소드 이름으로 구성된 배열을 반환합니다.
get_object_vars($obj)는 객체 속성으로 구성된 연관 배열을 반환합니다.
get_class_vars($class)는 클래스의 기본 속성으로 구성된 배열을 반환합니다.
is_a($obj, $class) 객체가 이 클래스에 속하거나 이 클래스가 이 객체의 상위 클래스인 경우 TRUE를 반환합니다.
is_subclass_of($obj, $class) 이 객체가 이 클래스의 하위 클래스인 경우 TRUE를 반환합니다.
get_object_vars($obj)는 객체 속성으로 구성된 연관 배열을 반환합니다.


//공통 클래스
# PHP 매뉴얼 ->
익명 함수 객체의 마지막 클래스인 클로저 클로저 클래스
stdClass 표준 클래스, 일반적으로 컬렉션 데이터를 저장하기 위해 객체 클래스에 사용됩니다.
__PHP_Incomplete_Class는 불완전한 클래스입니다. 객체만 있고 클래스가 없으면 해당 객체는 클래스의 객체로 간주됩니다.
예외 예외 클래스
PDO 데이터 객체 클래스

//마법 상수
__DIR__ 파일이 위치한 디렉터리
__LINE__ 파일의 현재 줄 번호
__FILE__ 파일의 전체 경로(절대 경로) 및 파일 이름

__CLASS__ 클래스 이름
__METHOD__ 클래스 이름과 메서드 이름을 포함한 클래스의 메서드 이름
__FUNCTION__ 함수 이름, 메서드 이름만 나타내기 위해 메서드 내에서 사용됨

// 반사 메커니즘 반사
기능: 1. 구조 정보 획득 2. 에이전트 실행
ReflectionClass는 클래스에 대한 정보를 보고합니다.
ReflectionMethod는 메서드에 대한 정보를 보고합니다.
ReflectionClass::출력 클래스 구조 보고서 내보내기
# 에이전트 실행
ReflectionFunction 클래스의 객체 인스턴스화
  $f = new ReflectionFunction('func'); // func는 함수 func($p)입니다.
  $f->invoke('param');


/* 페이지 이동 */
// PHP
header('위치: URL')
header()가 실행된 후에도 다음 코드가 계속해서 실행되기 때문에 명령문 뒤에 die를 추가해야 종료됩니다.
프롬프트를 표시할 수 없습니다. 직접 점프하세요.
//JS 메소드
location.href = URL
// HTML
<meta http-equiv="Refresh" content="시간을 나타내는 값; url=리디렉션할 URI">

/* [쿠키] */
쿠키는 사용자를 추적하고 식별하기 위해 원격 브라우저에 데이터를 저장하는 메커니즘입니다.
쿠키는 HTTP 헤더의 일부이므로 header() 함수에 대한 제한 사항과 유사하게 다른 정보가 브라우저에 출력되기 전에 setcookie() 함수를 호출해야 합니다. 출력 버퍼 기능을 사용하면 모든 쿠키나 기타 HTTP 헤더가 필요에 따라 설정될 때까지 스크립트 출력을 지연할 수 있습니다.

//추가하다
setcookie는 쿠키 정보를 추가합니다.
setcookie($name [,$value [,$expire [,$path [,$domain [,$secure [,$httponly]]]]]])
#참고: setcookie() 함수 이전에는 출력이 불가능합니다! ob 캐시가 켜져 있지 않으면!
# 매개변수 설명
$name - 쿠키의 식별 이름
  name이라는 쿠키에 대응하려면 $_COOKIE['name']을 사용하세요.
$value - 숫자 값 또는 문자열일 수 있는 쿠키 값입니다. 이 값은 클라이언트 측에 저장되며 민감한 데이터를 저장하는 데 사용되어서는 안 됩니다.
  $name 매개변수의 값이 'name'이라고 가정하면 $_COOKIE['name']은 $value를 얻을 수 있습니다.
$expire - 쿠키 수명(Unix 타임스탬프, 초)
  $expire 매개변수의 값이 time() 60*60*24*7인 경우 쿠키가 1주일 후에 만료되도록 설정할 수 있습니다. 이 매개변수가 설정되지 않으면 세션 후 즉시 만료됩니다.
$path - 서버측 쿠키의 지정된 경로입니다. 이 값을 설정하면 서버의 지정된 경로에 있는 웹페이지나 프로그램만 쿠키에 접근할 수 있습니다.
  매개변수 값이 '/'이면 해당 쿠키는 전체 도메인 내에서 유효합니다.
  '/foo/'로 설정하면 쿠키는 /foo/ 디렉터리와 도메인 아래 해당 하위 디렉터리에서 유효합니다.
  기본값은 현재 디렉터리와 쿠키가 설정된 하위 디렉터리입니다.
$domain - 이 쿠키가 속한 서버의 URL 이름을 지정합니다. 기본값은 이 쿠키를 생성한 서버의 URL입니다.
  abc.com과 같은 도메인 이름의 모든 하위 도메인에서 쿠키가 유효하려면 항목을 '.abc.com'으로 설정해야 합니다.$secure - 쿠키가 보안 HTTPS 연결을 통해서만 전송되는지 여부를 나타내는 쿠키의 보안 식별 상수입니다. 이 값이 설정되면 특정 상황에서만 클라이언트와 서버 간에 전송될 수 있음을 의미합니다.
  true로 설정하면 쿠키는 보안 연결에서만 설정됩니다. 기본값은 false입니다.

// 읽다
- 브라우저가 요청하면 현재 도메인 이름의 모든 쿠키 정보를 서버로 전달합니다.
- 클라이언트에서 보낸 모든 쿠키는 $_COOKIE 전역 배열에 자동으로 저장됩니다.
- 쿠키 변수에 여러 값을 설정하려면 쿠키 이름 뒤에 [] 기호를 추가해야 합니다. 즉, 여러 개의 데이터가 배열 형태로 동일한 변수에 저장됩니다.
  //$_COOKIE['user']['name']으로 설정합니다. user[name]의 이름에는 따옴표가 없습니다.
  setcookie('사용자[이름]', '쇼커');
- $_COOKIE는 인덱스 배열일 수도 있습니다.

// 삭제
방법 1: 해당 값을 빈 문자열로 설정
  setcookie('사용자[이름]', '');
방법 2: 대상 쿠키를 "만료됨" 상태로 설정합니다.
  //쿠키의 수명이 만료되도록 설정합니다. 수명은 브라우저와 동일하며 브라우저가 닫히면 삭제됩니다.
  setcookie('usr[이름]', '', time()-1);

# 알아채다:
1. 쿠키는 문자열 데이터만 저장할 수 있습니다.
2. $_COOKIE는 쿠키 데이터를 수신하는 데에만 사용되며 쿠키 데이터를 설정하거나 관리하는 데에는 사용되지 않습니다.
  $_COOKIE에 대한 작업은 쿠키 데이터에 영향을 미치지 않습니다.
  $_COOKIE는 요청 중에 브라우저가 전달한 쿠키 데이터만 저장합니다.
3. 쿠키 수명주기:
  임시 쿠키: 브라우저를 닫으면 삭제됩니다.
  영구 쿠키: $expire 매개변수는 만료 시간을 나타내는 타임스탬프입니다.
4. 유효한 디렉토리
  쿠키는 지정된 디렉터리에서만 유효합니다. 기본값은 현재 디렉터리와 해당 하위 디렉터리입니다.
  하위 디렉터리에 대한 쿠키는 상위 디렉터리나 형제 디렉터리에서는 사용할 수 없습니다.
5. 쿠키는 도메인 이름을 구별합니다.
  기본적으로 현재 도메인 이름과 해당 하위 도메인 이름이 유효합니다.
6. js의 document.cookie를 통해 가져오며 유형은 문자열입니다.
7. 브라우저는 총 쿠키 수에 제한이 없지만, 도메인 이름당 쿠키 수와 각 쿠키의 크기에는 제한이 있으며, 브라우저마다 제한 사항이 다릅니다.

/* 【세션】 */
1. 세션 메커니즘 열기
  세션_시작()
  참고: session_start() 함수 이전에는 출력이 없어야 합니다! ob 캐시가 켜져 있지 않는 한.
2. 운전 데이터
  $_SESSION 배열에서 작동
3. 브라우저는 기본적으로 현재 도메인 이름 아래의 모든 디렉터리 및 하위 디렉터리에 적용되는 SessionID를 저장합니다. 즉, 쿠키의 기본 경로 값은 '/'로 설정됩니다.
4. 서버는 세션 데이터를 저장합니다.
  기본 저장 방법: 각 세션은 세션 데이터 파일을 생성하며 파일 이름은 sess_plus SessionID입니다.
5. 세션은 리소스를 제외한 모든 유형의 데이터를 저장할 수 있습니다.
  데이터는 직렬화된 후 파일에 저장됩니다.
6. $_SESSION의 요소 첨자는 정수일 수 없습니다!
  요소 값만 직렬화되기 때문입니다.
  요소 내의 배열 첨자에는 이 요구 사항이 없습니다.
7. 수명주기
  브라우저는 기본적으로 닫혀 있습니다.
    브라우저가 저장한 쿠키 변수 SessionID는 임시 변수이기 때문에
    그러나 서버 측의 세션 데이터 파일이 반드시 사라지는 것은 아닙니다(세션의 가비지 수집 메커니즘이 이를 처리할 때까지 기다려야 함).
  쿠키에 있는 PHPSESSID 변수의 수명 주기를 연장할 수 있습니다. (권장하지 않음)
  php.ini 구성 session.gc_maxlifetime
8. 데이터 삭제
  $_SESSION 변수는 스크립트가 끝나면 계속 사라집니다. 세션 메커니즘이 켜지면 $_SESSION 변수가 생성됩니다.
  $_SESSION과 세션 데이터를 저장하는 파일은 2개의 공백입니다.
  unset($_SESSION['key']) 는 배열의 요소만 삭제하고 세션 데이터를 저장하는 파일에는 즉시 응답하지 않습니다.
    $_SESSION 데이터가 파일에 기록되기 전에 스크립트가 끝날 때까지 기다리십시오.
  session_destroy()는 세션 데이터를 저장하는 파일을 파괴하고 파일에 내용을 쓰지 않습니다.
    $_SESSION 변수는 삭제되지 않으며 설정이 해제되거나 스크립트가 끝날 때까지 삭제되지 않습니다.
  세션을 완전히 삭제하는 방법은 무엇입니까? 3개 부분을 삭제해야 합니다.
    설정 해제($_SESSION);
      $_SESSION 변수를 삭제한 후에도 데이터 파일은 변경되지 않았습니다. unset만 사용하는 경우 먼저 $_SESSION = array()를 비워야 합니다.
    session_destroy();
    setcookie('PHPSESSID', '', time()-1); //보험 정책은 수명 주기를 무효화합니다.
  전체 스크립트 주기 동안 데이터 파일은 한 번만 읽고 쓰여집니다.

// 세션 저장 메커니즘을 다시 작성합니다.
#세션 저장 방법
session.save_handler = 사용자|파일|memcache
# 데이터 파일이 너무 많아서 발생하는 문제는 분자 디렉터리에 저장하면 해결됩니다.
session.save_path 옵션은 PHP 구성 파일에 있으며 데이터 저장 디렉터리는 수동으로 생성해야 합니다.
이 구성 옵션 앞에 레벨을 추가합니다. 하위 디렉터리 배포 원칙은 세션 ID의 해당 문자를 사용하여 하위 디렉터리를 할당하는 것입니다. 하위 디렉터리는 여전히 수동으로 생성해야 합니다.
session.save_path = "2; F:/PHPJob/임시"
#다중서버 데이터 공유 문제
#데이터 저장 작업:
  $open 초기화, 리소스 해제 $close, $read 읽기, $write 쓰기, 저장 매체 삭제 $destroy(이 작업은 session_destroy가 호출될 때 트리거됨) 및 가비지 수집 $gc
# 세션 ID의 길이는 가변적입니다. 설정 방법이 다르면 세션 ID 길이도 달라집니다.
session.hash_function을 사용하면 사용자가 세션 ID를 생성하는 데 사용되는 해싱 알고리즘을 지정할 수 있습니다.
  '0'은 MD5(128비트)를 의미하고, '1'은 SHA-1(160비트)을 의미합니다.
session.hash_bits_per_character를 사용하면 사용자는 바이너리 해시 데이터를 읽을 수 있는 형식으로 변환할 때 문자당 저장되는 비트 수를 정의할 수 있습니다.
  가능한 값은 '4'(0-9, a-f), '5'(0-9, a-v), '6'(0-9, a-z, A-Z, "-", ",")입니다.총 해시 길이는 128비트이고, 세션 ID 길이는 128/가능한 값, 4->32, 5->26, 6->22
# 맞춤형 데이터 저장 운영 방식
# 참고: PHP가 데이터를 직렬화, 역직렬화, 가져오고 쓰는 방법에 대해 걱정하지 마세요. 데이터 저장과 관련된 작업만 수행합니다.
session_set_save_handler는 사용자 정의 세션 데이터 저장 기능을 설정합니다.
  bool session_set_save_handler($open 호출 가능, $close 호출 가능, $read 호출 가능, $write 호출 가능, $destroy 호출 가능, $gc 호출 가능)
실행 순서: 열기, 닫기, 읽기, 쓰기, 파괴, gc
# 먼저 프로세서를 설정한 다음 세션을 엽니다.

# 자주 사용하는 기능
session_start는 세션 메커니즘을 시작하거나 재개합니다.
session_id는 현재 세션 ID를 가져오거나 설정합니다.
session_destroy는 현재 세션의 모든 데이터를 삭제합니다(데이터 파일 삭제).
session_name은 현재 세션 이름을 가져오거나 설정합니다(쿠키 변수 이름, 기본값은 PHPSESSID).
session_save_path는 현재 세션 데이터 파일 저장 경로를 가져오거나 설정합니다.
session_set_save_handler는 사용자 정의 세션 데이터 저장 기능을 설정합니다.
session_unset은 모든 세션 변수를 해제합니다($_SESSION 배열 요소 지우기).
session_encode는 현재 세션 데이터를 문자열로 인코딩합니다.
session_decode는 문자열을 세션 데이터로 해석합니다.
session_write_close는 세션 데이터를 쓰고 세션을 닫습니다.
session_register_shutdown은 세션을 닫습니다.
session_set_cookie_params는 세션 쿠키 변수를 설정하며 session_start() 전에 사용해야 합니다.
  session_set_cookie_params(0,"/webapp/"); //세션 생존 시간 설정
session_get_cookie_params는 세션 쿠키 변수를 가져옵니다. 현재 세션에 대한 쿠키 정보가 포함된 배열을 반환합니다.

# php.ini 구성
ini_set($varname, $newvalue);
  //이 함수의 구성은 현재 스크립트에만 적용됩니다.
  //이 함수로 모든 php.ini 설정을 설정할 수 있는 것은 아닙니다.
ini_get($varname) //특정 구성 항목에 대한 정보 가져오기
ini_get_all([str $extension]) //모든 구성 항목 정보의 배열을 반환합니다.

# 세션 확장 구성
session.name은 쿠키 이름으로 사용할 세션 이름을 지정합니다. 영숫자 문자로만 구성할 수 있으며 기본값은 PHPSESSID입니다.
session.save_path는 스토리지 핸들러에 전달되는 매개변수를 정의합니다.
  기본 파일 파일 프로세서를 선택한 경우 이 값은 생성된 파일의 경로입니다. 기본값은 /tmp입니다.
  선택적 N 매개변수는 세션 파일이 배포되는 디렉터리 깊이를 결정합니다.
  N 매개변수를 사용하려면 사용하기 전에 이러한 디렉터리를 만들어야 합니다. ext/session 디렉토리에 이를 수행하는 데 사용할 수 있는 mod_files.sh라는 작은 쉘 스크립트가 있습니다.
  N 매개변수를 사용하고 N이 0보다 큰 경우 자동 가비지 수집이 수행되지 않습니다.
session.save_handler는 세션과 관련된 데이터를 저장하고 검색하는 데 사용되는 핸들러의 이름을 정의합니다. 기본값은 파일입니다.
  사용자가 메모리를 정의하면 값이 user로 변경됩니다.
  ini_set('session.save_handler', 'user');//이 설정은 현재 스크립트에만 적용됩니다.
session.auto_start는 요청이 시작될 때 세션 모듈이 자동으로 세션을 시작할지 여부를 지정합니다. 기본값은 0(시작하지 않음)입니다.
session.gc_probability와 session.gc_divisor는 함께 각 세션이 초기화될 때 gc(가비지 수집 가비지 수집) 프로세스가 시작될 확률을 정의합니다. 이 확률은 gc_probability/gc_divisor를 사용하여 계산됩니다. 예를 들어 1/100은 각 요청에서 gc 프로세스를 시작할 확률이 1%라는 의미입니다. session.gc_divisor의 기본값은 100입니다. session.gc_probability의 기본값은 1입니다./* [이미지 생성 및 처리] */GD 라이브러리
// 캔버스 생성
# 새 캔버스를 만듭니다
imagecreate는 새로운 팔레트 기반 이미지를 생성합니다.
  리소스 이미지 생성(int $x_size, int $y_size)
imagecreatetruecolor는 새로운 트루 컬러 이미지를 생성합니다.
# 기존 파일이나 URL을 기반으로 캔버스를 만듭니다.
imagecreatefromgd2 GD2 파일 또는 URL에서 이미지 생성
imagecreatefromgd2part 주어진 GD2 파일 또는 URL의 일부에서 이미지를 생성합니다.
imagecreatefromgd는 GD 파일 또는 URL에서 새 이미지를 생성합니다.
imagecreatefromgif는 파일이나 URL에서 새 이미지를 만듭니다.
imagecreatefromjpeg는 파일이나 URL에서 새 이미지를 만듭니다.
imagecreatefrompng 파일 또는 URL에서 새 이미지 만들기
imagecreatefromstring은 문자열의 이미지 스트림에서 이미지를 생성합니다.
imagecreatefromwbmp 파일 또는 URL에서 새 이미지 만들기
imagecreatefromxbm은 파일이나 URL에서 새 이미지를 만듭니다.
imagecreatefromxpm은 파일이나 URL에서 새 이미지를 만듭니다.
// 색상 할당
imagecolorallocate는 이미지에 색상을 할당합니다.
  int imagecolorallocate(리소스 $image, int $red, int $green, int $blue)
imagecolorallocatealpha는 이미지에 색상 알파를 할당합니다.
imagecolordeallocate는 이미지 색상 할당을 취소합니다.
imagecolortransparent는 색상을 투명하게 정의합니다.
imagecolorat는 픽셀의 색상 인덱스 값을 가져옵니다.
imagecolorclosest 지정된 색상에 가장 가까운 색상의 인덱스 값을 가져옵니다.
imagecolorclosestalpha 지정된 색상과 투명도에 가장 가까운 색상을 가져옵니다.
imagecolorclosesthwb 주어진 색상에 가장 가까운 색조의 흑백 인덱스를 가져옵니다.
imagecolorexact는 지정된 색상의 인덱스 값을 가져옵니다.
imagecolorexactalpha 지정된 색상과 투명도의 인덱스 값을 가져옵니다.
imagecolormatch는 이미지의 팔레트 버전 색상을 실제 색상 버전과 더 가깝게 일치시킵니다.
imagecolorresolve 지정된 색상의 인덱스 값 또는 가장 가까운 가능한 대체 값을 가져옵니다.
imagecolorresolvealpha 지정된 색상 알파의 인덱스 값 또는 가장 가까운 가능한 대체 값을 가져옵니다.
imagecolorset은 지정된 팔레트 인덱스의 색상을 설정합니다.
imagecolorsforindex는 인덱스의 색상을 가져옵니다.
imagecolorstotal 이미지 팔레트의 색상 수를 가져옵니다.
// 영역 채우기
이미지 채우기 영역 채우기
  bool imagefill(리소스 $image, int $x, int $y, int $color)
imagefilledarc는 타원형 호를 그려서 채웁니다.
imagefilledellipse는 타원을 그려서 채웁니다.
imagefilledpolygon은 다각형을 그려서 채웁니다.
imagefilled직사각형은 직사각형을 그려서 채웁니다.
imagefilltoborder는 지정된 색상의 테두리까지 영역을 채웁니다.
imagesettile은 채우기에 사용되는 텍스처를 설정합니다.
// 그래픽 생성
imagearc는 타원형 호를 그립니다.
imagechar는 가로로 문자를 그립니다.
imagecharup은 문자를 수직으로 그립니다.
imagedashedline 점선을 그으세요
imageellipse는 타원을 그립니다.
imageline은 선분을 그립니다.
imagepolygon은 다각형을 그립니다.
imageRectangle은 직사각형을 그립니다.
imagesetpixel은 단일 픽셀을 그립니다.
Imagesx는 이미지 너비를 얻습니다.
Imagesy는 이미지 높이를 가져옵니다
//브러시 설정
Imagessetbrush는 선을 그리는 데 사용되는 브러시 이미지를 설정합니다.
imagesetstyle은 선 그리기 스타일을 설정합니다.
이미지 두께는 선 그리기의 너비를 설정합니다.
// 그래픽 복사
imagecopy는 이미지의 일부를 복사합니다.
imagecopymerge는 이미지의 일부를 복사하고 병합합니다.
imagecopymergegray는 회색조로 이미지의 일부를 복사하고 병합합니다.
imagecopyresampled는 이미지의 일부를 복사하여 크기를 조정합니다.
imagecopyreized는 이미지의 일부를 복사하여 크기를 조정합니다.
//캐릭터생성
imagestring은 문자열의 선을 가로로 그립니다.
imagestringup은 문자열 한 줄을 수직으로 그립니다.
imagepsslantfont는 글꼴을 기울입니다.
imagefontheight는 글꼴 높이를 가져옵니다.
imagefontwidth는 글꼴 너비를 가져옵니다.
imagettfbbox TrueType 글꼴을 사용하여 텍스트 범위 가져오기
imageloadfont는 새 글꼴을 로드합니다.
imagepsencodefont는 글꼴의 문자 인코딩 벡터를 변경합니다.
imagepsextendfont는 글꼴을 확장하거나 축소합니다.
// 캔버스를 이미지로 내보내기
imagegif GIF 형식의 이미지를 브라우저나 파일로 출력
imagepng 브라우저나 파일에 PNG 형식의 이미지를 출력합니다.
imagejpeg JPEG 형식의 이미지를 브라우저나 파일로 출력합니다.
imagewbmp WBMP 형식의 이미지를 브라우저나 파일로 출력합니다.
header()를 통해 "콘텐츠 유형: 이미지/이미지 형식"을 전송하면 PHP 스크립트가 이미지를 직접 출력할 수 있습니다.header("콘텐츠 유형: image/gif"); imagegif($im);
imagegd GD 이미지를 브라우저나 파일로 출력
imagegd2 GD2 이미지를 브라우저나 파일로 출력
// 캔버스 리소스 해제
imagedestroy 이미지 파괴
//이미지 정보
image_type_to_extension은 이미지 유형의 파일 접미사를 가져옵니다.
getimagesize는 이미지 크기를 가져옵니다.
Imagesx는 이미지 너비를 얻습니다.
Imagesy는 이미지 높이를 가져옵니다
imageistruecolor는 이미지가 트루 컬러 이미지인지 확인합니다.
imagetypes는 현재 PHP 버전에서 지원되는 이미지 유형을 반환합니다.
//이미지 설정
imagerotate는 주어진 각도만큼 이미지를 회전시킵니다.
imagealphablending은 이미지의 색상 혼합 모드를 설정합니다.
imageantialias 안티앨리어싱(antialias) 기능 사용 여부
imagefilter는 이미지에 필터를 적용합니다.
imagegammacordirect는 GD 이미지에 감마 보정을 적용합니다.
imageinterlace 인터레이스 활성화 또는 비활성화

/* [썸네일] [워터마크] */
imagecopyresampled는 이미지의 일부를 복사하여 크기를 조정합니다.
  bool imagecopyresampled (리소스 $dst_image , 리소스 $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
imagecopymerge는 이미지의 일부를 복사하고 병합합니다.
  bool imagecopymerge (리소스 $dst_im , 리소스 $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
getimagesize는 이미지 크기를 가져옵니다.
  배열 getimagesize ( 문자열 $filename [, 배열 &$imageinfo ] )

/* [URL 함수
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿