[책] Learning PHP 챕터 4~6 요약
반응형
4. 데이터 집합: 배열 다루기
배열 선언 및 할당
- 배열 : key와 value로 구성, key는 스칼라 값만 가능
- 배열 선언 :
$vegetables = array('corn'=>'노랑', 'beet'=>'빨강')
혹은 단축 배열(php 5.4+)로 표현$vegetables = ['corn'=>'노랑', 'beet'=>'빨강']
,$vegetables['corn'] = '노랑';
- 배열 재할당 : 배열에 스칼라값 할당 시 배열변수는 스칼라변수로 변경된다. 스칼라 변수를 다시 배열 변수로 덮어씌우려면
array()
구문을 써야함.$스칼라변수['key'] = value
는 php 엔진 경고만 발생시키고 기존 스칼라값으로 유지된다. (배열 안먹음) => 이건 아마.. 배열 변수는 배열 클래스(?)를 상속한 객체인데 스칼라 변수는 그냥 값을 나타내는거니까 변수[key] = value 형태가 안먹는거겠지? // TODO 확인 필요 - 숫자키 배열 : 숫자키로 이루어진 배열은 key 축약 가능 =>
$dinner = array('밥','김치');
- php 엔진은 숫자 키 배열과 문자열 키 배열을 내부적으로 각각 다르게 처리함. 그래서 숫자키 배열은 인덱스배열, 순차배열이라고도 말하고, 문자열키 배열은 연관 배열이라고도 함
- 배열 제거 :
unset()
배열 순회
- 배열 순회 :
foreach()
,for()
. 별칭으로 생성된 변수는 해당 구문 내에서만 유효하며 각 배열의 원소값이 복사됨 - 배열 순회 시
foreach()
는 배열이 추가된 순서로 출력하므로, 인덱스 순으로 순회를 원한다면 for()를 사용해야함 (js forEach는 인덱스 순으로 순회)
배열 키/값 존재여부 확인
- 배열 키 존재여부 :
array_key_exists('key', $array_name);
- 배열 원소값 존재여부 :
in_array(value, $array_name);
(대소문자 구분하며 반환값 true/false) - 배열 원소값의 키 :
array_search(value, $array_name)
원소의 키값 반환
배열 표시 및 변환
- 문자열이나 here 문서 내 배열 원소를 표시할 때 :
$array_name[key]
와 같이 키 값에 따옴표를 감싸지 않는다. 단, 키 값에 화이트스페이스나 문장기호 등이 포함되었을 경우 중괄호로 감싼다.{$array_name['My Key']}
- 배열 to 문자열 :
implode()
ex) print implode(',', $array_name); // 원소값1, 원소값2, 원소값3 - 문자열 to 배열 :
explode()
ex) $array_name = explode(',', 'A, B, C'); // [A, B, C];
배열 정렬
sort()
: 원소값을 기준으로 재정렬됨. 연관배열(문자열 키)은 sort() 적용 시 키 값이 숫자로 변경됨asort()
: 키 변경 없이 연관배열을 원소값 정렬하려면asort()
를 사용 => 숫자키 정렬 시 index가 0, 2, 1 이런 순으로 바뀔 수 있겠군 //TODO 확인ksort()
: 키 기준으로 정렬. 인덱스 배열의 순서가 0, 2, 1 이렇게 되어있다면 0, 1, 2로 재정렬되겠지? //TODO 확인- 내림차순은 각 정렬함수에
r
을 추가하면 됨 :rsort(), arsort(), krsort()
다차원 배열
- 다차원 배열 할당 1 :
$meals = array('breakfast' => ['우유', '콘푸라스트']);
) - 다차원 배열 할당 2 :
$breakfast = [['우유', '콘푸라스트]];
) - 다차원 배열 할당 3 :
$meals = array('breakfast' => array('우유', '콘푸라스트'));
)
5. 논리 집합: 함수와 파일
함수 선언과 호출
- 함수 선언 :
function 함수명() { }
- 함수명 : 첫 글자는 문자나 밑줄문자로 시작해야하며, 동일 이름의 변수가 존재해도 구분 가능.
- 함수의 순서 : PHP 엔진이 전체 프로그램 파일을 읽으며 모든 함수를 인지한 뒤에 명령을 실행하기 떄문에 호출 뒤에 함수 선언이 와도 괜찮음
함수 인수 전달
- 인수 기본값 설정 :
function print_color($color = 'red') { }
- 인수 기본값에 변수 사용 불가 :
function print_color($color = $red) { }
불가 => PHP엔진이 함수를 읽어들이는 시점 이후에 인수의 변수값이 동적으로 변경될 수 있으니까 불가하도록 했겠지? 함수를 읽어들인 후 이 함수를 식으로서 관리하는걸까? - PHP 엔진이 인수로 전달한 값을 인수 변수에 복사하기 때문에, 함수 외부 변수는 영향을 받지 않음
반환값
-
function restaurant_check($base_price, $tax = 0.1) { $total = $base_price + ($base_price * $tax); return $total; }
변수 영역
- 전역 변수 : 함수 밖에서 정의된 변수
- 지역 변수 : 함수 내부에 정의된 변수
- 함수 내부에서 전역 변수에 접근하는 방법은 두 가지
$GLOBALS
이라는 특수 배열 활용 :print $GLOBALS['변수명'];
global
키워드 사용 :global $변수명;
을 선언 후에는$변수명
는 전역변수를 가르킨다.
- 일반적으로 전역변수 접근 시
$GLOBALS
변수를 사용함 : 코드의 명료성 $GLOBALS
: 자동 전역 변수라고도 한다. 영역에 관련된 아무런 조치 없이도 PHP 내 어디서든 사용 가능함. 자동 전역변수에 대해서는 7장, 10장에서 알아봄
인수와 반환값 제한
- 형 선언을 통해 함수의 인수를 제한할 수 있음 (괄호는 지원되는 PHP 버전 의미) : ex)
function 함수명(int $number) { }
- array (5.1+)
- bool (7.0+)
- callable (5.4+) : 함수 또는 호출 가능한 메서드
- float (7.0+)
- int (7.0+)
- string (7.0+)
- 클래스명 (5.0+) : 해당 클래스의 인스턴스
- 반환값 제한 : ex)
function 함수명() : int { return 0; }
- PHP 7의 기본설정은 스칼라 형의 선언을 완전 강제하지 않음 => 선언된 형과 일치하지 않으면 PHP 7은 형 변환을 시도함.
- 파일 맨 위에
declare(strict_types = 1);
구문을 넣어 느슨한 기본 설정을 엄격하게 변경 가능 (근데 전역 설정은 불가함. 적용하려는 파일마다 선언해야함;)
다른 파일의 코드 실행
require
구문 : 불러온 PHP 코드가 올바르지 않다면 PHP 엔진은 프로그램 실행 중단include
구문 : 불러온 코드가 올바르지 않더라도 프로그램 계속 실행
6. 데이터와 로직: 객체 다루기
클래스
- 객체 내부 속성이나 메서드 가르키기 : 화살표 지시자(
->
) 사용 (배열 지시자=>
와는 다름) $this
: 인스턴스를 가르킴- 정적메서드는 클래스를 통해 접근하며 지시자는
->
대신::
를 사용 - 클래스 생성자명은 항상
__construct()
- 클래스 상속 시 생성자도 포함하여 다 상속받음
- 부모 클래스의 생성자 명시적 실행
parent::__construct()
// TODO parent가 부모 객체를 가르키는데, 왜 $ 연산자가 없을까? 무슨 차이인지 확인 - 클래스의 객체여부 판별 :
타겟 instanceof 클래스명
네임스페이스 (PHP 5.4+)
- 네임스페이스에 익숙해지면 타인이 작성한 패키지를 자신의 프로그램으로 가져올 수 있음. 자세한 내용은 16장 컴포저 패키지 관리 시스템 참고
- 네임스페이스란 클래스 정의나 다르 네임스페이스를 포함하는 컨테이너.
namespace
키워드나 클래스명에 역슬래시(\
) 가 있으면 네임스페이스가 사용된 코드- 클래스에 네임스페이스가 없을 경우 디폴트는 최상위 네임스페이스인 루트(
\
)로 지정 - 최상위 네임스페이스 클래스를 참조할 때는 혼동의 여지를 없애기 위해 명시적으로
\
를 클래스명 앞에 붙이기를 권장 //TODO ?? 네임스페이스의 실 사용예제를 봐야 이해갈 듯 - 네임스페이스 작성을 단순화하기 위해
use
키워드 제공 (별칭이 없으면 맨마지막 클래스명을 별칭으로 인식)
반응형
'Programming > PHP' 카테고리의 다른 글
[책] Learning PHP 챕터 7~10 요약 (0) | 2021.07.04 |
---|---|
[책] Learning PHP 챕터 1~3 요약 (1) | 2021.06.29 |
댓글
이 글 공유하기
다른 글
-
[책] Learning PHP 챕터 7~10 요약
[책] Learning PHP 챕터 7~10 요약
2021.07.04 -
[책] Learning PHP 챕터 1~3 요약
[책] Learning PHP 챕터 1~3 요약
2021.06.29