大家好,我是军哥,欢迎和我一起共同学习和研究CI框架,本教程为《军哥谈CI框架》系列教程的CI入门教程,在开始本教程之前呢,军哥需要说明一下的是虽然本教程为学习CI的一个入门教程,但是也需要你有系统的学习过HTML、CSS和PHP,当然还要有MySQL等数据库的基础,另外最好是有面向对象的基础,毕竟CI是用了面向对象的开发结构和MVC的模式。所以,军哥奉劝那些一点HTML和PHP基础都没有的兄弟就别在这浪费你的时间了,还是先脚踏实地的打好基础再说吧。
好,我们开始今天第一讲,关于codeigniter的介绍和安装配置的学习。
【本讲内容】
一、codeigniter(以下简称CI)的介绍;
我们一起来了解一下CI是什么?CI能够为我们做什么?以及CI的不足在哪里?
二、codeigniter的安装配置。
我们学习一个技术不是仅仅只是想知道它是什么和能为我们做什么,最重要的是我们要掌握和使用它。其实CI的安装和使用是非常简单的,过一会你们就可以感觉的到~~
【具体内容】
一、CI的介绍。
1、CI是什么?
军哥喜欢用这样一句话来介绍CI是什么,CI是一个免费、轻量级但功能强大且易扩展的PHP框架,使用面向对象的开发结构和MVC模式,提供了一套丰富的类库来满足通常的任务需求。总之,CI简单易学,高效实用!
那怎么样来解读这句话呢?我们接着看:
(1)、CI是一个PHP框架;
大家都知道PHP框架有很多,CI只是其中之一,框架是为了重用发明的。同样,CI的目标是实现让你比从零开始编写代码更快速地开发项目。CI可以将需要完成的任务代码量最小化,这样你就可以把更多的精力放到项目的开发上了。
(2)、CI是免费的;
CI是经过开源许可授权的,只要你愿意就可以使用它。
(3)、CI是轻量级的;
CI的核心系统只需要一些非常小的库,这与那些需要更多资源的框架完全相反。额外的库文件只在请求的时候加载,依需求而定,所以核心系统是非常快而且轻的。
(4)、CI使用M-V-C模式;
CI使用了模型(Model)- 视图(View)- 控制器(Controllers)的方法,这样可以更好地使表现层和逻辑层分离。
(5)、CI功能强大;
CI拥有众多的类库,可以方便并快速的完成开发任务,包括:读取数据库、数据的缓存、发送电子邮件、保存session、文件的上传、图像的操作、数据的确认等。
(6)、CI是易扩展的;
CI可以非常简单的通过自定义类库、辅助函数来进行扩展,或者也可以通过扩展类、系统钩子来实现。
(7)、CI不需要模版引擎;
虽然CI自带了一个可选的模板解析器程序,但不要求你必须使用模板。模板引擎完全与本地化PHP代码的性能需求不符,使用模板引擎我们要学习其语法,这最低限度只比学PHP基础要容易一点点。
(8)、CI已彻底文档化;
程序员都喜欢写代码讨厌写文档。当然我们也一样,但是既然文档和代码本身一样重要,我们就要完成它了。况且我们代码资源极其干净而且方便注释。
(9)、CI拥有一个友好的用户社区。
2、CI能够为我们做什么?
如果你已经是一位PHPer, 开发过PHP应用, CI将会帮助你做得更好, 更容易达成目标。 CI会减少你的代码数量。它会使你的网站结构更紧凑,代码更强健, 如果不是很好地研究CI的源代码的话,你可能还无法察觉到它的强健。
对大多数兄弟来讲,你可能已经花了不少时间, 系统地学习了PHP、HTML和CSS,当然还有MySQL什么的。不过如果使用CI,你只需要一些基本的LAMP(WAMP)知识, 你没有必要先成为一个专家才能使用CI。 你完全可以先借助于CI或别的什么框架,成为一个有生产力的PHP程序员,拿着高薪然后优雅地进一步学习PHP的中高级知识,直至成为一位真正的PHP骨灰级人物。
(1)、节约时间;
节约的时间包括两个方面,一方面呢,由于CI入门相当简单,所以学习周期短,见效快!另一方面,其实通过刚才对CI的介绍,我们很清楚CI能够为我们节约很多的开发时间。
(2)、轻松编程、享受编程乐趣,而不是一个干苦活的体力工;
CI能够让你更好的享受编程的乐趣,因为它减少了你的编码重复的工作,而且它也建立一个合理的系统结构,让你很轻松也很方便的管理更为复杂的程序。
(3)、减少代码量;
举三个例子你就知道了。
示例一:想象一下你正在写MySQL查询,可能的代码如下,
那我们看看CI如何来处理这个问题:
示例二:例如军哥在写phper小站的菜单页时,上面有许多的超链接需要重定向到网站的其他页,我们可以用传统的HTML格式编写(当然这里只是举例,实际会有些不同),
而我们CI给你一个函数,可以这样写,
当你的网站现在需要由开发环境部署到服务器上,这时就需要你改变这个链接了,如果是传统的方式你只能手动的一个个去修改,而我们CI中的anchor函数会自动从config文件中提取相关URL,CI推荐你把你的URL放入一个config文件存储。因此, 当你修改一个URL时,你只需要修改config文件中的的对应链接,就一次那么简单。
示例三:想象你正在写一个性别的下拉输入框,下拉框中有三个选项,如下,
·收集表单数据
·生成动态网页
·字符串的处理
·动态输出图像
·处理服务器端文件系统
·编写数据库支持的网页
·回话跟踪控制
·处理XML文件
·支持利用大量的网络协议
·服务器端其他相关操作
2、 关于PHP脚本运行
·编写的php脚本语言需要上传至WEB服务器的文档根目录下,通过浏览器访问WEB服务器管理下的php文件就可以运行PHP文件。但是,不能直接使用浏览器打开php文件,这样没有web服务器区解析代码,显示的也是源代码。
·在php文件中可以编写html、css、javascript等语言,但需要使用起始符标记<?php和结束标记?>
3、 PHP语言标记
·<?php?>
·语句分为功能执行语句与结构定义语句
·功能执行语句后面一定要加分号,结构定义语句一定不要带分号
·与?>这个标记最近的功能执行语句可以不加分号;建议功能执行语句都加分号
·如果?>是脚本语言的结束,那么?>这个可以不加,建议不要加!很多函数(头函数)的前面都不允许出现任何的空白,所以在使用require标记时,被包含的php文件结束后一定不要有空白,或者该php文件不加?>结束标记即可。
4、 PHP注释方法
·单行注释
//
·多行注释
/* */ 多行注释中不能包含单行注释了
·脚本注释
#
·文档注释
/** */
·注释的功能:
(1) 写过不合适的代码需要注释不能立即删除
(2) 注释可以用来写帮助文档,增强程序代码的可读性
(3) 注释代码可以用来调试程序
(4) 注释要写在代码的上面或右边
5、 在PHP程序中使用空白符
·空白:空格 tab 换行
·空白符可以增强代码的可读性
6、 变量
变量在任何编程语言中都居于核心地位,理解他们就是使用PHP的关键所在。
·变量时用于临时存储值的容器。
·变量是指在程序运行过程中随时可以发生变化的量,是程序中数据的临时存放场所。
·变量可以保存程序运行时用户输入的数据,特定运算的结果以及要输出到网页上显示的一段数据等。
总之,变量是用于跟踪几乎所有类型信息的简单工具。
7、 申明变量
·当一个数据需要用到多次时,就可以申明变量。
·申明方式:$变量名=值
·变量的类型是由存储的值来决定的,申明前不指定类型
·可以连续申明多个变量,例如:$a=$b=$c=$d=”value”.
·isset(); 判断变量是否存在的函数
·unset(); 删除(释放)一个变量的函数。
8、 变量命名
·变量前一定要使用“$”,申明和使用都要有这个符号
·变量名不能以数字开头
·不能使用php的运算符号,例如:+-*/%&|等
·php可以使用系统关键字作为变量名,这其他语言不同的地方
·php变量区分大小写的,只有变量与常量区分大小写,其他的不区分(php功能标签,例如:echo可以写成ECHO或ecHo等)
·变量名在项目程序中要有意义
·命名习惯:用英文单词命名时,第一个英文小写,以后的单词第一个字母大写,其他的小写,例如:aaaBbbCcc。
9、 可变变量(用到比较少)
·一个变量的变量名可以动态地设置和使用
<?php
$one=”###”;
$two=”one”;
$three=”two”;
$four=”three”;
Echo $four.”<br>”;
Echo $$four.”<br>”;
Echo $$$four.”<br>”;
Echo $$$$four.”<br>”;
?>
输出结果为:
three
two
one
###
10、 变量的引用赋值
·使用一个&加到要赋值的变量前面(原变量),例如:$a=&$b;
11、 变量的类型
·PHP中有8种变量类型:四种标量+二种复合类型(可以放多个值的变量)+二种特殊类型
·4种标量:整型、布尔型、浮点型、字符串
·2种复合类型:数组+对象
·2种特殊类型:资源类型+null
·var_dump(); 该函数既可以看到变量类型与值
Types: 描述了所有请求参数的类型
举例说明:每一个wsdl文件都有会如下格式的文件
<types> <xsd:schema> <xsd:import namespace="http://ws.java.com/" schemaLocation="http://192.168.1.103:7878/web?xsd=1"/> </xsd:schema> </types>
访问: http://192.168.1.103:7878/web?xsd=1(案例地址)将会看到更加详细的方法解析。例如传递参数的类型。返回参数的类型()
<xs:schema xmlns:tns="http://ws.java.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://ws.java.com/"> <xs:element name="add" type="tns:add"/> <xs:element name="addResponse" type="tns:addResponse"/> <xs:element name="minute" type="tns:minute"/> <xs:element name="minuteResponse" type="tns:minuteResponse"/> <xs:complexType name="add"> <xs:sequence> <xs:element name="arg0" type="xs:int"/> <xs:element name="arg1" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:complexType name="addResponse"> <xs:sequence> <xs:element name="return" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:complexType name="minute"> <xs:sequence> <xs:element name="arg0" type="xs:int"/> <xs:element name="arg1" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:complexType name="minuteResponse"> <xs:sequence> <xs:element name="return" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:schema>
每一个complexType 在用wsimport命令生成Java的时候都会有相应命名的java文件
Message:SOAP消息和types对应的方法阐述元素相对应 message|types
<message name="add"> <part name="parameters" element="tns:add"/> </message> <message name="addResponse"> <part name="parameters" element="tns:addResponse"/> </message> <message name="minute"> <part name="parameters" element="tns:minute"/> </message> <message name="minuteResponse"> <part name="parameters" element="tns:minuteResponse"/> </message>
portType:指明服务器的接口,并且通过operation指定in和out的消息。其中input表示参数。Output表示返回值
<portType name="WsServerDao"> <operation name="add"> <input wsam:Action="http://ws.java.com/WsServerDao/addRequest" message="tns:add"/> <output wsam:Action="http://ws.java.com/WsServerDao/addResponse" message="tns:addResponse"/> </operation> <operation name="minute"> <input wsam:Action="http://ws.java.com/WsServerDao/minuteRequest" message="tns:minute"/> <output wsam:Action="http://ws.java.com/WsServerDao/minuteResponse" message="tns:minuteResponse"/> </operation> </portType>
Binding : 指定我们传递消息所使用的格式。一般都是literal
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="add"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> <operation name="minute"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding>
Service : 指定服务所有发布的一些基本信息
<service name="WsServerImplService"> <port name="WsServerImplPort" binding="tns:WsServerImplPortBinding"> <soap:address location="http://192.168.1.103:7878/web"/> </port> </service>