在如今信息爆炸的时代,越来越多的网站基于php技术进行开发,但是随着移动互联网的普及,诸多企业也在开发移动端应用。然而,php技术与ios开发并不兼容,这就需要将php转换为可在ios端使用的语言。本文将从如何将php转换为ios语言以及如何在ios端使用php进行开发这两个方面进行阐述。
首先,将php转换为ios语言需要借助于php转objc的框架。其中较为常见的有:php2objc、P2O以及PHPObjcMsg等。以php2objc为例,它可以将php的类转换为OC的类,并提供了php到oc的类型映射以及静态变量的初始化等功能。
// 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."; } } // 转换后的OC代码示例 @interface Person : NSObject + (id) name; @property(retain, nonatomic) NSNumber *age; + (NSString *) SEX_MAN; + (NSString *) SEX_WOMAN; - (id) initWithAge: (NSNumber *)age; - (NSString *) sayHello; @end
当然,在使用php2objc框架转换时需要注意几个问题。首先,php2objc框架不支持向OC里导入php文件,所以需要先将php文件转成php命令行可执行文件后再导入;其次,由于php和OC语言的语法存在一定的差异,所以在转换过程中可能会出现一些语法错误,需要对这些错误进行人工修复。
其次,当php转换为ios语言后,可以利用原生的NSURLConnection等iOS提供的网络请求工具类,将数据从服务器上取来,并通过json的方式进行解析。例如在以下代码中,我们可以利用NSURLConnection获取到服务器返回的数据,并通过NSJSONSerialization将json对象进行转换。
- (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]; }
最后,当数据从服务器获取到,进行解析后,可以将解析结果进行使用。例如在iOS开发中,我们可以通过UITableView来展示获取到的数据列表。在以下代码中,我们使用将网络请求的结果赋值给数组data后,然后通过UITableView的dataSource协议来显示列表。
- (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语言转换为与OC语言进行兼容的形式,在iOS中进行使用,从而实现php与iOS的互通。