|
1. 什么是PHP
1.1 了解PHP
PHP是一种服务端脚本语言,在HTML页面中,你可以嵌入PHP代码,这些代码在每次访问页面时由WEB服务器解释并且生成HTML或其他输出。
PHP最初只是"Personal Home Page"的缩写,但经后来修改,采用了GNU命名惯例,如今是PHP超文本预处理程序的缩写。
PHP是一个开放源代码的产品,你可以访问其源代码,也可以免费使用、修改并且再次发布。
PHP主页: http://www.php.net
Zend Technologies主页: http://www.zend.com
1.2 PHP的优点
1) 高性能
PHP的速度非常快,使用一个单独的服务器,即可满足每天几百万的点击。
2) 可扩展性
PHP具有"shared-nothing"架构,这意味着你可以有效并廉价地对大量服务器进行水平方向扩展。
3) 与许多不同数据库系统的接口
对于许多数据库系统,PHP都具有针对它们的内置连接,可以直接连接到MySQL、PostgreSQL、mSQL、Oracle、dbm、FilePro、Hyperwave、Informix、InterBase和Sybase数据库,PHP5还提供了针对普通文件的内置SQL接口,名为SQLite。
除了本机函数库,PHP还提供了数据库访问抽象层(PDO),它提供了对数据的一致性访问,并且倡导了安全的编码实践。
4) 内置许多常见WEB任务所需的函数库
PHP提供了许多内置函数用来执行有用的Web任务,它可以生成一个图像、连接到Web服务和其他网络服务、解析XML、发送电子邮件、使用cookie以及生成PDF文档等。
5) 低成本
PHP是免费的,可以在任何时候从 http://www.php.net免费下载最新版本。
6) 容易学习和使用
PHP的语法是基于其他编程语言的,主要是C和Perl,如果已经了解类似C的语言,那么几乎可以立即高效使用PHP。
7) 对面向对象的高度支持
PHP版本5具有设计良好的面向对象特性,如继承、私有和受保护的属性和方法、抽象类和方法、接口、构造函数和析构函数。
8) 可移植性
PHP在许多不同操作系统中都可以使用,通常,代码不经过任何修改就可以在运行PHP的不同系统中运行。
9) 开发方法的灵活性
PHP允许实现简单的任务,同样,也容易应用到大型应用程序的实现。
10) 源代码可供使用
你可以访问PHP的所有源代码,可以免费在该语言中进行修改或者添加新特性。
11) 技术支持和文档可供使用
PHP文档和社区都非常成熟,有大量的共享信息资源。
2. 在HTML中插入PHP
2.1 PHP标记
PHP代码以""为结束,这两个标记之间的任何文本都会被解释成PHP。你也可以选择不同风格的PHP标记。
1) XML风格
它是PHP推荐使用的标记风格,管理员不能禁用这种风格的标记,因此可以保证在所有服务器上使用,特别是编写用于不同服务器环境的应用程序时,这种标记风格尤为重要。这种风格的标记可以在XML文档中使用。
2) 简短风格
这种标记风格是最简单的,要使用这种标记风格,必须在配置文件中启用short_open_tag选项,或者启用短标记选项编译PHP。不推荐使用这种风格的标记,因为这种风格在许多环境的默认设置中已经不支持。
3) SCRIPT风格
echo "hello world!"; 这种标记风格是最长的,如果所使用的HTML编辑器无法支持其他标记风格,可以使用它。
4) ASP风格
这种标记风格与ASP的标记风格相同,如果在配置中启用了asp_tags选项,就可以使用它。在默认情况下,该标记风格是禁用的。
2.2 PHP语句
在PHP中,分号是用来分隔语句的,丢失这个分号会出现语法错误。
所有间隔字符,如换行、空格、制表符,都会被认为是空格,PHP引擎会忽略这些空格字符,例如以下两种代码是等价的:
echo "hello";
echo " world";echo "hello"; echo " world";
2.3 添加注释
PHP支持C、C++和SHELL风格的注释。
1) C风格的注释
/* Author: Hans
Modified: April 1
*/ 2) C++风格的注释
echo "hello world"; // output string 3) SHELL风格的注释
echo "hello world"; # output string 3. 变量和常量
3.1 表单中的变量
在PHP脚本中,可以用PHP变量的形式访问每一个表单域,PHP变量名称必须与表单域的名称一致,PHP变量都是以$符号开始的。根据PHP版本和设置不同,有3种方法访问表单数据。
1) 简短风格
$username 这种风格非常方便,但是需要将register_globals配置设置为on,由于安全性原因,默认下该选项的设置为off。这种风格标记容易导致产生安全性问题的错误,因此不被推荐。
2) 中等风格
$_POST['username'] 这种风格是推荐的风格,基于它创建简短版本的变量名称将不会产生安全问题。
3) 冗长风格
$HTTP_POST_VARS['username'] 这种风格是最详细的,但是已被弃用,因此可能会被删除,如今可以通过register_long_arrarys配置指令禁用它,这样可以改进性能。
中等风格从$_POST、$_GET或$_REQUEST数组之一检索变量。使用哪一个数组取决于提交表单时使用的方法是POST还是GET,此外,通过POST或GET方法提交的所有数据都可以通过$_REQUEST获得。
3.2 理解标识符
标识符是变量的名称,PHP定义了一些简单的规则。
1) 标识符可以是任意长度,而且可以由任何字母、数字、下划线组成。
2) 标识符不能以数字开始。
3) 在PHP中,标识符是区分大小写的,但函数名称例外。
4) 变量名称可以与函数名称相同,虽然是允许的,但应尽量避免混淆。
PHP不要求在使用变量之前声明变量,当第一次给一个变量赋值时,才创建了这个变量。
3.3 数据类型
变量类型指能够保存在该变量中的数据类型。PHP支持如下基本数据类型:
1) Integer: 用来表示整数。
2) Float: 用来表示所有实数。
3) String: 用来表示字符串。
4) Boolean: 用来表示true或false。
5) Array: 用来保存具有相同类型的多个数据项。
6) Object: 用来保存类的实例。
此外还有两个特殊类型,NULL和resource。没有被赋值、已被重置或者被赋值为NULL的变量就是NULL类型的变量。特定函数将返回resource类型的变量,它们代表外部资源。
3.4 数据类型的转换
PHP是弱类型语言,或者动态类型语言,PHP可以在任何时间根据保存在变量中的值来确定变量的类型,例如:
$username = 'hans';
$username = 1.0; 使用类型转换,可以将一个变量或值转换成另一种类型,只需在希望进行转换的变量之前的圆括号中插入需要转换的数据类型,例如:
$icount = 0;
$fcount = (float)$icount; PHP提供了一种其他类型的变量:可变变量。可变变量允许动态改变一个变量的名称,例如以下两种代码是等价的:
$col = 'username';
$$col = 'hans';$username = 'hans';
3.5 定义和使用常量
一个常量可以保存一个值,但是常量值一旦被设定后,在脚本的其他地方就不能再更改。使用define函数定义常量:
define('PI', 3.14159); 常量和变量之间的一个不同点在于引用一个常量时,它前面没有$符号,只需要使用其名称就可以:
echo PI; 除了可以自定义常量,PHP预定了许多常量,可以运行phpinfo()函数了解。
3.6 变量的作用域
作用域指在一个脚本中某个变量可以使用或可见的范围,PHP具有6项基本的作用域规则。
1) 内置超级全局变量可以在脚本中的任何地方使用。
2) 常量一旦被声明,可以在全局可见。
3) 在脚本中声明的全局变量在全脚本中是可见的。
4) 函数内部使用的变量声明为全局变量时,名称要与全局变量名称一致。
5) 函数内部创建并声明为静态的变量在函数外不可见,但在函数的多次执行过程中保持该值。
6) 函数内部创建的变量是本地的,当函数终止时,该变量也就不存在。
3.7 超级全局变量
超级全局变量的完整列表如下:
1) $GLOBALS: 所有全局变量数组。
2) $_SERVER: 服务器环境变量数组
3) $_GET: GET方法传递给该脚本的变量数组
4) $_POST: POST方法传递给该脚本的变量数组
5) $_COOKIE: cookie变量数组
6) $_FILES: 与文件上传相关的变量数组
7) $_ENV: 环境变量数组
8) $_REQUEST: 所有用户输入的变量数据,包括$_GET、$_POST和$_COOKIE
9) $_SESSION: 会话变量数组
4. 使用操作符
4.1 算术操作符
算术操作符也就是数字操作符,通常用于整型或双精度类型的数据。如果应用在字符串中,PHP会试图将这些字符转换成一个数字,如果其中包含"e"或"E",它会被当作是科学表示法并被转换成浮点数,否则将会被转换成整数。PHP会在字符串开始处寻找数字,并且使用这些数字作为该字符串的值,如果没有找到数字,则该字符串的值为0。
算术操作符操作符
名称示例+加$a + $b-减$a - $b*乘$a * $b/除$a / $b%取余$a % $b 4.2 字符串操作符
唯一的字符串操作符".",用来连接两个字符串并保存到一个新的字符串中,例如:
$string = "hello"." world"; 4.3 赋值操作符
基本赋值操作符"=",读法为“被设置为”,用于与比较操作符中的“等于”区分。此外PHP还提供了一系列复合的赋值操作符。
复合赋值操作符操作符
使用方法等价于+=$a += $b$a = $a + $b-=$a -= $b$a = $a - $b*=$a *= $b$a = $a * $b/=$a /= $b$a = $a / $b%=$a %= $b$a = $a % $b.=$a .= $b$a = $a . $b 4.4 前置递增递减与后置递增递减
递增运算符"++"将变量增加1后再将值赋给原变量,而递增运算符"--"则是将变量减1。根据运算符出现在变量的前方或后方,分为前置与后置,前置或后置根据操作符的优先级会产生不同的结果。
4.5 引用操作符
引用操作符"&"可以在关联赋值中使用。引用相当于一个别名,而不是一个指针,它使两个变量指向相同的内存地址,可以使用unset来重置,例如:
$a = 1;
$b = &$a;
$b = 2;
unset($a); 4.6 比较操作符
比较操作符用来比较两个值,根据比较结果返回逻辑值true或false。除了相等的比较操作符"==",还有恒等操作符"===",只有当恒等操作符两边的操作数相等并且具有相同的数据类型,其返回值才为true。
比较操作符操作符
名称使用方法==等于$a == $b===恒等$a === $b!=不等$a != $b!==不恒等$a !== $b不等$a $b大于$a > $b= $b 4.7 逻辑操作符
逻辑操作符用来组合逻辑条件的结果。PHP支持逻辑与,逻辑或,逻辑非及异或的运算。
逻辑操作符操作符
名称使用方法!非!$b&&与$a && $b||或$a || $band与$a and $bor或$a or $bxor异或$a xor $b 4.8 位操作符
位操作符可以将一个整型变量当作一系列的位来处理。
位操作符操作符
名称使用方法&按位与$a & $b|按位或$a | $b~按位非~$a^按位异或$a ^ $b> $b 4.9 其他操作符
1) 逗号操作符
逗号操作符","用来分隔函数参数和其他列表项,这个操作符经常被附带使用。
2) 类操作符
"new"和"->"分别用来初始化类的实例和访问类的成员。
3) 三元操作符
三元操作符"? :"类似于条件语句if-else的表达式版本,语法格式如下:
condition ? value if true : value if false 4) 错误抑制符
错误抑制符"@"可以在任何表达式前使用,使用这个操作符,可以抑制代码产生的警告。
5) 执行操作符
执行操作符是一对操作符,它是一对反向单引号"` `",PHP将试着将反向单引号之间的命令当作服务器端的命令行来执行,表达式的值就是命令的执行结果,例如:
echo `ls -l`; 6) 类型操作符
"instanceof"操作符允许检查一个对象是否是特定类的实例,例如:
if ($object instanceof sampleClass)
echo "Object is an instance of sampleClass"; 4.10 操作符的优先级和结合性
操作符具有一组优先级,也就是执行它们的顺序,此外,操作符还具有结合性,也就是同一优先级的操作符的执行顺序。下表中的优先级由上而下递增:
操作符优先级结合性
操作符左,左or左xor左and右print左= += -= *= /= .= %= &= != ^= ~= =左? :左||左&&左!左^左&不相关== != === !==不相关< >=左>左+ - .左* / %右! ~ ++ -- (type) @右[ ]不相关new不相关()
5. 可变函数
5.1 测试和设置变量类型
大部分可变函数都是用来测试一个函数的类型。PHP中最常见的是gettype()和settype(),这两个函数具有如下函数原型:
string gettype(mixed var)
bool settype(mixed var, string type) 要使用gettype(),必须先给它传递一个变量,它将确定变量类型并返回类型名称的字符串:bool、int、double、string、array、object、resource,如果类型不是标准类型,则返回unknown type。
要使用settype(),必须先给它传递一个要改类类型的变量,以及一个类型名称的字符串。
PHP还提供了特定类型的测试函数。
1) is_array(): 检查变量是否是数组。
2) is_double()、is_float()、is_real(): 检查变量是否是浮点数,所有函数相同。
3) is_long()、is_int()、is_integer(): 检查变量是否是整数,所有函数相同。
4) is_string(): 检查变量是否是字符串。
5) is_bool(): 检查变量是否是布尔值。
6) is_object(): 检查变量是否是一个对象。
7) is_resource(): 检查变量是否是一个资源。
8) is_null(): 检查变量是否为null。
9) is_scalar(): 检查变量是否是标量,即整数、布尔值、字符串或浮点数。
10) is_numeric(): 检查变量是否是数字或数字字符串。
11) is_callable(): 检查变量是否是有效的函数名称。
5.2 测试变量状态
PHP有几个函数用来测试变量状态。
1) isset()
bool isset(mixed var[, mixed var[, ...]]) issset()需要一个变量作为参数,如果这个变量存在,则返回true,否则返回false。也可以传递一个由逗号间隔的变量列表,如果所有变量都被设置了,即返回true。
还可以使用与isset()相对应的unset()来销毁一个变量:
void unset(mixed var[, mixed var[, ...]]) 2) empty()
bool empty(mixed var) empty()可以用来检查一个变量是否存在,以及它的值是否为非空和非0,相应的返回值为true或false。
5.3 变量重解释
可以通过调用函数来实现转换变量数据类型的目的:
int intvar(mixed var[, int base])
float floatvar(mixed var)
string strval(mixed var) 每个函数需要接收一个变量作为其输入,然后再将变量值转换成对应类型返回。
6. 条件决策与迭代重复
6.1 if else语句
if (condition) {
expression;
}
elseif (condition) {
expression;
}
else {
expression;
} 我们可以使用if语句进行条件判断,但必须给出if的使用条件,如果条件为true,代码块就会被执行,if语句的条件必须用"( )"括起来。
通常可能希望执行多个语句,可以将多个语句放在一起,将其组成一个代码块,要声明一个代码块,可以使用"{ }"括起来。
当if语句结果为false时,else语句可以定义一个用来替换的动作。需要做出多个决定时,这些决定可能有多于两个的选项,那么可以使用else if语句来建立一个多选项序列,通过提供一系列的条件,程序将检查每一个条件,直到其找到一个为true的条件。
6.2 swtich语句
switch (expression) {
case value1:
expression;
break;
case value2:
expression;
break;
defalut:
expression;
break;
} switch语句工作方式类似于if语句,但是它允许条件可以有多于两个的可能值。在switch语句中,只要条件是一个简单的数据类型,可以提供一个case语句来处理每一个条件值,并且提供相应的动作代码,此外还有一个默认的case条件来处理没有提供特定值的情况。
当switch语句中的特定case被匹配时,PHP将执行该case下的代码,直至遇到break语句,如果没有break语句,switch将执行这个case以下所有值为true的case中的代码。
6.3 while循环
while (condition) {
expression;
} PHP中最简单的循环就是while,它也依赖一个条件,只要其条件为true,就会不断地重复执行代码块。通常,当不知道所需的重复次数时,可以使用while循环,如果不知道所需的重复次数,可以使用for循环。
6.4 for循环
for (expression1; condition; expression2) {
expression3;
} expression1在开始时只执行一次,通常在这里设置计数器的初始值。在每一次循环开始之前,condtion表达式将被测试,如果表达式的值为false,循环将结束。expression2在每一次循环结束时执行,通常在这里调整计数器的值。expression3在每一次循环中执行一次。
6.5 do while循环
do {
expression;
}
while (condition); do while循环与while循环不同,因为它的测试条件放在整个语句块的最后,这意味着循环中的语句块至少会执行一次。
6.6 从控制结构中跳出
如果希望停止一段代码的执行,可以有3种方法。
1) 如果希望终止一个循环,可以使用break语句,脚本会从循环体后面的第一条语句开始执行。
2) 如果希望跳到下一次循环,可以使用continue语句。
3) 如果希望结束整个PHP脚本的执行,可以使用exit语句。
|
|
|