너의 개발은/PHP

    PHP: HTML 폼 (GET, POST)

    HTML 폼 HTML 폼은 HTTP 요청의 역사에서 오래된 것 중 하나이다. HTTP 요청은 cURL, Ajax 등 다양한 기술로 처리를 할 수 있으나 폼요청은 웹사이트에서 가장 많이 사용하는 요청이자 역사가 오래된 요청 방법이다. 여기서 HTML 폼은 우리가 흔히 볼 수 있는 회원가입, 로그인 화면에서 아이디와 패스워드를 입력하고 확인 버튼을 눌러 로그인을 할 수 있도록 해준다. 우리말로는 양식이라고 하는 듯하지만, 편의상 폼이라고 할 것이다. 로그인 HTML 폼의 예시로는 로그인이 제격이다. 로그인의 과정 자체는 언급하지 않겠지만, 폼은 데이터를 전달하기 위한 용도로 사용하므로 해당 데이터를 어떻게 사용할 지는 프로그래머의 몫이다. 따라서 여기서는 해당 포스팅에서는 폼으로 데이터를 전달하고 PHP 에..

    PHP: 객체 비교와 복사

    객체 비교 객체에 대한 비교는 단순히 가지고 있는 값이 똑같은지 비교하는 것과 객체의 주소값이 같은지를 비교하는 것이 있습니다. 각각 ==, === 연산자를 사용하고, 아래의 코드를 보면, 두 개의 객체는 서로 다른 주소값을 가지고 있기 때문에 === 를 사용했을 때 false 를 반환합니다. 아주 단순하지만 이는 중요합니다. $class1 = new stdClass(); $class2 = new stdClass(); var_dump($class1 == $class2); // -> true var_dump($class1 === $class2); // -> false 객체 복사 결론부터 이야기하자면 PHP는 clone 키워드를 통해 복사하는 경우 기본적으로 얕은 복사입니다. 복사는 단순 복사, 얕은 복사,..

    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..