ì´ì œ PHPì—ì„œë„ Objective-Cì˜ ì•„ë¦„ë‹¤ìš´ 문법ì„! == 특징 == * ObjCì˜ ì •ì‹ ì„ ì´ì–´ë°›ì•„, ObjP ìžì²´ëŠ” PHPì— ì‚´ì§ ì–‘ë…ì„ ì¹œ 형태를 ëˆë‹¤. * 즉, Objective-P와 순수 PHP 코드를 혼용해 ì‚¬ìš©í• ìˆ˜ 있다! (Just like we can mix up ObjC and pure C!) * ì»´íŒŒì¼ í›„ì—는 순수 PHP 코드가 ëœë‹¤. * 개발ìžì˜ 편ì˜ë¥¼ ë•는 Gin í”„ë ˆìž„ì›Œí¬ê°€ ë™ë´‰ë ì˜ˆì •ì´ë‹¤. (ì ‘ë‘ì–´: GN) == Specification (Draft) == === Class ì„ ì–¸ ë° ì •ì˜ === Objective-Jì˜ ê²½ìš°ì²˜ëŸ¼, í´ëž˜ìŠ¤ì˜ ì„ ì–¸ê³¼ ì •ì˜ë¥¼ ë™ì‹œì— 한다. (사실 PHPì˜ êµ¬ì¡°ìƒ, ì´ëŸ´ 수 ë°–ì— ì—†ë‹¤.) 다만, @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으로 변해야 한다. {{{ 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 = new MyFirstObjPClass(); $myClass->doSomeTaskWithSomething(42, true); // Compiler automatically adds last argument! $myClass->release(); // actually, does nothing unless you overrides it. }}}