PHP基础4:变量

基本概念

  • 定义
    一个$作为前缀的标识符。
  • 特性
    变量可以存放任意类型的值。在编译或运行时没有变量的类型检查,可以用其他不同类型的值替换一个变量的值。
  • 声明
    不需要用显示的语法来声明变量。变量第一次被赋值时,该变量被创建。设置变量的值也有声明变量的功能。
  • 未赋值
    变量如果没有被赋值,则其值为NULL。

变量的变量

  • 定义
    通过$符号作为前缀,引用变量的值作为新变量的名称。
  • 示例
$foo = "bar";
$$foo = "baz";
则
$baz = "bar";

变量的引用

  • 定义
    引用就是如何创建变量的别名。
$blac =& $white;
  • 解释
    两个变量,任意一个值改变,另一个值也随之改变。
  • 销毁
    销毁其中一个变量的值,不影响另一个值。
  • 函数引用
    函数可以通过引用返回值(?)
function &retRef()
{
    $var = "PHP";
    return $var;
}
$v =& retRef();

变量的作用域

  • 定义
    变量声明的位置决定了一个变量的作用域。总计4种类型作用域:局部作用域、全局作用域、静态作用域和函数参数。
  • 局部作用域
    在一个函数中声明。仅在函数内部可见。全局变量不能在函数内部访问。
  • 全局作用域
    函数外部声明,任意部位访问。函数内部需要先用global关键字声明后,才可访问。
function updateCounter()
{
    global $counter;
    $counter++;
}
$counter = 10;
updateCounter();
则
$counter = 11;

使用$GLOBALS数组

function updateCounter()
{
    $GLOBALS[counter]++;
}
$counter = 10;
updateCounter();
echo $counter;
11
  • 静态变量
    静态变量在一个函数被多次调用时,其值不会丢失,但此变量仅在该函数内可见(与全局变量的区别)。
function updateCounter()
{
    static $counter = 0;
    $counter++;
    echo $counter;
}
$counter = 10;
updateCounter();
updateCounter();
echo $counter;
1
2
10
  • 函数参数
    函数参数只在函数内部有效。
function greet($name)
{
    echo $name;
}
greet("Janet");
输出:
Janet

垃圾收集

  • 符号表
    一个变量有两个部分,它的名字和它的值。符号表是一个将变量名映射到内存中变量值所在地址的数组。
  • 引用计数
    符号表中的每一个值都有一个引用计数器,它的数值表示获取那片内存的方式的数目。
    当一个变量离开作用域,如函数参数和局部变量到达函数末尾时,它的值的引用计数减1。当一个变量在其他内存空间被赋值时,旧值的引用计数减1。当引用计数的值为0时,他的内存被释放。
  • 写时复制
    当将一个变量的值复制到另一个变量时,PHP没有为复制值使用更多的内存。相反,它会更新符号表来说明这两个变量拥有相同的内存快。如果后台修改了任意一个副本,PHP将分配所需的内存来进行复制。
$worker = array("Fred", 35, "Wilma");
$other = $worker; // 数组不被复制
$worker[1] = 36; // 值改变,数组被复制
  • 手动管理内存
    如果要查看一个变量是否被设置甚至是空字符串,可使用isset()。
$s1 = isset($name);  // $s1是 false
$name = "Fred";
$s2 = isset($name);  // $s2是true

使用unset()删除变量的值。

$name = "Fred";
unset($name); //$name 是 NULL
    原文作者:简单asdf
    原文地址: https://www.jianshu.com/p/6f7f79f70b1e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞