在如今信息爆炸的時代,越來越多的網(wǎng)站基于php技術(shù)進行開發(fā),但是隨著移動互聯(lián)網(wǎng)的普及,諸多企業(yè)也在開發(fā)移動端應(yīng)用。然而,php技術(shù)與ios開發(fā)并不兼容,這就需要將php轉(zhuǎn)換為可在ios端使用的語言。本文將從如何將php轉(zhuǎn)換為ios語言以及如何在ios端使用php進行開發(fā)這兩個方面進行闡述。
首先,將php轉(zhuǎn)換為ios語言需要借助于php轉(zhuǎn)objc的框架。其中較為常見的有:php2objc、P2O以及PHPObjcMsg等。以php2objc為例,它可以將php的類轉(zhuǎn)換為OC的類,并提供了php到oc的類型映射以及靜態(tài)變量的初始化等功能。
// PHP代碼示例 class Person { public static $name = "php"; public $age; const SEX_MAN = "man"; const SEX_WOMAN = "woman"; public function __construct($age) { $this->age = $age; } public function sayHello() { return "Hello " . $this->name . ", I am " . $this->age . " years old."; } } // 轉(zhuǎn)換后的OC代碼示例 @interface Person : NSObject + (id) name; @property(retain, nonatomic) NSNumber *age; + (NSString *) SEX_MAN; + (NSString *) SEX_WOMAN; - (id) initWithAge: (NSNumber *)age; - (NSString *) sayHello; @end
當(dāng)然,在使用php2objc框架轉(zhuǎn)換時需要注意幾個問題。首先,php2objc框架不支持向OC里導(dǎo)入php文件,所以需要先將php文件轉(zhuǎn)成php命令行可執(zhí)行文件后再導(dǎo)入;其次,由于php和OC語言的語法存在一定的差異,所以在轉(zhuǎn)換過程中可能會出現(xiàn)一些語法錯誤,需要對這些錯誤進行人工修復(fù)。
其次,當(dāng)php轉(zhuǎn)換為ios語言后,可以利用原生的NSURLConnection等iOS提供的網(wǎng)絡(luò)請求工具類,將數(shù)據(jù)從服務(wù)器上取來,并通過json的方式進行解析。例如在以下代碼中,我們可以利用NSURLConnection獲取到服務(wù)器返回的數(shù)據(jù),并通過NSJSONSerialization將json對象進行轉(zhuǎn)換。
- (void)requestWithURLString:(NSString *)urlString{ NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if(!error){ id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; // in main thread dispatch_async(dispatch_get_main_queue(), ^{ // todo something with json }); } }]; [task resume]; }
最后,當(dāng)數(shù)據(jù)從服務(wù)器獲取到,進行解析后,可以將解析結(jié)果進行使用。例如在iOS開發(fā)中,我們可以通過UITableView來展示獲取到的數(shù)據(jù)列表。在以下代碼中,我們使用將網(wǎng)絡(luò)請求的結(jié)果賦值給數(shù)組data后,然后通過UITableView的dataSource協(xié)議來顯示列表。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return data.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellId"]; if(!cell){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellId"]; } NSDictionary *dic = data[indexPath.row]; cell.textLabel.text = dic[@"name"]; cell.detailTextLabel.text = dic[@"date"]; return cell; }
總之,PHP雖然不能在iOS中直接使用,但利用php2objc等工具,可以將php語言轉(zhuǎn)換為與OC語言進行兼容的形式,在iOS中進行使用,從而實現(xiàn)php與iOS的互通。