2. PHP 클래스 형태
// 상속은 extends를 사용합니다.3. PHP4와 달리 객체를 나타낼 때 레퍼런스를 사용합니다. PHP4에서 &를 사용하여 레퍼런스를 지정할 수 있어나 내부에서 symbol table alias를 가지고 있습니다.
class HelloWorld extends ParentClass{
private $world;
public $hello;
// 생성자입니다.
function __construct($world) {
// 자신의 프로퍼티나 메소드를 호출하는 경우 $this를 사용합니다.
$this->world = $world;
// 부모의 생성자를 호출할 때는 parent를 사용할 수 있습니다.
parent::__construct();
}
function getHtml() {
return "Hello, ".$this->world."!";
}
}
4. 메소드의 Override를 지원합니다.
5. 기존에 exception이 발생하는 경우 die()를 사용하여 처리했습니다. PHP5에서는 throw를 사용하여 Exception을 발생시킬 수 있고,
throw new Exception('...');try/catch를 사용하여 Exception을 잡을 수 있습니다.
try {6. 디버깅하는 경우 스택을 따라가고 싶을 때 debug_trace()와 debug_print_backtrace()를 사용할 수 있습니다.
...
}catch(Exception $e) {
print($e->getMessage());
}
7. 예외를 사용하는 것보다는 예외 상황에서 이를 처리하는 코드를 사용하는것이 더 좋습니다.
8. 사용자 정의 예외도 만들 수 있습니다. 그러나, 사용자 정의 예외는 최대 5~7개정도가 좋으며 내부에서 예외를 구분하는 코드를 사용하는 편이 더 낳습니다.
class UserException extends Exception{}9. PHP에서 제공하는 예외를 사용자 정의로 바꾸는 것도 가능합니다.
class ErrorFromPHPException extends Exception{}원상 복귀할 때도 set_error_handler를 사용하면 됩니다.
function PHPErrorHandler($errno, $errstr, $errfile, $errline) {
throw new ErrorFromPHPException($errstr, $errno);
}
...
$oldhandler = set_error_handler('PHPErrorHandler');
fopen('/tmp/non-existent', 'r');
...
set_error_handler($oldhandler)10. PHP에서 클래스를 생성하고 메소드를 호출할 때, 메소드가 없는 경우 __call()가 호출됩니다. (책에서는 오버로딩 시 사용합니다. 메소드 매개변수가 다른 경우 내부에서 __call()에서 적절한 메소드를 체크하여 호출시킵니다.)
11. __autoload() 정의되어 있지않은 클래스를 초기화하려는 경우 호출됩니다. (include되지 않은 클래스를 자동으로 호출하려고 하는 경우)
출처: Manning, PHP in Action(Objects, Design, Agility) 보면서 요약한 내용입니다.
아주 익숙해 보이는 코드가 왠지 반갑군요. ㅎㅎ
답글삭제완전 C++인데 ㅋㅋ
답글삭제음.. 내가 보기엔 Java에 가까운데..
답글삭제php가 많이 발전을 했네요~ ㅎㅎ
답글삭제군에 있을 때 php 많이 썼었는데 그 때와 비교하면...^^
@지민아빠 - 2007/07/25 00:20
답글삭제앗~ php로 코딩하시나보군요 ^^
@쟤시켜 알바 - 2007/07/25 08:23
답글삭제옥똥 말대로 java에 더 가깝담.
@옥똥 - 2007/07/25 08:26
답글삭제php 애플리케이션도 만들 수 있다고 하더만 -_-;;
@리오 - 2007/07/25 09:43
답글삭제저도 학교 다닐때 주로쓰고 거의 안썼었는데..
어느새 객체의 향기가 가득하더군요 -_-;;;;
JAVA랑 더 비슷하지. 근데 난 C++이 먼저 떠올랐어 ㅋㅋ
답글삭제JAVA 본지가 100만년이라...
@쟤시켜 알바 - 2007/07/25 20:37
답글삭제ㅋㅋㅋ C#이 더 먼저 떠올랐을 듯 한데 ^^