ì�´ì œ PHPì—�서ë�„ Objective-Cì�˜ 아름다운 문법ì�„!
특징 ¶
- ObjCì�˜ ì •ì‹ ì�„ ì�´ì–´ë°›ì•„, ObjP ìž�체는 PHPì—� ì‚´ì§� ì–‘ë…�ì�„ 친 형태를 ë�ˆë‹¤.
- 즉, Objective-P와 순수 PHP 코드를 혼용해 ì‚¬ìš©í• ìˆ˜ 있다! (Just like we can mix up ObjC and pure C!)
- 컴파� 후�는 순수 PHP 코드가 �다.
- 즉, Objective-P와 순수 PHP 코드를 혼용해 ì‚¬ìš©í• ìˆ˜ 있다! (Just like we can mix up ObjC and pure C!)
- 개발ìž�ì�˜ 편ì�˜ë¥¼ ë�•는 Gin í”„ë ˆìž„ì›Œí�¬ê°€ ë�™ë´‰ë� ì˜ˆì •ì�´ë‹¤. (ì ‘ë‘�ì–´: GN)
Specification (Draft) ¶
Class ì„ ì–¸ ë°� ì •ì�˜ ¶
Objective-Jì�˜ 경우처럼, í�´ëž˜ìФì�˜ ì„ ì–¸ê³¼ ì •ì�˜ë¥¼ ë�™ì‹œì—� 한다. (사실 PHPì�˜ 구조ìƒ�, ì�´ëŸ´ 수 ë°–ì—� 없다.)
다만, @implementationë§Œ 사용하면 @interfaceê°€ 외로워하니까, ì�¸ìŠ¤í„´ìŠ¤ 변수ì�˜ ì„ ì–¸ì—�는 @interface를 사용하ë�„ë¡� í•˜ê³ , 메소드 ì„ ì–¸ ë°� ì •ì�˜ì—� @implementationì�„ 사용한다.
다만, @implementationë§Œ 사용하면 @interfaceê°€ 외로워하니까, ì�¸ìŠ¤í„´ìŠ¤ 변수ì�˜ ì„ ì–¸ì—�는 @interface를 사용하ë�„ë¡� í•˜ê³ , 메소드 ì„ ì–¸ ë°� ì •ì�˜ì—� @implementationì�„ 사용한다.
// í�´ëž˜ìФ ì„ ì–¸ ë°� ì •ì�˜
@interface MyFirstObjPClass : GNObject <GNSomeProtocol>
@private // 요건 비지빌리티 ì�¸ë””ì¼€ì�´í„°. 옵셔ë„�하다. :) ìƒ�략하면 기본값으로 @protected ì �ìš©.
$iStoreSomething;
@end
@implementation MyFirstObjPClass
+(int)tellMeTheTruth {
return 42;
}
- (void) doSomeTaskWithSomething:(int)$localIntegerVar {
// some magic happens...
}
@end
// �래스 사용
$myClass = [MyFirstObjPClass new];
[$myClass doSomeTaskWithSomething:42];
[$myClass release];
ì‹¤ì œ 구현 ¶
컴파ì�¼ ì�´í›„, 위 코드는 최종ì �으로 다ì�Œê³¼ ê°™ì�´ 변해야 한다. (PHP 5 ê°�ì²´ 모ë�¸)
GNAssert()ì�˜ 경우, ë‘� 번째 ì�¸ìž�로 @"문ìž�ì—´"ì�„ 받지만, ê²°ê³¼ì �으로는 컴파ì�¼ ì�´í›„ GNString으로 변해야 한다.
GNAssert()ì�˜ 경우, ë‘� 번째 ì�¸ìž�로 @"문ìž�ì—´"ì�„ 받지만, ê²°ê³¼ì �으로는 컴파ì�¼ ì�´í›„ GNString으로 변해야 한다.
class MyFirstObjPClass extends GNObject implements GNSomeProtocol {
private $iStoreSomething;
public static function tellMeTheTruth() {
return 42;
}
public function doSomeTaskWithSomething($localIntegerVar, $_objp_type_check=false) { // (void)
if($_objp_type_check===true) {
if(is_int($localIntegerVar)===false)
GNAssert(false, new GNString('ë”ê°€ ì�´ìƒ�하지 않아?'));
}
// some magic happens...
}
}
$myClass =MyFirstObjPClass::new(); // defined in GNObject
$myClass->doSomeTaskWithSomething(42, true); // Compiler automatically adds last argument!
$myClass->release(); // actually, does nothing unless you overrides it.










