php常量 变量,PHP中的常量和变量

数字的写法

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

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

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值