命名规则
php变量使用一个美元符号$后面加变量名来表示。变量名是区分大小写的
变量名以字母或者下划线开头,后面跟任意数字,字母,下划线。可以使用中文来命名变量
传递方式
变量默认是传值赋值。
$a = 1;
$b = $a;
$b = 10000;
Echo$a; // 打出 1
如果想要引用赋值,必须使用 & 符号
$a = 1;
$b =&$a;
$b = 1000;
Echo$a;//打出1000
变量的默认值
php可以不初始化变量。但是推荐定义变量时给它一个初始值
未初始化的变量具有其类型的默认值 -布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量(例如用于 echo 中)默认值是空字符串以及数组变量的默认值是空数组。
| |||||
|
变量的作用域
$a=100; // 全局变量
function test(){ $a=10000; //局部变量 }
test(); echo $a;//打出100 | ||||
|
$a=100;//全局变量
function test(){ global $a;//声明使用全局变量 $a=10000; }
test(); echo $a;//打出10000 | ||||
|
$a=100;
function test(){ $GLOBALS['a'] = 10000; }
test(); echo $a;//打出10000 | ||||
| |||||
|
| |||
| static静态变量 static关键字: function test() { static $count = 0;
$count++; echo $count." "; if ($count < 10) { test(); }
$count--; echo $count." "; }
test();
打印结果为1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 0 | ||
| global关键字: $count = 0; function test() { global $count; $count++; echo $count." "; if ($count < 10) { test(); }
$count--; echo $count." "; }
test();
打印结果为1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 0 | ||
|
可以看出,static 和 global 都是属于引用传递。
可变变量,多个美元符号
$a='hello';
$$a="world";//相当于$hello="world"
echo$a." ".$hello;//与 $a." ".$$a 一样
打出hello world
需要注意,如果在数组,或者对象中,需要按情况添加大括号
比如:
当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。
所以上例中最好写为
Echo$a." ".${$a} ;
增加易读性。
<?php
class foo {
var $bar = 'I am bar.';
var $arr = array('I am A.', 'I am B.', 'I am C.');
var $r = 'I am r.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";//相当于$foo->bar
echo $foo->$baz[1] . "\n";//先取出$baz的第二个元素,就是bar,所以相当于$foo->bar
$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n";//先拼接花括号内的字串为bar,所以相当于$foo->bar
$arr = 'arr';
echo $foo->$arr[1] . "\n";//先取出arr的第二个元素,就是r,所以相当于$foo->r
echo $foo->{$arr}[1] . "\n";//有大括号,相当于$foo->arr中的第二个元素,也就是I am B
?>
以上例程会输出:
I am bar.
I am bar.
I am bar.
I am r.
I am B.