查看文章 |
PHP中的常量和变量
2008-04-01 17:18
数字的写法 数字分为十进位、八进位与十六进位三种写法: (1) 1234 - 一般我们习惯的十进制 (2) 01234 - 开头为 0 (zero) 表示这是一个八进制数字 (3) 0x1234 - 开头为 0x (zero eks) 表示这是一个十六进位数字 另外,double (浮点数) 的写法也是和平常的习惯一样,例如: -12.3 3.5 7.0001 0.0000054 10000.1 这五个数字都是浮点数正确的写法。 PHP 也支持科学记号写法,可用来表示较大或较小的数值,例如: 12.5E-5 (12.5x10-5) 1.3E+3 (1.3x10+3) 分别为 .000125 (0.000125) 与 1300。 字符串的写法 字符串以单、双或倒引号围住分别有不同的义意。 单引号 例如: $str = 'An apple a day keeps the docter away.' 当字符串出现 ' 符号时,必须加上: 'I'm wing' 应改成: 'I'm wing' 才对,其中 ' 即称为跳脱字符 (escape character)。 双引号 以双引号围住的字符串 PHP 会对该字符串做 variable interpolation 的动作,亦即做变量的取代: $name = "Wing"; echo 'Name: $name'; echo "Name: $name"; 执行结果为: Name: $name Name: Wing 在双引号里的字符串如果有 $ (dollar sign),只要改成跳脱字元的写法即可: $total = 12000 echo "Total: $ $total"; //输出 Total: $ 12000 在做 variable interpolation 时,变量名称是以一个以上空格做为界线,例如: $n_file = 5; if ($n_file == 1) { echo "There are $n_file."; } else { echo "There are $n_files."; } 当 $n_file 不为 1 时,"There are $n_files." PHP 所看到的变量为 $n_files,而不是正确的 $n_file,所以必须改成: $n_file = 5; if ($n_file == 1) { echo "There are $n_file."; } else { echo "There are {$n_file}s."; } 单引号内的双引号,或是双引号内的单引号都视为有效字符,不需使用跳脱字符,例如: echo "I'm a happy bird."; echo 'I'm a happy "bird"!'; 输出结果为: I'm a happy bird. I'm a happy "bird"! 反引号 利用反引号可以执行 UNIX 下的命令,并传回执行结果。例如: echo `ls -l *.txt`; 表示将 ls -l *.txt 命令的执行结果输出,以反引号围住的字符串为要执行的 UNIX 指令。 如何使用 PHP 的类型 PHP 的变量属松散资料类型,变量的类型是在计算时动态 (dynamic) 决定的PHP 的松散资料类型,即我们给定什么值,该变量即为什么类型,或是如何使用该变量,该变量即为适当的类型,例如: $foo = "0"; $foo 为 string (ASCII 48) $foo++; $foo 变成 string "1" (ASCII 49) $foo += 1; $foo 变成 integer (2) $foo = $foo + 1.3; $foo 变成 double (3.3) $foo = 5 + "10 Little Piggies"; $foo 为 integer (15) $foo = 5 + "10 Small Pigs"; $foo 为 integer (15) 字串类型转数值类型 当我们给变量的值是利用双引号括住数值或字符串时,就是指定一个字符串给变量,例如: $a = "Hello!"; $a 变量为字符串类型。请看底下的范例: $a = "hello!"; echo $a; ?> 输出结果为: hello! PHP 的变量是在执行时才决定类型,因为字符串也可以用来做计算,很奇怪吧!PHP 将字符串拿来做运算时,会依据底下二个原则设法将字符串转成可以计算的类型: 字符串中包括 "."、"e" 或 "E" 时转换成 double 类型,否则转换为integer 无法转换时则为 0 范例: $foo = 1 + "10.5"; $foo 为 double (11.5) $foo = 1 + "-1.3e3"; $foo 为 double (-1299) $foo = 1 + "bob-1.3e3"; $foo 为 integer (1) $foo = 1 + "bob3"; $foo 为 integer (1) $foo = 1 + "10 Small Pigs"; $foo 为 integer (11) $foo = 1 + "10 Little Piggies"; $foo 为 integer (11) $foo = "10.0 pigs " + 1; $foo 为 int (11) $foo = "10.0 pigs " + 1.0; $foo 为 double (11) Type Juggling (类型转换竞争) 变量在做运算时,例如使用 "+",当 expression 包含各种不同的类型时,就会有 Type Juggling 的动作发生,例如: $foo = "0"; $foo 为 string "0" (ASCII 48) $foo++; $foo 为 string "1" (ASCII 49) $foo += 1; $foo 变成 integer (2) $foo = $foo + 1.1; $foo 变成 double (3.1) $foo = 5 + "15 Persons"; $foo 的运算结果为 integer (20) $foo = 5 + "10 Big Pigs"; $foo 的运算结果为 integer (15) 又如: $a = 5; // $a 的类型为 integer $a[0] = "Hi!"; // $a 的类型变成 array 这种类别的改变即称为 "Type Juggling"。 局部变量 在 function 里初始化的变量即局部变量。为什么叫局部变量呢?因为局部变量只有在 function 里可以被「看见」,请看底下的范例: function sum() { $a = 1; $b = 2; echo $a+$b; } echo " ". $a; sum(); 执行结果: 3 0 第二个输出的结果为 0,这是因为 function 里的 $a 只有在 function 里才能被看到,在 function 外局部变量就不能被看见。 全局变量 在局部变量范围之外所宣告的变量即全局变量,例如: $a = 1; function sum() { echo $a; } sum(); 这段程序代码执行后不会有任何输出,可是 $a 不是一个全局变量吗?请记得一点,因为 PHP 的变量是不须经过宣告的,所以 function 里的 $a 其实仍然是一个局部变量。 局部变量的可见度会盖掉全局变量,所以 sum() 所 echo 出的 $a 变量是一个局部变量,那该如何告诉 function 变量是一个全局变量呢?利用 global 关键词即可: $a = 1; function sum() { global $a; $a = $a*100; } sum(); echo $a; 执行结果: 100 第一段程序代码其实存在了二个变量,一个是全局变量 $a,另一个则是局部变量 $a。在第二段程序代码里,则只有一个全局变量 $a。 对于全局变量另外一个重点就是,倒底全局变量的范围为何?在 PHP 里,全局变量也称为 page-scoped 变量,亦即在同一个档案里的 PHP 程序都能看到这个全局变量。 静态变量 局部变量生命期是在函数执行期间,随函数的执行结束而结束,而静态变量的生命期是随整个 PHP 程序结束而结束,但可见度只有该函数。利用关键词 static 来宣告静态变量: function sum() { static $a = 1; if ($a < 10) { echo $a; $a++; sum(); } sum(); 输出结果: 123456789 区部或全局变量都不是静态变量,因为函数执行结束后,变量的值并不会被保留。而所谓的静态变量意思就是说,当函数执行结束后,该变量的值仍然会被保留,因此第二次函数该函数时,静态变量之前的值仍然存在。 变量的定义 使用者自定变量可使用 define() 函数,这些变量定义后,包括 PHP 里事先定义好的变量,都不能再被重新定义。例如我们要定义 PI 变量的值为 3.14159: define("PI", 3.14159); echo PI; // 输出为 3.14159 这里的 "PI" 被我们定义成常数,因此以后只要提到 PI,指的就是 3.14159,例如: echo PI*10; 输出结果等于 31.4159 (3.14159*10)。 |
最近读者: