2007년 7월 24일 화요일

2. Objects in PHP

1. PHP5에 들어오면서 객체 지향적 설계가 가능하게 되었습니다.

2. PHP 클래스 형태
// 상속은 extends를 사용합니다.
class HelloWorld extends ParentClass{
       
private $world;
       
public $hello;
       
       
// 생성자입니다.
       
function __construct($world) {
               
// 자신의 프로퍼티나 메소드를 호출하는 경우 $this를 사용합니다.  
                $this
->world = $world;

               
// 부모의 생성자를 호출할 때는 parent를 사용할 수 있습니다.
                parent
::__construct();
       
}
       
       
function getHtml() {
               
return "Hello, ".$this->world."!";
       
}
}
3. PHP4와 달리 객체를 나타낼 때 레퍼런스를 사용합니다. PHP4에서 &를 사용하여 레퍼런스를 지정할 수 있어나 내부에서 symbol table alias를 가지고 있습니다.

4. 메소드의 Override를 지원합니다.

5. 기존에 exception이 발생하는 경우 die()를 사용하여 처리했습니다. PHP5에서는 throw를 사용하여 Exception을 발생시킬 수 있고,
throw new Exception('...');
try/catch를 사용하여 Exception을 잡을 수 있습니다.
try {
   ...
}catch(Exception $e) {
   print($e->getMessage());
}
6. 디버깅하는 경우 스택을 따라가고 싶을 때 debug_trace()와 debug_print_backtrace()를 사용할 수 있습니다.

7. 예외를 사용하는 것보다는 예외 상황에서 이를 처리하는 코드를 사용하는것이 더 좋습니다.

8. 사용자 정의 예외도 만들 수 있습니다. 그러나, 사용자 정의 예외는 최대 5~7개정도가 좋으며 내부에서 예외를 구분하는 코드를 사용하는 편이 더 낳습니다.
class UserException extends Exception{}
9. PHP에서 제공하는 예외를 사용자 정의로 바꾸는 것도 가능합니다.
class ErrorFromPHPException extends Exception{}
function PHPErrorHandler($errno, $errstr, $errfile, $errline) {
   throw new ErrorFromPHPException($errstr, $errno);
}
...
$oldhandler = set_error_handler('PHPErrorHandler');
fopen('/tmp/non-existent', 'r');
...
원상 복귀할 때도 set_error_handler를 사용하면 됩니다.
set_error_handler($oldhandler)
10. PHP에서 클래스를 생성하고 메소드를 호출할 때, 메소드가 없는 경우 __call()가 호출됩니다. (책에서는 오버로딩 시 사용합니다. 메소드 매개변수가 다른 경우 내부에서 __call()에서 적절한 메소드를 체크하여 호출시킵니다.)

11. __autoload() 정의되어 있지않은 클래스를 초기화하려는 경우 호출됩니다. (include되지 않은 클래스를 자동으로 호출하려고 하는 경우)


출처: Manning, PHP in Action(Objects, Design, Agility) 보면서 요약한 내용입니다.

댓글 10개:

  1. 아주 익숙해 보이는 코드가 왠지 반갑군요. ㅎㅎ

    답글삭제
  2. 음.. 내가 보기엔 Java에 가까운데..

    답글삭제
  3. php가 많이 발전을 했네요~ ㅎㅎ

    군에 있을 때 php 많이 썼었는데 그 때와 비교하면...^^

    답글삭제
  4. @지민아빠 - 2007/07/25 00:20
    앗~ php로 코딩하시나보군요 ^^

    답글삭제
  5. @쟤시켜 알바 - 2007/07/25 08:23
    옥똥 말대로 java에 더 가깝담.

    답글삭제
  6. @옥똥 - 2007/07/25 08:26
    php 애플리케이션도 만들 수 있다고 하더만 -_-;;

    답글삭제
  7. @리오 - 2007/07/25 09:43
    저도 학교 다닐때 주로쓰고 거의 안썼었는데..

    어느새 객체의 향기가 가득하더군요 -_-;;;;

    답글삭제
  8. JAVA랑 더 비슷하지. 근데 난 C++이 먼저 떠올랐어 ㅋㅋ

    JAVA 본지가 100만년이라...

    답글삭제
  9. @쟤시켜 알바 - 2007/07/25 20:37
    ㅋㅋㅋ C#이 더 먼저 떠올랐을 듯 한데 ^^

    답글삭제