北京总部

IOS菜鸟入门:IOS 学习第一天

IOS菜鸟入门:IOS 学习第一天

2017-01-17

IOS第一天学习需要学习什么内容呢? 1、了解main函数,  UIApplication是初始化程序的核心,它接受4个参数。  其中argc和argv两个参数来自于main()接受的两个参数;另外两个String型参数分别      表示程序的主要类(principal class)和代理类(delegate class) 2、plist xml格式文件通常用于储存用户设置      pch  预编译文件头      xib  Interface Builder 的图形界面设计文档      StoryBoard是iOS 5的新特征,旨在代替历史悠久的NIB/XIB  3、AppDelegate.m 妙用  类似于监听接口        应用程序启动后,委托调用applicationDidFinishLaunching方法      应用程序要完全退出, 委托调用applicationWillTerminate方法 4、viewcontroller      创建viewcontroller时,执行loadview -> viewDidLoad     内存警告,后台,会执行didReceiveMemoryWarning -> viewDidUnLoad;如果viewcontroller当前正在显示(前台)只执行didReceiveMemoryWarning 5、IBOutlet   对编译器而言只是一个标记,额外retain一次,所以需要release.      IBoutlet修饰的字段可以和InterfaceBuilder里相应控件相关联;       IBaction修饰的方法可以和InterfaceBuilder里控件的相应动作相关联。 6、addSubview 是将view加到所有层的最顶层 7、insertSubView可以控制它添加到父视图的哪一层      makeKeyAndVisible作用被使用对象的主窗口显示到屏幕的最前端。     hiddenUIView方法隐藏这个窗口 8、@protocol MyProtocol       -(void) firstMethod     @end 协议,OC 没有多继承,不过可以通过协议来委托或者叫代理 9、@property (nonatomic, retain) Engine* engine; 代码生成机制 ,生成不同类型的getter/setter函数,接口类使用      @synthesize   engine, 合成器,实现类里面使用 10、initWithFrame  没用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化        视图加载nib文件,从nib中加载对象实例时, 使用 initWithCoder初始化这些实例对象 11、  respondsToSelector该方法询问对象以确定其是否能够响应某个特定的消息         if([car respondsToSelector @selector(setWheel)] == YES])          {         } 12、viewDidLoad:在视图加载后被调用        viewWillAppear:视图即将可见时调用。默认情况下不执行任何操作        viewDidAppear: 视图已完全过渡到屏幕上时调用        viewWillDisappear:视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作        viewDidDisappear:视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作 13、initWithFrame  没用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化        视图加载nib文件,从nib中加载对象实例时, 使用 initWithCoder初始化这些实例对象 14、loadNibNamed  动态加载视图        NSArray *nibViews=[[NSBundle mainBundle] loadNibNamed:@"Empty" owner:self options:nil];    15、1)componentsSeparatedByString:截取指定字符串;         2) pathForResource:获取程序运行时目录         3)  objectAtIndex:获取当前索引的字符串;         4)  rangeOfString:获取指定短字符串在长字符串中的开始,结尾索引值;        5) stringWithContentsOfFile:按行读取文件         6) componentsSeparatedByString:@"           "];换行分割字符串;         7) NSEnumerator *nse = [lines objectEnumerator];        将数组转换为NSEnumerator,可向前读取数据;            nextObject 读取下一行数据 16、-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例         -(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例  17、创建一个UIImageView对象有五种方法        UIImageView *imageView1 = [[UIImageViewalloc] init];        UIImageView *imageView2 = [[UIImageViewalloc] initWithFrame:(CGRect)];        UIImageView *imageView3 = [[UIImageView alloc] initWithImage:(UIImage *)];        UIImageView *imageView4 = [[UIImageView alloc] initWithImage:(UIImage *) highlightedImage:(UIImage *)];        UIImageView *imageView5 = [[UIImageView alloc] initWithCoder:(NSCoder *)];        常用的是前边三个。 18、UIScreen可以获取设备屏幕的大小        UIView对象定义了一个屏幕上的一个矩形区域,同时处理该区域的绘制和触屏事件,一个UIView的实例可以包含和管理若干个子UIView        UIWindow对象是所有UIView的根,管理和协调的应用程序        UIViewController对象负责管理所有UIView的层次结构,并响应设备的方向变化 19、@class 当一个类需要引用另一个类         demo.h  @class Rectangle;        demo.m import Rectangle 20、UISwitch开关、        UIButton按钮、        UISegmentedControl分段控件、        UISlider滑块、        UITextField文本字段控件、        UIPageControl分页控件 21、UIControlEventTouchDown        单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。        UIControlEventTouchDownRepeat        多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。        UIControlEventTouchDragInside        当一次触摸在控件窗口内拖动时。        UIControlEventTouchDragOutside        当一次触摸在控件窗口之外拖动时。        UIControlEventTouchDragEnter        当一次触摸从控件窗口之外拖动到内部时。        UIControlEventTouchDragExit        当一次触摸从控件窗口内部拖动到外部时。        UIControlEventToucUpInside        所有在控件之内触摸抬起事件。        UIControlEventTouchUpOutside        所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。        UIControlEventTouchCancel        所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话da'duaUIControlEventTouchChanged        当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时        发送。        UIControlEventEditingDidBegin        当文本控件中开始编辑时发送通知。        UIControlEventEditingDidEnd        当文本控件中编辑结束时发送通知。        UIControlEventEditingChanged        当文本控件中的文本被改变时发送通知。        UIControlEventEditingDidOnExit        当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。        UIControlEventAlltouchEvents        通知所有触摸事件。        UIControlEventAllEditingEvents        通知所有关于文本编辑的事件        UIControlEventAllEvents        通知所有事件。 22、SUserDefaults用于存储数据量小的数据,例如用户配置。并不是所有的东西都能往里放的,只支持:NSString,NSNumber, NSDate, NSArray, NSDictionary. 23、NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];        [defaults objectForKey:key]; 提取        [defaults setObject:item forKey:key]; 设置        [defaults removeObjectForKey:key]; 移除 24、resignFirstResponder 触发键盘隐藏 25、UITabBarController通常作为整个程序的rootViewController ,常见的创建地方就是在application delegate中的 applicationDidFinishLaunching:方法 了解更多IOS菜鸟入门欢迎登陆中软国际教育集团技术知识库!

更多>
iOS入门学习建议

iOS入门学习建议

2017-01-16

作为iOS初学者的你,相信在未来的开发之旅中,也会经历一些困惑与喜悦。这里,先送上一句鼓励的话:“含泪播种,必将微笑收割。”当你自己精心开发的App发布到AppStore的那一天,蓦然回首,你会发现,过去付出的一切,都是值得的! 首先: 第一点:把你的obj-c语言基础打好,在学习obj-c之前最好学一下c/c++,除此之外最好各课都要设计了解些,xml,json,mysql,html,js! 第二点:对苹果产品了解些!你要开发什么东西,就要对那些东西了解!比如,苹果手机的分辨率,iPhone5以上(640*1136),iPhone4/4s(640*960)! 如果你连这些都不知道你还是别出来混了!这些都要耳熟能详,张口就来!(说得这个分辨率,我碰到好多培训出来的新手,连@2x的概念都没有,所谓的一倍图和二倍图,具体请看博客:iphone关于单倍图和二倍图(导航 背景 变高),如何让你在开发过程中少犯这种低级错误!比如你参加了工作,美工给你切好了图,你做工程的时候发现这个图被拉伸了或者压缩了,你不知道原因,以为程序写错了,就请教老员工!这时候别人会怎么看你?你懂的!)我说一下可能的原因:首先检查切图,看切图的分辨率,按我上面说得动动脑袋算一算!如果切图不合理,要求美工重新切! 第三点:经验之谈,初期多看别人写的代码,不是说要模仿(不好听的话就是抄别人的代码),从中你就可以学到很多东西!遇见不懂的多看官方文档,或者百度谷歌。多去code4app下一些源码来看!有问题多看外国网站(这个网站很强大,基本上什么问题都能搜到)和cocoaChina!(别有问题问同事,多上网查,网上什么都有,对的错的看你怎么分辨了)! 第四点:有人问用纯代码好还是xib?有人说用纯代码写效率高!请问你验证过吗?再请问你会用xib写吗?如果不会请收回那句话!因为你自己都不会写!官方的例子都还是xib呢! 有人说用xib托好,方便效率也高!那请问你会纯代码吗?你只会托不会纯代码写那就不行了!一些属性什么的不知道那程序是没法写的! 所以各有各的好处,看个人习惯,只要你能够实现效果功能,用什么都无所谓,关键是实现的方法要好要高! 第五点:代码质量,看别人代码是头疼的,尤其是注释很少的程序,如果程序需要维护,你最好注释些,好让别人知道你写的什么,不然后面人会骂死你!还有程序要遵循mvc思想,你用了就知道好处了! 第六点:写app肯定要与后台交互,前台需要什么不一定后台都能给全!要及时跟后台沟通!避免一些没必要的错误。一定要有耐心! 第七点:开发app之前你要了解各种好用的库,还有各种第三方!请参考:中软国际教育集团技术知识库

更多>
iOS开发中两个常见问题的处理

iOS开发中两个常见问题的处理

2017-01-16

(一) “Unknown class XXViewController in Interface Builder file.” 问题处理 最近在静态库中写了一个XXViewController类,然后在主工程的xib中,将xib的类指定为XXViewController,程序运行时,报了如下错误: Unknown class XXViewController in Interface Builder file.  之前也遇到这个问题,但已记得不太清楚,所以又开始在stackoverflow上找答案。 其实这个问题与Interface Builder无关,最直接的原因还是相关的symbol没有从静态库中加载进来。这种问题的处理就是在Target的”Build Setting”–>“Other Link Flags”中加上”-all_load -ObjC”这两个标识位,这样就OK了。 (二)关于Unbalanced calls to begin/end appearance transitions for …问题的处理 我们的某个业务有这么一个需求,进入一个列表后需要立马又push一个web页面,做一些活动的推广。在iOS 8上,我们的实现是一切OK的;但到了iOS 7上,就发现这个web页面push不出来了,同时控制台给了一条警告消息,即如下: Unbalanced calls to begin/end appearance transitions for ...  在这种情况下,点击导航栏中的返回按钮时,直接显示一个黑屏。 我们到stackoverflow上查了一下,有这么一段提示:       occurs when you try and display a new viewcontroller before the current view controller is finished displaying.  意思是说在当前视图控制器完成显示之前,又试图去显示一个新的视图控制器。 于是我们去排查代码,果然发现,在viewDidLoad里面去做了次网络请求操作,且请求返回后就去push这个web活动推广页。此时,当前的视图控制器可能并未显示完成(即未完成push操作)。       Basically you are trying to push two view controllers onto the stack at almost the same time.  当几乎同时将两个视图控制器push到当前的导航控制器栈中时,或者同时pop两个不同的视图控制器,就会出现不确定的结果。所以我们应该确保同一时间,对同一个导航控制器栈只有一个操作,即便当前的视图控制器正在动画过程中,也不应该再去push或pop一个新的视图控制器。 所以最后我们把web活动的数据请求放到了viewDidAppear里面,并做了些处理,这样问题就解决了。 了解更多IOS开发常见问题处理欢迎登陆中软国际教育集团技术知识库!

更多>
iOS入门基础学习

iOS入门基础学习

2017-01-13

在之前一篇文章中主要介绍了IOS入门学习的操作系统层次、各层次所负责的功能,还有进行iOS开发需要掌握的一些基本工具,以及很重要很重要的MVC模式。 今天一块学习一下objective-c语言的基础知识吧,语言嘛,所谓一通百通,如果你有c语言的开发基础是最好的,因为objective-c语言就是c语言的一种变形吧,当然,如果你有其他语言的开发经验,其实学起来还是很快的。 关于一门开发语言,那个要学习的东西真是太多太多了,这儿我就稍微介绍点基础的吧。 1、当我们建立一个工程的时候,我们可以看到.h和.m文件,.h文件里面建立的对象和方法都是public属性,.m文件里创建的对象和方法是private属性,在.m文件中添加私有的@interface和@end,在这个里面可以创建一些实例对象,都是私有的。 2、当我们要创建一个string类型的对象时:写法如下: @property (strong ,nonatomic)NSString *string; 以@property打头,strong/weak定义了该string类型对象的指针,nonatomic代表该类型是非原子的。后面会有介绍。 3、当我们创建了这样一个实例对象以后,我们需要使用如下代码: @synthesize string = _string; 这段代码就代表完成了该string类型的setter和getter方法,并且返回实例变量。 _string 用作它的返回实例变量。 4、当指针指向一个对象时,我们可以使用特殊的类型:id或者使用静态的类型(比如:UIButton *),id可以代替任何不清楚的类型。 5、调用objective-c方法的时候需要使用[]; 6、调用setter或者getter方法的时候,用点方法,比如:self.display.text; 7、把log输出到控制台使用NSLog()方法; 8、使用一个常量的NSString类型,要用@“”这样的格式,比如:@“string”; 9、使用alloc和init来为你的对象在内存中分配空间。 #import一个文件的.h文件来引用到另一个类中。 关于strong VS weak strong:保持这个对象一直在堆栈中,直到我的指针不再指向它; 当我把我的指针设为nil的时候,这样我就不再指向它了; 或者当我自己已经被从堆栈中移出的时候,这样我也不能再指向它了。 weak:只要有strong类型的指针指向它,就一直保持它在堆栈中。 关于nil 一个对象的指针没有指向任何东西,就是nil; 比如: id obj = nil; NSString *string = nil; 在原始类型(int、double)中的作用就相当于0; 可以给nil发送消息,如果该方法有返回值的话,那么返回的就是0; 关于实例方法和类方法 实例方法以减号“-”开头,比如: - (void)getMyName; 类方法以加号“+”开头,比如: + (id)alloc; 实例方法就是正常的实例方法,就好像普通方法一样,类方法是创建和功能方法; 实例方法的调用方法:[ method]; 类方法的调用方法:[Class method]; 在实例方法中: self:表示我的实现(implementation); super:表示我父类的实现; 在类方法中: self:表示这个类的类方法; super:表示这个类父类的类方法; 何时使用id 当我们可能从另一个类接收到一个集合的对象的时候,而且我们还不确定在发送过来之前这些对象到底是什么类型的时候。 关于Foundation框架 包含以下内容: NSObject、NSString、NSMutableString、NSNumber、NSValue、NSData、NSDate、NSArray、NSMutableArray、NSDictionary、NSMutableDictionary等等,Foundation框架是基础框架之一。 关于框架的相关知识大家可以参考:http://blog.csdn.net/weasleyqi/article/details/9230919 关于Property List 这里的property List主要是表示一个集合,包含以下的类: NSArray, NSDictionary, NSNumber, NSString, NSDate, NSData NSDictionary是一个键值对类型; 关于NSUserDefaults 1、是一个小型的property List存储; 2、它是一个基础版的NSDictionary,存在于你的应用程序的lunches里。 3、一般用于存储用户的偏好设置这样小的事件。 4、通过standardUserDefaults类方法来读写数据, 比如:[[NSUserDefaults standardUserDefaults] setArray:rvArray forKey:@“RecentlyViewed”]; 记得每次写之后要进行同步操作: [[NSUserDefaults standardUserDefaults] synchronize]; 其实iOS入门学习还是很简单的,不要被奇怪的语法所吓到,等你用的多的时候你会发现,原来iOS是如此的好学。。。。 大家加油~~~

更多>
iOS入门学习详解

iOS入门学习详解

2017-01-13

ios学习起来并没有想象中的那么困难,只不过是你想要开发ios的话,成本相对比较高吧,在windows里面装虚拟机的时代我是体验过的,那个开发起来简直就是苦不堪言啊,那个宕机的速度真是分分钟的事,reset已经被用的如火纯清了,这样你就需要一台mac,有了mac还不够,总不能全部用模拟器开发吧,像定位啊之类的,还是需要实机来测试的,模拟器跟实机的差别还是挺大的。当然也没必要开发之前就买一个帐号,毕竟99刀一年呢,也挺贵的,可以到开发的后期再买。 好了,废话不多说,开始学习ios了。。。 关于iOS的介绍就不用讲了。。这个随便去搜一下也有一大堆说的,我们先从iOS的系统层次开始说起: 从上到下iOS分为4层,理解这4层的作用对于我们编程的作用相当大。 Core OS:该层主要包含一些操作系统的内核、文件系统、安全性、证书之类的,一般我们很少接触该层。 Core Services:该层主要包含跟网络相关的东西,还有数据库、线程、电话簿、网络服务等,该层为核心服务层。 Media:看到这名字也知道,该层主要是跟多媒体相关的,包含视频、音频、图片、pdf、OpenAL、OpenGL等。 Cocoa Touch:该层为操作系统的最顶层,该层包含了构建iOS程序的关键framework,还有多任务啊、标准的view controller啊等等。 这边只是粗略的讲一下,有兴趣的可以去搜索更多的更详细的资料。   学习iOS开发,那就要知道开发iOS程序需要使用的常识性东西: 开发工具是XCode,Instruments。 Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具。这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据。这样,Instruments 可以帮你更好的理解应用程序和操作系统的行为。  开发语言:Objective-c; 主要框架:Foundation、UIKit; 设计模式:MVC。   关于iOS中的MVC模式: MVC成员:Model、View、Controller。 Model:你的程序是什么(并不是你如何展示出来); Controller:你的Model如何展现给用户(UI逻辑); View:Controller的仆人,展示Controller想展示的东西。 先看下面这张图,然后来理解MVC之间的通信: 在IOS的MVC模式当中,Controller占中心地位,从图中可以看出MVC三个成员之间互相是怎么通信的。 ①Controller在任何时候都可以直接跟Model进行通信; ②Controller也可以直接跟View进行通信; ③Model和View之间相互不能通信; ④View如何跟Controller进行通信? Controller在其本身放置一个target,然后在View上放一个action,当UI发生变化的时候,View就发送这个action。 有时候,View需要跟Controller进行同步,Controller就把自己设置为View一个delegate(委托),这样就可以执行Controller里的should、will、did等同步函数了。 View对自己展示的数据没有拥有权,即View是不拥有数据的。如果有需要的时候,他们会通过一个协议来要求。  Controller几乎永远都是那个数据源(不是Model); ⑤Controller为View解释或者格式化Model的信息。 ⑥Model是UI无关的。 如果Model有信息要更新,Model会使用像广播机制一样的"radio station",来通知Controller,然后有必要的话,Controller会去通知View进行相应的操作。 本次先介绍iOS的系统层次跟MVC模式的相关知识,下次简单的介绍下Objective-c语言。 了解更多IOS入门学习知识欢迎持续关注中软国际技术知识库

更多>
java入门学习:Java中的main()方法详解

java入门学习:Java中的main()方法详解

2017-01-12

在Java入门学习中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。 在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下: public class HelloWorld { public static void main(String args[]) { System.out.println("Hello World!"); } } 一、先说类: HelloWorld 类中有main()方法,说明这是个java应用程序,通过JVM(java虚拟机)直接启动运行的程序。 既然是类,java允许类不加public关键字约束,当然类的定义只能限制为public或者无限制关键字(默认的)。 二、再说main()方法 main()方法的声明为:public staticvoid main(String args[])。必须这么定义,这是Java的规范。 为什么要这么定义,和JVM的运行有关系。 当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。 由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是 通过类名直接调用因此需要是限制为publicstatic。 对于java中的main方法,JVM有限制,不能有返回值,因此返回值类型为void。 main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和Sun Java规范范例中mian参数名保持一致,取名为args。 因此,main()方法定义必须是:“public static voidmain(String[] args)” 学习更多java入门知识请访问中软国际技术知识库!

更多>
java入门:8张图助你理解Java

java入门:8张图助你理解Java

2017-01-11

JAVA入门想一下子就理解Java可不是容易的,看了这八张图希望对你有所帮助。   一图胜千言,8张图助你理解java: 1、字符串不变性        下面这张图展示了这段代码做了什么         String s = "abcd";s = s.concat("ef"); 2、equals()方法、hashCode()方法的区别        HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于:        如果两个对象相等(equal),那么他们一定有相同的哈希值。        如果两个对象的哈希值相同,但他们未必相等(equal)。 3、Java异常类的层次结构        图中红色部分为受检查异常。它们必须被捕获,或者在函数中声明为抛出该异常。 4、集合类的层次结构      注意Collections和Collection的区别。(Collections包含有各种有关集合操作的静态多态方法) 5、Java同步      Java同步机制可通过类比建筑物来阐明。 6、别名      别名意味着有多个变量指向同一可被更新的内存块,这些别名分别是不同的对象类型。 7、堆和栈      图解表明了方法和对象在运行时内存中的位置。 8、Java虚拟机运行时数据区域      图解展示了整个虚拟机运行时数据区域的情况。 如果您觉得上面的内容帮助到了你,你还想了解更多java入门知识,欢迎访问中软国际教育集团官网技术知识库!

更多>
PHP入门学习:现在写 PHP,你应该知道这些

PHP入门学习:现在写 PHP,你应该知道这些

2017-01-10

如果你正在进行PHP入门学习,那么下面这些关于PHP的入门知识你应该知道哦! 首先你应该是在用 PHP 5.3 以上的版本,如果 PHP 版本在这之下,是时候该升级了。如果有条件,最好使用最新的版本。 1.PSR 很多人以为 PSR 只是做一些规范代码风格等无关痛痒的事情,但其实远不止此。 PSR 的一系列标准文档由 php-fig (PHP Framework Interop Group)起草和投票决议,投票成员中有一些主流框架和扩展的作者,包括 Laravel、Symfony、Yii等等。 按照其官网的说法,这个组织的目的并不是告诉你你应该怎么做,只是一些主流的框架之间相互协商和约定。但是我相信这些框架和扩展中总会有你用到的。 PSR 目前通过的共有 6 份文档: 0:自动加载(主要是针对 PHP 5.3 以前没有命名空间的版本) 1:编码规范 2:编码风格推荐 3:Log 结果 4:自动加载更细(在出现命名空间后有很大的改变) 7:HTTP 消息接口 目前在起草(Draft)中的还有 PSR-5(PHPDoc Standard)、PSR-6(Cache)等。5 和 6 没有出现在以上的列表中,是因为还没有投票通过。 我相信随着标准的不断更新,你会发现研究这些约定对你也是很有裨益的,虽然未必什么都要遵守。 2.Composer composer 和 Pear、Pecl 都不同,它不仅仅是用于安装扩展,更重要的是定义了一种现代 PHP 框架的实现和扩展管理的方法。类似 node.js 的 npm、Python 的 pip 但又比以上做的更多。 composer 的核心是实现扩展的标准安装和类的自动加载。通过 packagist.org 这个平台,无数的扩展组件可以被很方便的引入,目前比较知名的 PHP 扩展都可以通过 composer 安装了。而调用仅仅只需要加载一个 autoload.php 的文件即可。 composer 是通过 spl_autoload_register 方法注册一个自动加载方法实现扩展类和文件的加载的,当然这中间 composer 也做了一个优化。 我们都知道 PHP 引入文件要通过 include 和 require 实现,这其实写起来并不好看。 PHP 5.3 提供了命名空间,这本来和文件引入也不相干。但是 composer 实现了 PSR-4(在老版本的 PHP 上是 PSR-0),使用 use 时通过调用 spl_autoload_register 实现的方法在调用时加载所需要的类,在写法上类似 Python 的 import,即美观也起到了按需加载、延迟加载的作用。 3.php-cs-fixer 这个工具的作用是按照 PSR-1 和 PSR-2 的规范格式化你的代码,还有一些可选的编码风格是 Symfony 的规范。 可能有人觉得纠结代码风格的问题其实没有特别大的必要。要说好处我也说不上来,如果你觉得编程不仅仅是一份工作,那这就跟你收拾房间一样,邋遢的房间不影响你吃饭睡觉,但干净的看起来更舒服。如果要和别人合作,那这件事情就更重要了。 4.PsySH PsySH 类似 Python 的 IDLE 的一个 PHP 的交互运行环境。这个是我在 Laravel 中发现的,Laravel 5 的 artisan tinker 的功能是通过它来实现的。Laravel 4 中用的是另外一个项目: boris 。 这个主要是在平时测试一些 php 的简单的函数和特性的时候可以方便使用。遇到一些不确定的事情、比如 empty 的使用等,可以用它来做些测试。 5.一些框架和组件 框架 我比较喜欢的是 Laravel,目前公司在用的是 Yii2,我关注的有 Symfony 以及 Phalcon (C语言实现)。用什么不用什么,主要是喜好,有时候也由不得自己选择,但研究一下,多一分了解也未尝不可。 提到 Laravel 很多人都会立马想到 Ruby on Rails。我想模仿或者抄袭这都不是主要的目的,主要的目的是提供给开发者一个更好的工具。Laravel 好在它有一个不一样的路由控制(不带 Action 后缀或前缀的),有一个好用的 ORM (Eloquent),好用的模板引擎 (Blade) 亦或有一个颜值比较高的文档(社区看到的话)等等。 强大有时候也会被人诟病庞大,但这在于你需要了解自己项目的中长期规划,项目现在的大小以及未来的大小及承载。 Larval 的核心实现是一个容器(Container)以及 PHP 的反射类( ReflectionClass )(Yii 2 也是一样)。要理解这些,多看文章和文档的同时,也可以看看源码。 Symfony 2 提供了很多组件。 http-kernel 和 http-foundation 在 Laravel 中也有被继承过来直接使用。它是值得了解和学习的。 CodeIgniter 是一个小巧而强大的框架。虽然 CI 并没有使用 Composer 组件的方式进行开发,但 3.0 以后的版本也加入了 Composer 的支持(这无非就是多一个 vendor 的目录,引入 autoload.php )的文件。 ORM ORM 亦或 Active Record 我觉得还是需要的。也许有人认为 PHP 就是一个模板引擎、就应该手写 SQL 。不要被这些话所困扰。 CodeIgniter 中 Active Record 的实现方式很轻巧,但对于 CI 本身的体量来说,已经是很好用的了。 Laravel 实现的 Eloquent 我是很喜欢的,也可以集成到别的项目中去。Symfony 2 使用的是 Doctrine ,这个项目也值得关注。Yii 2 也有自己的一套实现方式。 模板引擎 模板引擎需要做三件事情: 1、变量值的输出(echo), 2、条件判断和循环(if ... else、for、foreach、while) 3、引入或继承自其他文件 Laravel 实现的 Blade 是一个比较轻量好用的模板引擎。不过目前并不是很好能够引入到其他框架中。十一的时候闲来无事试图将其引入到 Yii 2 中,现在还只是简单的实现,我希望后面能将 Blade 的解析部分单独抽取出来做一个轻量的实现。在 Github 上搜一下发现也有人在做同样的事情。 Yii 2 似乎更推荐就用原生的 PHP 去写,不过也提供了支持 Smarty 和 Twig 的扩展。Symfony 2 则采用了 Twig。 Twig 和 Symfony 以及上文提到的 php-cd-fixer 都是 SensioLabs 的作品。 Smarty 是一个古老而顽强的模板引擎,其语法过于复杂,变量赋值这些事情都有自己的一套做法。现在的版本中更是使用 Lexer 的方式来解析文件,感觉像是用 PHP 实现了另外一种语言。项目里面还有一些太长的正则表达式、太复杂的实现,这是一件很危险很容易出错的事情。 不知道上面的知识你了解了没有,如果你想了解更多有关PHP入门学习知识请登录中软国际教育集团技术知识库!

更多>

推荐阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2