PHP一开始是作为一个小型的开放源码项目,演变为越来越多的人发现使用并流行起来。Rasmus Lerdorf 在1994年 发布了PHP的第一个版本。
PHP是一种递归的缩写为 “PHP:Hypertext Preprocessor”。
PHP是嵌入在HTML中的服务器端脚本语言。它用于管理动态内容,数据库,会话跟踪,甚至构建整个电子商务网站。
它集成了许多流行的数据库,包括 MySQL, PostgreSQL, Oracle, Sybase, Informix 和 Microsoft SQL Server.
PHP其执行效率是非常不错,尤其是当作为Unix一个Apache模块编译。 MySQL服务器一旦启动,即使执行巨大的结果集在非常耗时的复杂查询。
PHP支持大量的诸如POP3,IMAP和LDAP主要协议。 PHP4增加了对Java的支持和分布式对象体系结构(COM和CORBA),使得n层开发的在第一次成为可能性。
PHP是宽松的:PHP语言试图尽可能容错越好。
PHP的语法是类似于C语言。
PHP执行系统的功能,即从文件系统可以创建,打开,读取,写入,并关闭它们。
PHP可以处理的表单,即从文件中收集数据,数据保存到文件中,通过电子邮件可以发送数据,数据返回给用户。
可以添加,删除,修改通过PHP的数据库内的函数。
访问cookie变量和设置Cookie。
使用PHP,可以限制用户访问网站的某些页面。
它可以加密数据。
五个重要特性使PHP流行的可能:
简单
高效率
安全
灵活性
熟悉度
为了感受一下PHP,先从简单的PHP脚本开始。由于"Hello, World!"是一个重要的例子,首先我们将创建"Hello, World!"脚本。
正如前面提到的,PHP是嵌入在HTML中的。这意味着,其中正常的HTML(或XHTML),就会有这样的PHP语句:
<html> <head> <title>Hello World</title> <body> <?php echo "Hello, World!";?> </body> </html>
这将产生以下结果:
Hello, World!
如果检查上面的例子中的HTML输出,就会注意到PHP代码并没有出现在从服务器发送到Web浏览器的文件中。所有出现在Web页面中的PHP都会被处理并从页面中剥离;而从Web服务器返回给客户端是纯HTML输出。
所有的PHP代码都必须包含三个特殊的标记标签之一(以下所示)以被PHP解析器解释。
<?php PHP code goes here ?> <? PHP code goes here ?> <script language="php"> PHP code goes here </script>
最常见的标签是<?php...?>,这是一个标准规则,本教程中也将统一使用本标记。
在下一章中,我们将开始机器上配置PHP开发环境,然后运行PHP例子和程序,以及演示PHP的相关概念。
开发环境:
为了开发和运行PHP Web页面三个重要组件需要在您的计算机系统上安装。
Web服务器-PHP几乎可以所有Web服务器软件上运行,包括微软的Internet信息服务器(IIS),但当前最经常使用的是自由并可获取到的Apache服务器。免费下载Apache在这里: http://httpd.apache.org/
数据库-PHP几乎支持所有的数据库软件,包括Oracle和Sybase,但最常用的是MySQL数据库。下载MySQL免费在这里:http://www.mysql.com/downloads/index.htmll
PHP解析器 - 为了处理PHP脚本的指令,由语法分析器生成可以被发送到Web浏览器的HTML输出。
在开始之前要确保有适当的环境设置机器上使用PHP来开发web程序。前面介绍的几个软件:web服务器,数据库,PHP解析器是要分开来安装的,对于刚学PHP的朋友安装配置起来可能比较复杂,在这里,我们使用集成开发环境软件包,安装一个就可解决上面的问题。
集成软件包使用的是:Wampserver,这是一个免费的软件,
下载地址(选其一):
1、 http://rj.baidu.com/soft/detail/10636.htmll?ald
2、http://www.wampserver.com/en/ 【WAMPSERVER (64 BITS & PHP 5.3) 2.2E】
安装Wampserver,这里建议安装到目录 D:/wamp ,目录结构如图所示:
写一个简单的PHP程序测试环境是否安装成功,这里使用之前的hello word 的例子。进入目录 D:/wamp/www/ 并创建一个文件为:hello.php
文件的位置为:D:/wamp/www/hello.php,文件的内容为:
<html> <head> <title>Hello World </title> <body> <?php echo "Hello, World!";?> </body> </html>
启动Wampserver, 点击刚安装的图标:,然后Wampserver就启动了,可以从系统任务栏中看到:
到此整个过程已经完成,试着访问一下上面写的程序吧。
在浏览器中输入以下网址:
http://localhost/hello.php
语法介绍:
本章主要介绍PHP基本的语法,了解基础PHP对接下来的学习非常重要。
PHP解析引擎需要一种方法来从页面的其他元素中区分出PHP代码。这样机制做被称为“转义到PHP“。有四种方法可以做到这一点:
最普遍有效的 PHP标签的风格是(推荐使用的风格):
<?php...?>
如果使用这种风格,可以确定标签总是能被正确解释。
短路或短路 - 开路标记看起来像这样:
<?...?>
短标记,正如所预料的,要使用短标记,必须做两件事情之一,让PHP来识别这个标签:
选择 --enable-short-tags 配置选项当配置PHP.
在php.ini文件中设置的记录short_open_tag。此选项必须被禁用解析XML与PHP,因为相同的语法,用于XML标记.
ASP风格的标记是模仿使用Active Server Pages描绘代码块的标记。 ASP风格的标记看起来像这样:
<%...%>
要使用ASP风格的标记,需要在php.ini文件中设置的配置选项。
HTML脚本标记看起来像这样:
<script language="PHP">...</script>
注释是程序只存在于人的阅读器和显示程序结果之前剥离出来的部分。注释在PHP中有两种格式:
单行注释: 它们一般用于短的解释或相关的本地代码注释。这里是单行注释的例子。
<? # This is a comment, and # This is the second line of the comment // This is a comment too. Each style comments only print "An example with single line comments"; ?>
多行打印: 下面是在一个单一的打印语句打印多行的例子:
<? # First Example print <<<END This uses the "here document" syntax to output multiple lines with $variable interpolation. Note that the here document terminator must appear on a line with just a semicolon no extra whitespace! END; # Second Example print "This spans multiple lines. The newlines will be output as well"; ?>
多行注释: 它们通常用于在需要时提供伪代码算法和更详细的解释。注释多行这里是多行注释的例子和C语言中一样。
<? /* This is a comment with multiline Author : Mohammad Mohtashim Purpose: Multiline Comments Demo Subject: PHP */ print "An example with multi line comments"; ?>
空白是键入通常是在屏幕上不可见的,包括空格,制表符,回车符(行尾的字符)等。
PHP的空格不敏感意味着它不管有多少个空格字符在一行中。空白字符一个跟很多个都是一样的效果。
例如,每个下面的PHP语句指定 2 +2的总和变量 $four是等价的:
$four = 2 + 2; // single spaces $four <tab>=<tab2<tab>+<tab>2 ; // spaces and tabs $four = 2+ 2; // multiple lines
PHP是一种区分大小写的语言。试试下面的例子:
<html> <body> <? $capital = 67; print("Variable capital is $capital<br>"); print("Variable CaPiTaL is $CaPiTaL<br>"); ?> </body> </html>
这将产生以下结果:
Variable capital is 67 Variable CaPiTaL is
PHP语句后跟一个分号(;)。由PHP标记括有效的PHP语句的任何序列是一个有效的PHP程序。这里是一个典型的语句在PHP中,在这种例子中指定字符到一个叫做 $greeting变量的字符串:
$greeting = "Welcome to PHP!";
PHP最小的构建块是不可分割的标记,如数字(3.14159),字符串(.two.),变量($two),常量(TRUE),以及特殊字组成PHP本身的语法一样, if, else, while, for等
虽然语句不能组合成表达式,但可以随时把语句序列括在大括号中的任何地方声明。
下面两个语句是等价的:
if (3 == 2 + 1) print("Good - I haven't totally lost my mind.<br>"); if (3 == 2 + 1) { print("Good - I haven't totally"); print("lost my mind.<br>"); }
可以在命令提示符下运行PHP脚本。假设已经在test.php文件写入内容如下
<?php echo "Hello PHP!!!!!"; ?>
现在运行该脚本命令提示符如下:
$ php test.php
这将产生以下结果:
Hello PHP!!!!!
希望现在你已有PHP语法的基本知识。
将信息存储在一个PHP程序中的主要方法是使用变量。
这里是了解PHP中的变量重要的几个知识。
在PHP中所有的变量都标注有一个前导美元符号 ($).
一个变量的值是其最近分配的值.
变量赋以=运算符,左侧的为变量名称,在右侧则是要计算的表达式.
变量可以,但也可以不需要赋值前必须声明,也就是说,可声明可不声明.
PHP中的变量没有固有类型 - 一个变量不用事先知道它是会被用来存储一个数字还是字符串.
他们被使用之前变量有分配默认值.
在必要的时候,PHP能非常完好地自动将类型转换从一种类型到另一种类型.
PHP变量与Perl类似.
PHP总共有八个数据类型,可用它来构建变量:
整型: 全是数字,没有小数点,如 4195.
浮点型: 是浮点数,如 3.14159 或 49.1.
布尔型: 只有两个可能的值:true或false。
NULL: 是一种特殊类型,只具有一个值: NULL.
字符串: 是字符的序列,如“PHP支持的字符串操作."
数组: 命名和索引的其他值的集合。
对象: 是程序员定义的类,它可以打包两个其他种类的值和函数所特有的类的实例。
资源: 是外部引用的资源保持到PHP(如数据库连接)的特殊变量。
前面5个是“简单类型”, 而接下来的两个(数组和对象)是复合 - 复合类型可以打包任意类型的其他任意值,而简单类型是不能的。
我们将在本章节只解释比喻的数据类型。数组和对象将另外章节在了解和学习。
他们全是数字,没有小数点,比如4195。他们是最简单的类型。它们对应于简单的整数,正数和负数。整数可以分配给变量,也可以在表达式中使用,就像这样:
$int_var = 12345; $another_int = -12345 + 12345;
整数可以是十进制(基数为10),八进制(基数为8)和十六进制(基数为16)格式。十进制格式是默认的,八进制整数以0开头指定,十六进制数以0x。
对于最常见的平台上,最大整数为(2 **31-1)(或2,147,483,647),最小(最负)是整数。 (2 **31-1)(或2,147,483,647)。
它们常见的如3.14159 或 49.1。默认情况下,用浮点数所需的小数位数的最小数量。例如,代码:
$many = 2.2888800; $many_2 = 2.2111200; $few = $many + $many_2; print(.$many + $many_2 = $few<br>.);
它在浏览器产生以下输出:
2.28888 + 2.21112 = 4.5
它们只有两个可能的值:true或false。 PHP提供了几个常量,尤其是用作布尔值:TRUE和FALSE,它可以用来像这样:
if (TRUE) print("This will always print<br>"); else print("This will never print<br>");
下面是规则决定的任何值布尔类型的已经不是“真相”:
如果值是一个数字,如果恰好等于零那么它为false,否则为true。
如果该值是一个字符串,如果该字符串是空的(具有零字符)或者是字符串“0”那么它为false,否则都为true。
NULL类型的值始终是false.
如果该值是一个数组,如果它不包含任何其他值那么它是false,否则它的值为 true。对于一个对象,其中包含一个值是指具有已赋值的成员变量。
有效的资源的值是true(虽然有些函数返回的资源时,他们不成功将返回FALSE)。
不要用double为布尔值。
下面每个变量都有嵌在它的名字,当它被用在布尔上下文中的真值。
$true_num = 3 + 0.14159; $true_str = "Tried and true" $true_array[49] = "An array element"; $false_array = array(); $false_null = NULL; $false_num = 999 - 999; $false_str = "";
NULL是一种特殊类型的只有一个值:NULL。给一个变量NULL值,分配值它是这样的:
$my_var = NULL;
特殊常量NULL是按照惯例大写,但实际上它是不区分大小写的,也完全可以:
$my_var = null;
被指定为NULL的变量具有以下属性:
在布尔上下文中它的计算结果为FALSE。
当使用isset()函数测试,则返回FALSE。
它们是字符序列,如“PHP支持字符串操作”。下面是字符串的有效示例
$string_1 = "This is a string in double quotes"; $string_2 = "This is a somewhat longer, singly quoted string"; $string_39 = "This string has thirty-nine characters"; $string_0 = ""; // a string with zero characters
单引号字符串被视为几乎从字面上是一样的,而双引号字符串会有替换变量的值,以及解释某些字符序列。
<? $variable = "name"; $literally = 'My $variable will not print!\\n'; print($literally); $literally = "My $variable will print!\\n"; print($literally); ?>
这将产生以下结果:
My $variable will not print!\n My name will print
有关于字符串的长度没有人为限制 - 可用在内存的范围内,应该能够使任意长的字符串。
这是用双引号分隔(如“this”)字符串是由PHP的预处理均通过以下两种方式:
用反斜杠(\)开头的某些字符序列替换为特殊字符
变量名(从$)被替换为它们的值的字符串表示形式。
转义序列替换为:
\n被替换为换行符
\r 被替换回车符
\t 被替换为制表符
\$ 被替换的美元符号本身 ($)
\" 被替换为单一的双引号(")
\\ 被替换为单个反斜杠 (\)
可分配多个行使用此文档中的单个字符串变量:
<?php $channel =<<<_XML_ <channel> <title>What's For Dinner<title> <link>http://menu.example.com/<link> <description>Choose what to eat tonight.</description> </channel> _XML_; echo <<<END This uses the "here document" syntax to output multiple lines with variable interpolation. Note that the here document terminator must appear on a line with just a semicolon. no extra whitespace! <br /> END; print $channel; ?>
这将产生以下结果:
This uses the "here document" syntax to output multiple lines with variable interpolation. Note that the here document terminator must appear on a line with just a semicolon. no extra whitespace! <channel> <title>What's For Dinner<title> <link>http://menu.example.com/<link> <description>Choose what to eat tonight.</description>
范围可以被定义为一个可变量在声明它的程序的范围。 PHP变量可以是以下四种范围类型:
局部变量
函数参数
全局变量
静态变量
命名规则的变量是:
变量名必须以字母或下划线字符。
变量名可以包含数字,字母,下划线,但不能使用以下字符: + , - , % , ( , ) . & 等
变量没有大小的限制,想用多长就多长。
什么是运算符? 简单来说就是可以使用表达式4 + 5 = 9。此处4和5被称为操作数,而+被称为运算符。 PHP语言支持以下类型的运算符。
算术运算符
比较运算符
逻辑(或关系)运算符
赋值运算符
条件(或三元)运算符
接下来我们对所有的运算符一个一个地来看看.
有下列由PHP语言支持的算术运算符:
假设变量A=10,变量B=20则:
算术运算符示例
Operator | 描述 | 例子 |
---|---|---|
+ | 两个操作数加法 | A + B = 30 |
- | 从第一操作数中减去第二个操作数 | A - B = -10 |
* | 两个操作数相乘 | A * B = 200 |
/ | 分母除以分子 | B / A = 2 |
% | 模运算符和余整除法 | B % A = 0 |
++ | 递增运算符,整数值加一 | A++ = 11 |
-- | 自减运算符,整数值减少一 | A-- = 9 |
PHP语言支持下列比较运算符
假设变量A=10和变量B=20则:
比较运算符实例
运算符 | 描述 | 例子 |
---|---|---|
== | 检查两个操作数的值相等与否,如果相等则条件为true. | (A == B) 不为 true. |
!= | 如果检查两个操作数的值相等与否,如果值不相等,则条件为true. | (A != B) 为 true. |
> | 如果检查左操作数的值大于右操作数的值,如果是则条件为true. | (A > B) 不为 true. |
< | 如果检查左操作数的值小于右操作数的值,如果是则条件为true. | (A < B) 为 true. |
>= | 如果检查左操作数的值大于或等于右操作数的值,如果是则条件为true. | (A >= B) 不为 true. |
<= | 如果检查左操作数的值小于或等于右操作数的值,如果是则条件为true. | (A <= B) 为 true. |
下列是PHP语言支持的逻辑运算符
假设变量A=10,变量B=20,则:
逻辑运算实例
运算符 | 描述 | 例子 |
---|---|---|
and | 所谓逻辑AND运算符:如果两个操作数是true,那么则条件为true. | (A and B) 为 true. |
or | 所谓的逻辑或运算符是:如果任何两个操作数都是非零那么条件为true. | (A or B) 为 true. |
&& | 所谓的逻辑AND运算符:如果两个操作数都是非零那么条件为true. | (A && B) 为 true. |
|| | 所谓的逻辑或运算符: 如果任何两个操作数都是非零那么条件为true. | (A || B) 为 true. |
! | 所谓的逻辑非运算符:使用反转其操作数的逻辑状态。如果条件为true,则逻辑NOT运算符为false. | !(A && B) 为 false. |
下列是PHP语言支持赋值操作符:
赋值运算符示例
运算符 | 描述 | 例子 |
---|---|---|
= | 简单赋值运算符,分配从右侧操作数的值给左侧操作数 | C = A + B 将指定的值 A + B 给 C |
+= | 加和赋值操作符,它增加了右操作数为左操作数和结果分配给左操作数 | C += A 相当于 C = C + A |
-= | 减和赋值操作符,它减去右边的操作数从左边的操作数,并将结果赋值给左操作数 | C -= A 相当于 C = C - A |
*= | 乘法和赋值操作符,它乘以右边的操作数与左操作数和结果分配给左操作数 | C *= A 相当于 C = C * A |
/= | 除和赋值操作符,它除以左操作数与右边的操作数,并将结果赋值给左操作数 | C /= A 相当于 C = C / A |
%= | 模数和赋值操作符,它采用模使用两个操作数和结果分配给左操作数 | C %= A 相当于 C = C % A |
还有一个运算符称为条件运算符。表达式首先计算为true或false值,然后执行取决于计算结果的两个给定的语句之一。条件运算符有这样的语法:
条件运算示例
运算符 | 描述 | 例子 |
---|---|---|
? : | 条件表达式 | 如果条件为真?然后值X:否则值Y |
所有在前面所讨论的运算符可分为以下几类:
一元前缀运算符,它前面一个操作数。
二元运算符,它有两个操作数和执行各种算术和逻辑运算。
条件运算符(三元运算符),这需要三个操作数,并计算第二个或者第三个表达式,根据第一个表达式的计算。
赋值运算符,它的值赋给一个变量。
运算符优先级决定的条款在表达式中的分组。这会影响一个表达式如何计算。某些运算符的优先级高于其它,例如,乘法运算符的优先级比加法运算较高者:
例如,X=7+3*2;这里x被赋值13,不是20,因为运算符*的优先级比+所以它首先得到乘以3*2优先级高,然后加7。
这里具有最高优先级的操作出现在表的顶部,那些与最低的出现在底部。在表达式中,优先级较高的运算符将首先计算。
分类 | 运算符 | 关联 |
---|---|---|
Unary | ! ++ -- | Right to left |
Multiplicative | * / % | Left to right |
Additive | + - | Left to right |
Relational | < <= > >= | Left to right |
Equality | == != | Left to right |
Logical AND | && | Left to right |
Logical OR | || | Left to right |
Conditional | ?: | Right to left |
Assignment | = += -= *= /= %= | Right to left |
if, elseif ...else 和 switch语句用于采取基于不同的条件决策。
可以使用条件语句中的代码。PHP支持以下三种决策语句:
如果条件为true,执行一些代码,如果一个条件为假则执行另一个代码,那么使用if.... else语句。
if (condition) code to be executed if condition is true; else code to be executed if condition is false;
下面的例子如果当前日期是周五,将输出"Have a nice weekend!",否则会输出 "Have a nice day!":
<html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; else echo "Have a nice day!"; ?> </body> </html>
如果如果条件为true/false多行应该执行时,应行大括号括起来:
<html> <body> <?php $d=date("D"); if ($d=="Fri") { echo "Hello!<br />"; echo "Have a nice weekend!"; echo "See you on Monday!"; } ?> </body> </html>
如果想执行一些代码,如果几个条件中的一个为true,那么可以考虑使用elseif语句
if (condition) code to be executed if condition is true; elseif (condition) code to be executed if condition is true; else code to be executed if condition is false;
下面的例子如果当前为星期五将输出 "Have a nice weekend!",如果当前日期是星期天,它会输出"Have a nice Sunday!"。否则它会输出 "Have a nice day!":
<html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; elseif ($d=="Sun") echo "Have a nice Sunday!"; else echo "Have a nice day!"; ?> </body> </html>
如果想选择多代码块中的一个执行,使用switch语句。
switch语句是用来避免 if..elseif..else 长的代码块。.
switch (expression) { case label1: code to be executed if expression = label1; break; case label2: code to be executed if expression = label2; break; default: code to be executed if expression is different from both label1 and label2; }
switch语句的工作原理以不一样的方式。首先它计算给定的表达式,然后寻求一个标签,可以匹配所产生的值。如果找到一个匹配值,则具有匹配标签相关的代码会被执行或者如果没有一个标贴的匹配,那么语句将执行任何指定的默认(default)代码。
<html> <body> <?php $d=date("D"); switch ($d) { case "Mon": echo "Today is Monday"; break; case "Tue": echo "Today is Tuesday"; break; case "Wed": echo "Today is Wednesday"; break; case "Thu": echo "Today is Thursday"; break; case "Fri": echo "Today is Friday"; break; case "Sat": echo "Today is Saturday"; break; case "Sun": echo "Today is Sunday"; break; default: echo "Wonder which day is this ?"; } ?> </body> </html>