分享
 
 
 

PHP中的常量和变量

王朝php·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

数字的写法

数字分为十进位、八进位与十六进位三种写法:

(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)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有