Boolean
boolean
타입은 참과 거짓 두 가지의 값을 가질 수 있습니다. 조건문과 반복문 등 주요 제어 구조에서 사용됩니다.
true;
false;
(bool) 10; // -> true
(bool) []; // -> false
(bool) ''; // -> false
(bool) null; // -> false
Integers
integer
는 숫자형 자료형이므로서 PHP 에서 숫자를 표현할 때 사용합니다. 여기에는 16진수, 10진수, 8진수, 2진수가 포함됩니다.
10; // -> Decimal
0777; // -> Octal
0xF; // -> Hexdecimal
0b0101; // -> Binary
(int) 'Hello, world'; // -> 0
(int) '50x'; // -> 50
(int) true; // -> 1
(int) false; // -> 0
(int) null; // -> 0
Double (Float)
Double (Float)
형은 부동소수점을 나타내며 소수점 또는 지수표현법으로 표현합니다.
1.234;
1.2e3;
7E-3;
Strings
string
은 문자열을 나타냅니다. 문자열은 '
과 "
를 사용하여 나타낼 수 있습니다.
'Hello, world';
"Hello, world";
(string) 10; // -> "10"
(string) true; // -> "1"
(string) false; // -> ""
(string) 1.234; // -> "1.234"
Backtick
Backtick(`)
은 Shell Command 를 실행할 때 사용할 수 있습니다.
echo `php --help`
Arrays
array
는 배열 자료형을 나타냅니다. 배열은 여러 값을 가질 수 있습니다. 그 값이란 정적 타입 언어와는 다르게 숫자, 객체, 함수 등을 가질 수 있습니다. array()
언어 구조를 사용하거나 []
를 사용하여 배열을 정의할 수 있습니다.
선언하기
$messages = [
'Hello, world',
'Who are you?',
'Bye'
];
// $messages = array('Hello, world', 'Who are you?', 'Bye');
Key-Value 매핑
배열은 키와 값을 매핑하여 나타낼 수도 있습니다.
$messages = [
0 => 'Hello, world',
'message' => 'Who are you?',
'Bye',
];
비구조화 할당
배열을 분해하여 각 변수에 할당을 할 수도 있습니다. list()
언어 구조를 사용하거나 []
를 사용합니다.
// [, $message ] = [ 'Hello, world', 'Who are you?' ];
list(, $message) = ['Hello, world', 'Who are you?'];
// ['message' => $message ] = [ ... ]
list('message' => $message) = [
'message' => 'Hello, world'
];
Spread 연산자
배열을 파라매터로 전달하거나, 다른 배열과 합칠 때 Spead 연산자를 사용할 수 있습니다. ...
로 표현합니다.
함수의 파라매터
function foo($messages)
{
var_dump($messages);
}
foo(...['Hello, world', 'Who are you?']);
배열 합치기
$messages = [
'Hello, world'
];
// $messages = [ 'Hello, world', 'Who are you?', 'Bye' ];
$messages = [
...$messages,
'Who are you?',
'Bye'
];
배열과 노는 법
배열을 다루는 몇가지 방법을 알아봅니다. 다른 언어와 크게 다르지 않습니다.
집어넣기
아래의 코드는 배열의 맨 마지막에 요소를 삽입합니다.
// array_push($messages, 'whoops');
$messages[] = 'whoops';
접근하기
배열의 3번 인덱스에 접근합니다. 인덱스는 제로 베이스입니다.
$messages[3];
갱신하기
배열의 3번 인덱스의 요소를 갱신합니다. 만약 3번 인덱스가 없다면 숫자 3을 키로삼고 값으로 Do you know?
를 집어넣습니다.
$messages[3] = 'Do you know?';
삭제하기
배열의 3번 인덱스에 해당하는 요소의 메모리를 릴리즈합니다. unset()
은 함수가 아닌 언어 구조입니다.
// array_pop($messages);
unset($messages[3]);
Iterables
Iterable
는 반복가능한 자료형을 의미합니다. 즉, 반복문인 foreach
문에서 돌릴 수 있는 형태라고 해석할 수 있습니다. 기본적으로는 Array
가 있고, 조금 더 나아가서 Generator
와 Iterator
를 구현한 클래스가 있습니다.
Array
// range(0, 10) 은 0 부터 10까지의 숫자 배열을 생성합니다.
foreach (range(0, 10) as $value) {
echo $value;
}
Generator
function foo(iterable $iterable): iterable
{
foreach ($iterable as $value) {
yield $value;
}
}
foreach (foo(range(0, 10)) as $value) {
echo $value;
}
Iterator
class MyIterator implements Iterator
{
private $position = 0;
private $values;
public function __construct(iterable $values)
{
$this->values = $values;
}
public function current()
{
return $this->values[$this->position];
}
public function key()
{
return $this->position;
}
public function next()
{
++$this->position;
}
public function rewind()
{
$this->position = 0;
}
public function valid()
{
return isset($this->values[$this->position]);
}
}
$myclass = new MyIterator(range(0, 10));
foreach ($myclass as $value) {
echo $value;
}
Objects
Object
는 다른 언어와 마찬가지로 인스턴스를 의미합니다. 여기서 주의할 점은 함수 또한 Closure
의 오브젝트라는 점이고, Generator
또한 Generator
의 오브젝트라는 점입니다. 따라서 자료형 중에 함수는 별도로 지정되지 않았습니다.
// class Closure
var_dump(function () {});
var_dump(fn () => 'Hello, world');
class MyClass {}
// class MyClass
var_dump(new MyClass);
// class class@anonymous
var_dump(new class {});
function foo()
{
yield 1;
}
// class Generator
var_dump(foo());
Resources
Resource
는 MySQLi, Stream, File Hanlder
등 자원에 대한 처리를 할 수 있는 것들에 대한 자료형입니다.
$fh = fopen('http://example.com', 'r');
// resource
var_dump($fh);
NULL
null
은 변수 등에 데이터가 할당되기 이전에 들어갈 수 있는 임시형태입니다. 데이터가 할당되지 않은 상태를 나타내며, 선언되지 않은 변수에 접근할 때 null 을 반환합니다.
null;
// (null) 10;
// (null) 'Hello, world';
Callbacks / Callables
Callback / Callable
는 콜백 함수로서 호출될 수 있는 것을 말합니다. 예를 들어 다음과 같이 함수가 선언되어 있습니다.
/**
* @param callback $func
*/
function foo(callable $func)
{
if (is_callable($func)) {
var_dump(call_user_func($func));
}
}
함수 (익명 함수)
함수 또는 익명 함수를 콜백 함수로 사용할 수 있습니다. 여기서 함수를 파라매터로 전달할 때는 문자열의 형태로 전달하는 것에 주목해주세요.
function foo2() {}
foo('foo2');
foo(fn () => 'Hello, world');
정적 메서드 & __invoke()
클래스 내에 선언 된 정적 메서드
와 __invoke()
메서드도 마찬가지입니다. 정적 메서드를 전달할 때도 문자열로 전달하되 범위 연산 ::
를 사용합니다.
class MyClass
{
public static function foo()
{
return __CLASS__;
}
}
class MyClass2
{
public function __invoke()
{
return __CLASS__;
}
}
foo('MyClass::foo');
foo(new MyClass2);
출처: 링크
'PHP > 기초' 카테고리의 다른 글
PHP 상수 정리 (0) | 2022.06.25 |
---|---|
PHP 변수 정리 (0) | 2022.06.25 |
PHP 배열(array) 기초 정리 (1) | 2022.06.18 |
PHP include, require 특징 및 차이점 (0) | 2022.06.16 |
PHP $_SERVER 환경 변수 정리 (0) | 2022.06.15 |