PHP 기초

PHP

 

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

PHP로 작성된 코드를 HTML 문서 안에 추가하면 해당 코드를 해석해서 자동으로 HTML 문서를 생성한다.

동적 웹페이지(dynamic webpage)를 만드는 데에 용이하다.

 

 

 

시작과 끝

 

어디든 들어갈 수 있기 때문에 시작과 끝을 명시한다.

여러개 있지만 일단 권장 스타일만 외워둠...

 

 <?php ... ?>

 

 

세미콜론으로 끝내는 부분이나 주석 부분은 대충 동일한듯

 

 

언어 구조 (함수)

실제 함수가 아닌 구문 들을 언어 구조라고 표현한다

 

echo(), print(), isset() 등

 

 

 

 

 


 


변수

 

 

변수 선언 문법

 $변수이름 = 초깃값;

 

 

대입값에 따라 타입이 자동으로 결정되므로 타입 명시하지 않아도 ok

 

변수 이름(식별자) 규칙

영문 대소문자, 숫자, 언더스코어

안될만한 거 안됨

대소문자 구별

 

지역변수 / 전역변수 / 슈퍼글로벌 / 정적변수

전역변수: 앞에 global 붙임

정적변수: 앞에 static 붙임

 

 


상수(constant)

 

변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간

하지만 스크립트 실행 도중 변경하거나 해제 불가능

 

define()함수로 선언

 

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

 

 

마법 상수(magic constants)


미리 정의된 다양한 상수가 있다.

 

__LINE__

파일 현재 줄번호 

__FILE__ 

파일 전체 경로와 이름 

__DIR__ 

디렉터리 반환 

__FUNCTION__ 

이름반환 

__CLASS__ 

클래스 이름 반환 

 등등... 다쓰기커찮

 

 

 

기본타입이랑 타입변환은 적당히 패스...

 

가변 변수


변수의 이름도 동적으로 바꿀 수 있다

 

만약

$A = 'B';

$B = 'C';

$C = 'D';

 

echo $A; // B

echo $$A; // $B => C

echo $$$A; // $C => D 

... 

 

연산자도 대충 다 비슷한듯

조건문 반복문도 비슷

배열도 비슷

 

 

 

연관배열 (associative array)

 

 $배열이름["키"] = 값;

 

 

값 전달과 참조 전달

 

값전달: 원본데이터 복사해와서 씀

안에서 바꿔도 밖에서는 바뀌지 않음

 

참조 전달: 원본데이터 가져와서 씀

안에서 바꾸면 밖도 바뀜

함수를 선언할 때 매개변수 앞에 '&'기호를 붙이면 된다

 

디폴트 매개변수


매개변수를 전달 받지 못했을 때 사용할 기본값

 function sum($value1, $value2 = 0, $value3 = 0)

 

 

가변 길이 인수 목록


5.5 이하 버전

func_num_args(),func_get_arg(), func_get_args() 함수 이용

 

5.6 이상에서는 ... 토큰으로 간편하게 설정

(...$num) 일케 쓰면 $num 에 인수들로 배열을 알아서 만들어줌

 

 

 

 


 

 

조건적 함수

 

if(조건){

}

 

가변 함수

변수 이름에 ();를 붙이면 해당 변수 값의 이름을 가진 함수 호출

 

$func = "first";

$func(); // => function first( ->가 실행됨

 

 

PHP 내장함수

 

변수 관련 함수

gettype() -> 변수의 타입을 반환해줌

그 외에도 여러 검사용 함수가 있다...

 

 

함수설명

is_array()

전달받은 변수의 타입이 배열인지를 확인함.

is_bool()

전달받은 변수의 타입이 논리형인지를 확인함.

is_callable()

변수의 내용을 함수처럼 호출할 수 있는지를 확인함.
is_float(),
is_double(),
is_real()

전달받은 변수의 타입이 실수인지를 확인함.

is_int(),
is_integer(),
is_long()
전달받은 변수의 타입이 정수인지를 확인함.
is_null()전달받은 변수의 타입이 NULL인지를 확인함.
is_numeric()전달받은 변수가 수나 숫자로 이루어진 문자열인지를 확인함.
is_object()전달받은 변수의 타입이 객체인지를 확인함.
is_resource()전달받은 변수의 타입이 자원인지를 확인함.
is_scalar()전달받은 변수가 스칼라값인지를 확인함.
is_string()전달받은 변수의 타입이 문자열인지를 확인함.

 

 

isset()은 전달 받은 함수가 선언되었는지 검사

unset()은 전달 받은 변수를 제거

empty()는 전달 받은 변수가 비었는지 검사

 

intval() 정수를 반환한다

floatval() /doubleval() 실수를 반환한다

strval() 문자열을 반환한다

 

배열 관련 함수

 

array() 배열의 생성

count() / sizeof() 배열 요소 개수

array_count_values() 배열 요소를 전부 확인해서 해당 값이 몇 번 등장하는지 확인한 후 "값"=등장빈도 연관배열 반환

 

current() / pos() 현재 가리키고 있는 요소 반환

next() 앞으로 포인터 하나 이동시키고 반환

prev() 뒤로 하나 이동시키고 반환

each() 현재 가리키고 있는 요소의 키와 값 반환 후 앞으로 이동

reset() 첫번째 배열 요소 가리키고 반환

end() 마지막 배열요소 가리키고 반환

 

sort() 정렬

배열 요소를 정렬할 기준 전달 가능

SORT_NUMERIC 배열 요소 숫자로 비교

SORT_STRING 배열 요소 문자열로 비교

대소문자 구분, 대문자가 소문자보다 앞으로 정렬.

 

연관 배열의 정렬


ksort() 연관배열의 키를 기준으로 정렬

asort() 값을 기준으로 정렬

 

내림차순 배열도 가능한 듯... 필요하면 씀

 

shuffle() 섞어주기도 함

array_reverse() 새로운 배열 반환

 

 

문자열 관련 함수

 

strlen() 문자열 길이

mb_strlen() 인코딩 방식까지 전달받음

 

strcmp() 전달 받은 두 문자열 서로 비교

 

strstr() strchr() 전달받은 문자열과 처음으로 일치하는 부분을 찾음-존재하면 처음으로 일치하는 부분부터 이후를 잘라서 반환

strrchr() 마지막으로 일치하는 부분을 찾음

 

strpos() 처음으로 일치하는 부분의 시작 인덱스 반환

strrpos() 마지막으로 일치하는 부분의 시작 인덱스 반환

 

substr() 문자열 추출

 

strtolower() 소문자

strtoupper() 대문자

등등...

 

explode() 문자열을 나누어서 배열로 반환

implode() / join() 배열을 하나로 합쳐진 문자열로 반환

 



날짜 받아오는 함수

 

date()

getdate() 어쩌고...

 

max() min() floor() 등등...

거의 안써서 뻘쭘하다

 

abs() 절댓값 반환

rand() 0보다 크거나 같고 getrandmax() 반환값보다 작은 하나의 정수를 무작위로 생성해 반환

 

 

정규 표현식

문자열에서 특정한 규칙을 가지는 문자열의 집합을 찾아내기 위한 검색 패턴

POSIX 방식 기준 설명

 

 /검색패턴/플래그

 

 

preg_match() 전달 받은 정규 표현식과 일치하는 패턴을 검색

 

 $subject = "간장 공장 공장장은 강 공장장이고, 된장 공장 공장장은 장 공장장이다.";

 

if (preg_match('/공장/'$subject)) {

    echo "해당 문자열에서 '공장'을 발견했습니다.<br>";

} else {

    echo "해당 문자열에서 '공장'을 발견하지 못했습니다.<br>";

}

 

 

플래그로 기본 검색 설정 변경할 수 있음

 

플래그(flag)

설명
i검색 패턴을 비교할 때 대소문자를 구분하지 않도록 설정함.
g검색 패턴을 비교할 때 일치하는 모든 부분을 선택하도록 설정함.
m검색 패턴을 비교할 때 여러 줄의 입력 문자열을 그 상태 그대로 여러 줄로 비교하도록 설정함.
y대상 문자열의 현재 위치부터 비교를 시작하도록 설정함.
u대상 문자열이 UTF-8로 인코딩된 것으로 설정함.

 

 

특수문자설명

.

줄 바꿈 문자(\n)를 제외한 임의의 한 문자를 의미함.

?

해당 문자 패턴이 0번 또는 1번만 반복됨.

*

해당 문자 패턴이 0번 이상 반복됨.
+해당 문자 패턴이 1번 이상 반복됨.
{...}반복되는 횟수를 지정함.
^문자열의 처음을 의미함.
$문자열의 끝을 의미함.
\특수문자를 무시함.
|선택을 의미함. (OR)
(...)그룹화의 시작과 끝을 의미함.

 

에라이씨모르겠다지금봐봣자 이해를 x함

어려운데 아무튼 이걸로 문자열 검증? 같은거 하는듯 (ex 올바른 형식의 이메일이 아닌 것 검색)

 

 

 

 

 


 

 

클래스와 객체 

 

클래스(class)

-인간(human)

 

프로퍼티(속성)

-$human-> height="170"

 

메소드(동작)

$human -> eat()

 

인스턴스(메모리에 생성된 객체)

조랭

 


클래스


 class 클래스이름

{

클래스의 프로퍼티와 메소드 정의;

}

 

 

생성자(constructor)

 

__constuct(매개변수...) 로 정해져 있음

 

 

 

소멸자(destructor)

 

__destruct() 로 정해져 있음

객체를 삭제할 때 호출함

 

 

 

인스턴스의 생성

 

new 키워드로 생성할 수 있다.

 $객체이름 = new 클래스이름(인수1, 인수2, ...);

 

 

클래스에 접근하거나 메소드를 호출할 때는 화살표 기호를 사용

 $객체이름 -> 프로퍼티이름;

$객체이름-> 메소드이름;

 

객체 내부에서는

$this ->프로퍼티이름; 도 가능

 

 

 

 

 


 

 

접근 제어

앞에 private나 protected 붙여서 접근을 제어할 수 있다.... 

정보은닉? 이라는데 먼소린디 모르게혀요 우뱌뱌요

 

public : 외부공개 O 어디서나 접근 O

private : 외부공개 X 해당 클래스 멤버에서만 접근 O

protected : 상위 클래스는 public 처럼, 외부에서는 private 처럼

 

그러니까 외부에서는 집 안을 들여다볼 수 없음

이 상태에서 A는 집 밖을 왔다갔다 가능

그래서 B C 의 정보를 집 밖으로 내보내줌

 

 

상속

기존 클래스에 기능을 추가하거나 재정의하여 새 클래스를 받는 것

기존에 정의되어있던 클래스를 부모 클래스 /상위클래스 (parent / super)

새로 작성되는 클래스를 자식 클래스 / 하위 클래스 (child / sub) 라고 함

 

자식 클래스는 부모 클래스의 모든 public, protected 멤버를 상속 받음 (private는 안받나봐요)

 

 class B extends A

{

A를 상속받은 B의 프로퍼티와 메소드

이렇게 하면 공통적인 부분은 부모 클래스에서 작성하고

자식클래스에서는 중복되는 부분을 제거할 수 있다