PHP/기초

PHP 자료형 정리

99C0RN 2022. 6. 20. 15:52

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 가 있고, 조금 더 나아가서 GeneratorIterator 를 구현한 클래스가 있습니다.

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

ResourceMySQLi, 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);

출처: 링크