韶华将逝,雄心未已;欲与众君,共习此技.

《PHP和MySQL Web开发》学习笔记(二)

上一篇 / 下一篇  2007-06-23 16:25:40 / 天气: 阴雨 / 心情: 平静 / 个人分类:PHP & MySQL

1.11 理解变量的作用域
作用域是指明一个脚本中某个变量在哪些地方可以使用或可见。PHP具有6项基本的作用域规则:
内置超级全局变量可以在脚本的任何地方使用和可见。
常量,一旦被声明,将可以在全局可见,也就是说,它们可以在函数内外使用。
在一个脚本中声明的全局变量在整个脚本中是可见的,但不是在函数内部。
函数内部使用的变量声明为全局变量时,其名称要与全局变量名称一致。
在函数内部创建并被声明为静态的变量无法在函数外部可见,但是可以在函数的多次执行过程中保持该值。
在函数内部创建的变量对函数来说是本地的,而当函数终止时,该变量也就不存在了。
 
在PHP4.1以后的版本中,$_GET和$_POST数组以及一些其他特殊变量都具有各自的作用域规则。这些被称作超级全局变量,它们可以在任何地方使用和可见,包括内部和外部函数。
$GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV $_REQUEST $_SESSION
 
1.12 使用操作符
操作符是用来对数值和变量进行某种操作运算的符号。
操作符可以带有1个、2个或者3个运算对象,其中大多数操作符都是带有两个运算对象。这些运算对象叫做操作数,也就是要操作的对象。
 
1.12.1 算术操作符
+ 加,-减,*乘,/除,%取余。
可以将减号当作一个一元操作符来使用,表示负值。
算术操作符通常用于整型或双精度类型的数据。如果将它们应用于字符串,PHP会试图将这些字符串转换成一个数字。如果其中包含“e”或“E”字符,它就会被当作是科学表示法并被转换成浮点数。否则将会被转换成整数。PHP会在字符串开始处寻找数字,并且使用这些数字作为该字符串的值,如果没找到数字,该字符串的值则为0。
 
1.12.2 字符串操作符
 
1.12.3 赋值操作符
1. 赋值运算返回符
如:$b = 6+($a=5);
2. 复合赋值操作符
+= -= *= /= %= .=
$a += 5;
3. 前置递增递减和后置递增递减运算符
echo ++$a;
4. 引用
引用就像一个别名,而不是一个指针。$a和$b都指向了内存的相同地址。
$a = 5; $b = &$a; $a = 7; //$a and $b are now both 7;
可以通过重置来改变所指向的地址,如:unset($a);
 
1.12.4 比较操作符
比较操作符表达式根据比较结果返回逻辑值:true或false。
 
1. 等于操作符
如:$a == $b
这个操作符很可能会与赋值操作符“=”混淆。同时,即使出现混淆,程序也不会报错,但是通常不会返回你所希望的结果。一般地说,非0数值都是true,0值为false。
使用赋值操作符而不是等于比较操作符是一个很容易犯的错误,也是非常难发现的逻辑错误。通常,应该仔细检查这两个操作符的使用。
 
2. 其他的比较操作符
==等于,===恒等,!=不等,<>不等,!==不恒等,<小于,>大于,<=小于等于,>=大于等于。
对于恒等操作符,只有两边的操作数相等并且具有相同的数据类型时,其返回值才为true。
 
1.12.5 逻辑操作符
逻辑操作符用来组合逻辑条件的结果。
!非,&&与,||或,and与(与&&相同,但其优先级较低),or或(与||相同,但其优先级较低)。
 
1.12.6 位操作符
位操作符可以将一个整型变量当作一系列的位(Bit,比特)来处理。
&按位与,|按位或,~按位非,^按位异或,<<左位移,>>右位移。
 
1.12.7 其他操作符
逗号操作符“,”是用来分隔函数参数和其他列表项的。
new和->,它们分别用来初始化类的实例和访问类的成员。
1. 三元操作符
如:($grade >= 50 ? 'Passed' : 'Failed')
2. 错误抑制操作符
错误抑制操作符可以在任何表达式前面使用。
如:$a=@(57/0)
如果没有@操作符,这一行代码将产生一个除0警告。使用这个操作符,这个警告就会被抑制住。
如果通过这种方法抑制了一些警告,一旦遇到一个警告,你就要写一些错误处理代码。如果已经启用了PHP的track_errors特性,错误信息将会被保存在全局变量$php_errormsg中。
3. 执行操作符
执行操作符是一对反向单引号(``)。
PHP将试着将反向单引号之间的命令当作服务器端的命令行来执行。表达式的值就是命令的执行结果。
如:$out = `dir c:`; echo "<pre>'. $out. '</pre>';
此外,还有其他的方法可以执行服务器端的命令。
4. 数组操作符
数组操作符([])允许访问数组元素。在某些数组上下文中,也可以使用=>操作符。
+联合,==等价,===恒等,!=非等价,<>非等价,!==非恒等。
+执行了标量类型的加操作和数组的联合操作。
5. 类型操作符
instanceof在面向对象编程中使用。它允许检查一个对象是否是特定类的实例。
 
1.13 操作符:计算表单总金额
 
1.14 理解操作符的优先级和结合性:表达式求值
圆括号的作用是提高圆括号内部操作符的优先级。
Print等价于echo。这两个结构都将生成输出。print和echo 都不是真正的函数,但是都可以以带有参数的函数形式进行调用。二者都可以当作一个操作符:只要将显示的字符串放置在echo或print关键字之后。
以函数形式调用print将使其返回一个值(1)。如果希望在一个更复杂的表达式中生成输出,这个功能可能是有用的,但是print要比echo的速度慢。
 
1.15 使用可变函数
 
1.15.1 测试和设置变量类型
PHP中有两个常见的函数,分别是gettype()和settype()。
要使用gettype()函数,必须先给它传递一个变量。它将确定变量的类型并且返回一个包含类型名称的字符串,如果变量类型不是标准类型中的整型、双精度类型(对于浮点类型来说)、字符串类型、数组或对象之一,该函数就会返回“unknown type(未知类型)”。
要使用settype()函数,必须先给它传递一个要被改变类型的变量,以及一个包含了上述类型列表中某个类型的字符串。
PHP并没有混合数据类型 ,但是由于PHP在类型处理方面非常灵活,因此许多函数可以以许多(或者任意)的数据类型作为参数。这些类型所允许的参数通常都是伪混合类型。
PHP还提供了一些特定类型的测试函数。
is_array();is_double,is_float(),is_real();is_long(),is_int(),is_integer();is_string;is_object;is_resource();is_null();is_scalar——检查该变量是否是标量,也就是是否是整数、布尔值、字符串或浮点数;is_numeric()——检查该变量是否是任何类型的数字或数字字符串;is_callable()——检查该变量是否是有效的函数名称。
 
1.15.2 测试变量状态
isset()函数需要一个变量名称作为参数,如果这个变量存在则返回true,否则返回false。也可以传递一个由逗号间隔的变量列表,如果所有变量都被设置了,isset()函数将返回true。
unset()函数用来销毁变量。
empty()函数用来检查一个变量是否存在,以及它的值是否为非空和0,相应的返回值为true中false。
这些函数使用起来非常方便,可以确保用户正确地填写表单。
 
1.15.3 变量的重解释
可以通过intval(),floatval(),strval()函数来实现转换变量数据类型的目的。
intval()函数也允许在要转换的变量为字符串时指定转换的进制基础。(这样,就可以将16进制的字符串转换成整数)。
 
1.16 实现控制结构
 
1.17 根据条件进行判断
 
1.17.1 if语句
if语句的条件必须用圆括号“()”括起来。
 
1.17.2 代码块
可以使用花括号“{}”来声明代码块。
PHP并不关心代码是如何布局的。但是,为了便于阅读代码,应该将它们缩进。
 
1.17.3 else语句
 
1.17.4 elseif语句
可以将elseif语句随意写成elseif或else if——中间的空格是可有可无的。
如果要编写一系列的级联大elseif语句,应该注意到,其中只有一个语句块将被执行。如果编写的条件语句其值同时为true的不止一个,那么只有第一个为true的条件下的语句或语句块将被执行。
 
1.17.5 switch语句
switch允许条件可以有多于两个的可能值。
必须提供一个case语句来处理每一个条件值,并且提供相应的动作代码。此外,还应该有一个默认的case条件来处理没有提供任何特定值的情况。
switch语句和if或elseif语句的行为有所不同。如果没有专门使用花括号来声明一个语句块,if语句只能影响一条语句。而switch语句刚好相反。当switch语句中的特定case被匹配时,PHP将执行该case下的代码,直至遇到break语句。如果没有break语句,switch将执行这个case以下所有值为true的case中的代码。当遇到一个break语句时,才会执行switch后面的语句。
 
1.17.6 比较不同的条件
 
1.18 通过迭代实现重复动作
 
1.18.1 while循环
通常,当不知道所需的重复次数时,可以使用while循环语句。如果要求一个固定次数的重复,可以考虑使用for循环语句。
当“\n”字符出现在一个引号的字符串中,它将解释成一个换行字符。
 
1.18.2 for和foreach循环
在功能方面,while版本的循环语句和for版本的循环语句是等价的。for循环更加紧凑。
需要注意的一点是,可以将可变变量和for循环结合起来重复一系列的表单域。例如,如果你具有名称为name1、name2、name3等等的表单域,就可以像如下代码所示的这样进行处理:
for ($i=1; $i <= $unmname; $i++)
{
 $temp= "name$i";
 echo $$temp.'<br />';
}
通过动态地创建变量名称,可以依次访问每一个表单域。
除了for循环外,PHP还提供了foreach循环语句,它专门用于数组的使用。
 
1.18.3 do...while循环
do...while循环与while循环不同,因为它的测试条件放在整个语句块的最后。这就意味着do...while循环中的语句或语句块至少会执行一次。
 
1.19 从控制结构或脚本中跳出
如果希望终止一个循环,可以使用在介绍switch循环时提到的break语句。如果在循环中使用了break语句,脚本就会从循环体后面的第一条语句处开始执行。
如果希望跳到下一次循环,可以使用continue语句。
如果希望结束整个PHP脚本的执行,可以使用exit语句。当执行错误检查时,这个语句非常有用。
 
1.20 使用可替换的控制结构语法
对于已经介绍过的所有控制结构,还有一个可替换的语法形式。它由替换开始花括号({)的冒号(:)以及代替关闭花括号(})的新关键字组成,这个新关键字可以是endif、endswitch、endwhile、endfor或endforeach,这是由所使用的控制结构确定的。对于do...while循环,没有可替换的语法。
 
1.21 使用declare
PHP的另一个控制结构是declare结构,它并没有像其他结构一样在日常编程中经常使用。
这种结构用来设置代码块的执行指令——也就是,关于后续代码如何运行的规则。目前,只实现了一个执行指令,ticks。可以通过插入指令ticks=n来设置它。它允许在代码块内部每隔n行代码运行特定的函数,这对于性能测试和调试来说是非常有用的。
 
1.22 下一章:保存客户的订单

TAG: PHP和MySQL Web开发 学习笔记

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 73434
  • 日志数: 265
  • 书签数: 19
  • 建立时间: 2007-05-03
  • 更新时间: 2008-04-15

RSS订阅

Open Toolbar