꽤 오래전 이야기라서 많은 분들이 알고 계시리라 생각합니다만 정리도 할 겸 적어 봅니다. 지금은 대부분의 시스템에서 PHP5를 사용하고 있으리라 생각합니다. 하지만 아직도 어디건간 PHP4 코드가 동작하고 있겠죠. PHP4에서 PHP5로 넘어오면서 가장 큰 변화 중 하나는 객체 참조였습니다. PHP4가 개발되고 사용될 당시에는 일반적으로 PHP를 객체 지향적으로 작성하지 않았습니다. 그렇기 때문에 값을 참조로 넘기는 것이 좋은 생각은 아니었습니다. 물론 & 연산자를 이용해 참조를 지정할 수는 있습니다만 이해하기 어렵고 때때로 올바르지 않은 결과를 초래하기 까지 합니다. 시간이 흘러 객체 지향적인 프로그래밍을 하는 사람이 늘어나면서 PHP5에서는 객체 참조가 반영됐습니다. 이것은 $thing = new Thing; 처럼 객체를 생성하는 경우에는 참조를 반환하는 것입니다. $thing = new Thing; $thing->Kind = 'PC'; $thing2 = $thing; $thing2->Kind = 'Mac'; echo $thing->Kind; 위 코드를 PHP4와 PHP5에서 각각 실행했을 때 PHP4에서는 “PC”가 출력되고 PHP5에서는 “Mac”이 출력됩니다. 만약 PHP4에서 “Mac”을 출력하고 싶다면 아래와 같이 작성해야 합니다. $thing = new Thing; $thing->Kind = 'PC'; $thing2 = &$thing; $thing2->Kind = 'Mac'; echo $thing->Kind; 참조의 이점 참조를 사용하면 복사하는 것에 비해 메모리 공간 등에서 이점이 있습니다. $memory 라는 변수가 1MB를 자치한다면 참조를 사용하지 않고 $memory_copy 변수에 복사한다면 메모리 사용량은 2MB로 증가하게 됩니다. 아무래도 객체는 다양한 구성 요소를 갖고 있기 때문에 객체 지향을 적극 반영한 PHP5의 객체 참조는 당연한 결과입니다. 객체가 아니더라도 적절히 참조를 사용한다면 시스템 자원을 아낄 수 있을 것입니다. 참조를 사용하지 않는게 이로운 경우 참조가 성능상에 좋다고 해서 모든 경우에서 참조를 사용한다면 반대로 성능을 떨어뜨리거나 예상치 못한 오류가 발생할 수도 있습니다. 이를 고려해서 PHP5 에서도 객체 인스턴스가 아닌 값의 대입인 경우에는 복사를 합니다. 복사(값)와 참조의 차이는 간단하게 아래 그림처럼 표현할 수 있을 겁니다. 변수 $a ...
PHP Fest 2009 사후 드리는 말씀
우선 행사 준비가 미숙하여 PHP Fest 2009에 참가해주신 여러분들께 다소 불편을 드린 점 대단히 죄송합니다. 더불어 PHP Fest 에 대한 몇 가지 오해와 일부 야기된 논란으로 인해 PHP Fest 의 순수성이 다소 회손되고 있기에 사실을 알려드립니다. 1. PHP Fest 를 주최한 PHPKorea는 비영리 순수 유저모임으로서 PHP Fest 를 순수한 기술 공유 행사로 만들고자 노력하고 있습니다. 지금까지 2008년, 2009년에 치뤄진 PHP Fest 는 순수성을 회손하지 않기 위해서 행사장 대여, 경품 후원 등 최소한의 “일체 어떠한 조건도 없는” 후원 만을 받고 있습니다. 기업의 후원이 많아 지면 행사는 커지고 화려해지며 많은 경품을 나눠드릴 수는 있겠으나 행사가 기업의 홍보 잔치가 될 수 있고 본래의 목적을 잃어 버리게 됩니다. PHPKorea 와 PHP Fest 의 순수성을 인정하여 어떠한 조건도 제시하지 않은 채 행사를 주관해 주시고 행사장을 대관해 주시고 경품을 제공해 주신 여러 기업과 개인분들께 진심으로 감사드립니다. 더불어 이번에 나눠드린 ASP.NET 책은 그 책이 담고 있는 내용이 PHP 든 PHP가 아니든 어떠한 기술에 대해서도 배타적이지 않는다는 PHPKorea 의 원칙에 의해 나눠드린 것입니다. PHPKorea 는 기술자가 특정 기술에 배타적이 될 때 더 큰 발전은 이룰 수 없다고 믿고 있습니다. 2. 행사를 운영진의 개인 비용으로 치루다보니 참가자 분들께 안내문, 주차권, 간식, 경품 등에 대해 만족스럽지 못한 행사가 된 것 같습니다. 이 점은 운영진 내에서도 깊게 반성하고 있으며 좋은 행사 환경을 마련할 수 있도록 운영진 모두가 노력하겠습니다. 3. 일부 참가자 분들께서 발표자 분들을 대상으로 비난을 하고 계십니다. 일부 발표자 분들은 여러분의 비난 댓글로 인해 마음에 상처를 입으셨습니다. PHP ...
PHP Fest 2009 설문 결과(보충)
PHP Fest 2009 행사에 참석해 주신 분들을 대상으로 한 설문 결과를 공유합니다. 10월 12일 공개한 설문 조사 결과가 다소 논란의 여지가 있기에 수정/보충하여 공개합니다. ( 아래 “설문 결과" 이미지를 클릭하세요. ) 더 자세한 내용은 설문 결과 PDT 문서를 읽어 보시기 바랍니다.
PHPeclipse 개발 환경 구축 방법
이클립스용 PHPeclipse ( http://www.phpeclipse.com/ ) 플러그인을 사용하여 PHP 개발 환경을 구축하는 방법을 살펴봅니다. PHPeclipse 개발 환경 구축 방법 View more documents from ooti xenonix.
[PHP5.3.0] Namespaces(네임스페이스)
PHP 5.3.0 에서는 아주 반가운 기능이 추가되었습니다. PHP는 버전 5로 올라오면서 본격적으로 OOP를 지원하고 있습니다. 이제는 클래스로 기능을 묶는 것이 일반화되었습니다. 그럼에도 불구하고 PHP에서는 왠지 부족함이 느껴졌습니다. 바로 네임스페이스가 없었습니다. 이 네임스페이스가 드디어 5.3.0 버전에서 추가되었습니다. 네임스페이스가 왜 필요한가 네임스페이스는 코드를 묶는 추상적인 개념으로 클래스를 파일이라고 한다면 네임스페이스는 디렉터리라고 할 수 있습니다. 클래스는 비슷한 기능을 하는 함수들을 하나로 묶어 놓은 것입니다. 예를 들면 class DB 에는 select(), insert(), delete(), update() 등 함수가 있을 수 있습니다. 네임스페이스는 DB 클래스가 어디에 속했는 지를 나타냅니다. 자바에는 package 라는 네임스페이스가 있습니다. PHP에서 클래스를 작성하다 보면 클래스 이름이 중복되어 곤란한 경우가 있습니다. PEAR 에는 DB 클래스가 있습니다. 그런데 Zeroboard XE 의 라이브러리에도 DB 클래스가 있습니다. 만약 PEAR 와 Zeroboard XE를 같이 사용한다면 아래 그림처럼 예상치 못한 문제가 발생할 수 있습니다. 네임스페이스를 이용하면 위 그림과 같은 문제를 해결할 수 있습니다. 네임스페이스 사용 방법 PHP 5.3.0 에서 추가된 네임스페이스를 사용하는 방법은 아래 소스코드처럼 네임스페이스로 붂고 싶은 곳에 namespace 를 추가하면 됩니다. namespace 키워드 뒤에 지정하고자 하는 네임스페이스를 작성하면 됩니다. 네임스페이스의 구분자는 \ 를 사용합니다. ( 자바에서는 .(점)을 사용하죠. ) 그러면 MyClass{ } 와 myFunction( ) 은 myNamespace\mySubNamespace 라는 네임스페이스에 묶이게 됩니다. MyClass 와 myFunction 을 사용하는 방법은 아래 소스코드와 같습니다. 주의할 점은 인스턴스를 생성하거나 함수를 호출할 때에는 네임스페이스 맨 앞에 \ 를 붙여야 합니다. 이것은 디렉터리에서 절대경로 ( cd \etc )와 같다고 보시면 됩니다. 이 절대경로의 개념은 ...

