프로그래밍 언어/PHP

    PHP: 참조 (WeakReference)

    참조 참조는 포인터와 비슷하지만 사실 전혀 다른 개념입니다. 그저 변수의 실질적 값이 담긴 공간에 그저 이름을 하나 더 부여할 뿐입니다. hello 라는 변수에 Hello, world 라는 값이 담겨있고, 이 변수의 참조인 sayHello 라는 변수를 만들면 그저 Hello, world 라는 값이 담긴 메모리 공간에 이름이 하나 더 부여 될 뿐이라는 것입니다. 그 말은 hello 변수와 sayHello 라는 변수는 같다는 이야기로 해석할 수 있습니다. & & 기호를 사용하여 참조를 나타낼 수 있으며, 이는 위에서 언급한 바와 같이 이름을 하나더 부여하는 것과 같습니다. 그래서 sayHello 라는 값을 바꿨더니 hello 변수의 값도 변하는 효과가 나타난 것입니다. 포인터와 헷갈려서는 안 됩니다. 포인터..

    PHP: 제네레이터 (Iterator)

    제네레이터 제네레이터는 모던 PHP에서 등장한 흥미로운 기능으로, 내부적으로 Iterator 인터페이스를 구현한 빌트인 클래스입니다. 생긴건 함수처럼 생겼지만, 함수 내부에서 yield 라는 키워드를 사용하여 마치 Break Point 를 넣은 것처럼, 값을 외부에 던져주고 다시 내부로 돌아가서 진행할 수 있습니다. 사실 이야기만 들어서는 잘 모를 수 있는데, 코드를 보면 쉽게 알 수 있을 것입니다. 자바스크립트에도 제네레이터는 존재하지만, 그보다는 복잡하지 않습니다. yield 제네레이터는 마치 함수처럼 생겼습니다. 그런데 사실 이렇게 만든 제네레이터를 호출해서 값을 반환받으면 흥미로운 객체를 얻을 수 있습니다. 바로 제네레이터 객체입니다. 즉, 함수의 모습을 하고 있지만, 실은 전혀 다른 개념이라는 ..

    PHP: 에러와 예외 (try, catch, finally)

    에러 여기서 에러라는 것은 문법 에러와 치명적 에러 등을 말합니다. 에러는 보통 문법 에러, 컴파일 에러 등 컴파일 타임에 나타나는 것이 일반적이며 예외는 데이터베이스 연결 예외 등 런타임에 나타나는 것이 일반적입니다. PHP 언어에서는 에러를 처리할 수 있는 몇 가지 기법이 있는데, 알아보도록 하겠습니다. error_reporting(int) 에러 발생 레벨을 조정할 수 있습니다. 상수 E_ 로 시작하는 것이 일반적입니다. 예를 들면 다음과 같이 레벨을 조정할 수 있습니다. 예제에 나온 설정이 일반적으로 사용되고, 프로덕션에서는 꺼놓는 경우도 있습니다. 사실 보안을 위해서라면 꺼놓는게 좋기는 합니다. int $level 에러 보고 레벨 error_reporting(E_ALL & ~E_NOTICE); e..

    PHP: 네임스페이스

    네임스페이스 네임스페이스는 분량은 짧지만 매우 x 2 중요합니다. 클래스와 함께 모던 PHP를 이루는 근간이며, composer 와 같은 패키지 매니저를 사용할 때 중요하게 작용하기 때문입니다. 이는 우리가 composer package 를 만들거나 할 때도 필요합니다. 이는 단순히 우리가 작성한 코드를 구역으로 나누는 것으로 같은 서드 파티, 또는 빌트인에 속하는 함수, 클래스와 중복을 고려하지 않고도 클래스나 함수의 이름을 지정해줄 수 있습니다. 네임스페이스를 사용하기 이전에는 중복을 피하기 위해 긴 함수, 클래스 이름을 사용하여 나타내야 했는데 이제는 그럴 필요가 없습니다. namespace 네임스페이스는 naemspace 키워드를 사용하여 나타낼 수 있으며, 내부에는 함수와 클래스, 상수 등 여러..

    PHP: 매직 메서드

    매직 메서드 매직 메서드는 특수한 메서드로서 클래스에서 특별한 동작을 하게되는데, 그 중에는 PHP: 상속에서 이야기한 생성자와 소멸자도 포함하고 있습니다. 대체로 __ 로 시작하는 메서드 명이 그러하며 이는 사용자가 직접 호출하는 것이 아니고, 특정 행동을 취했을 경우 호출되는 콜백함수같은 것입니다. 따라서 인터페이스 규격이 정해져 있으며 그에 따라 정의해야 하고, 리턴 값또한 그러해야 합니다. 대부분 리턴값은 없는 경우가 많으나 일부 매직 메서드의 경우 존재합니다. 매직 매서드는 종류가 많은데, 전부 다 할 수는 없으니 임의로 몇 가지 토픽으로 나누어서 해보고자 합니다. 주제는 세 가지로, 각각 Method, Property, Serialize. 그 외에 __toString() 과 같은 것들도 있으나..