简介:PHP学习中关于变量部分的一些笔记。(学习资料来自于php.net/manual)
1.PHP将变量的“.”变为“_”。如$var.ext将变成$var_ext。
2.$this是一个特殊变量,不能被赋值(yii中有体现)
3.变量的引用:利用“&”可将有名字的变量进行引用赋值
<?php
$foo = 25;
$bar = &$foo; // 合法的赋值
$bar = &(24 * 7); // 非法; 引用没有名字的表达式
function test()
{
return 25;
}
$bar = &test(); // 非法
//摘自php.net/manual
?>
在上例中,$bar与$foo关联,对任意一个变量的改动将影响另一个变量。
4.区分全局变量和超全局变量(存疑)
全局变量的有效范围不包括函数内,因此若要在函数内使用函数外定义的变量,则应在函数内用global声明该全局变量或使用数组$GLOBALS(这货就是超全局变量)
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
//或
function Sum1()
{
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
//修改自php.net/manual
?>
5.静态变量
在函数内使用,可以使该变量的值不随函数的结束而丢失,常用于函数递归。注意不能用表达式进行赋值。
6.可变变量
<?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"; //输出“I am bar.”
echo $foo->$baz[1] . "\n"; //输出“I am bar.”
$start = 'b';
$end = 'ar';
echo $foo->{$start . $end} . "\n"; //输出“I am bar.”
$arr = 'arr';
echo $foo->$arr[1] . "\n"; //输出“I am r.”,$arr[1]是字符串'arr'的第二个字符
echo $foo->{$arr}[1] . "\n"; //输出“I am B.”
//修改自php.net/manual
?>
注意$foo->bar和$foo->$bar的区别。
疑问:
1.对“函数内对全局变量使用‘&’进行引用,会导致预料之外的行为”仍不理解
2.在一个函数内使用另一个函数内声明的变量时,应作何种声明?