PHP变量

变量是存储信息的容器。在PHP中,变量用于存储数据值,如数字、文本、数组等。

PHP变量的定义

在PHP中,变量的定义遵循以下规则:

  • 变量以美元符号($)开头,后跟变量名
  • 变量名必须以字母或下划线字符开始
  • 变量名只能包含字母、数字和下划线字符
  • 变量名区分大小写($age和$AGE是两个不同的变量)

PHP不需要声明变量的类型,变量的类型会根据赋给它的值自动确定。

<?php
// 正确的变量定义
$name = "John";
$age = 30;
$_count = 5;
$user_name = "johndoe";

// 错误的变量定义
$3name = "John"; // 不能以数字开头
$user-name = "johndoe"; // 不能包含连字符
?>

PHP变量赋值

使用赋值运算符(=)给变量赋值:

<?php
$x = 5; // 给变量x赋值为5
$y = "Hello"; // 给变量y赋值为字符串"Hello"
$z = $x; // 将变量x的值赋给变量z
?>

PHP变量的作用域

变量的作用域是指变量可以被访问的代码区域。PHP有三种主要的变量作用域:

1. 局部作用域

在函数内部声明的变量具有局部作用域,只能在函数内部访问:

<?php
function test() {
    $localVar = "这是一个局部变量";
    echo $localVar; // 正确,可以访问
}

test(); // 输出: 这是一个局部变量
echo $localVar; // 错误,无法在函数外部访问
?>

2. 全局作用域

在函数外部声明的变量具有全局作用域,可以在脚本的任何位置访问,但不能在函数内部直接访问,除非使用global关键字:

<?php
$globalVar = "这是一个全局变量";

function test() {
    global $globalVar; // 使用global关键字访问全局变量
    echo $globalVar; // 现在可以在函数内部访问
}

test(); // 输出: 这是一个全局变量
echo $globalVar; // 正确,可以在函数外部访问
?>

3. 静态作用域

在函数内部使用static关键字声明的变量,在函数调用结束后不会被销毁,其值会被保留:

<?php
function test() {
    static $counter = 0;
    $counter++;
    echo "计数器: $counter<br>";
}

test(); // 输出: 计数器: 1
test(); // 输出: 计数器: 2
test(); // 输出: 计数器: 3
?>

PHP全局变量和$GLOBALS数组

PHP提供了一个名为$GLOBALS的特殊数组,可以在函数内部访问全局变量,而不需要使用global关键字:

<?php
$x = 5;
$y = 10;

function test() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

test();
echo $z; // 输出: 15
?>

PHP可变变量

PHP允许您动态创建变量名,这称为可变变量:

<?php
$varName = "color";
$$varName = "blue"; // 相当于 $color = "blue"

echo $color; // 输出: blue
echo $$varName; // 输出: blue
?>

PHP引用变量

通过引用赋值,两个变量可以指向同一个数据。使用&符号来创建引用变量:

<?php
$a = 5;
$b = &$a; // $b是$a的引用
$b = 10;

echo $a; // 输出: 10,因为$b引用了$a
?>

PHP变量类型的自动转换

PHP是一种弱类型语言,这意味着变量的类型可以根据上下文自动转换:

<?php
$x = 5; // 整数
$y = "10"; // 字符串
$z = $x + $y; // PHP自动将$y转换为整数

echo $z; // 输出: 15
?>

PHP变量的销毁

使用unset()函数可以销毁变量:

<?php
$x = 5;
echo $x; // 输出: 5
unset($x);
echo $x; // 报错,变量$x已不存在
?>

变量作用域示例

<?php
// 全局变量
$globalVar = "我是全局变量";

function testScopes() {
    // 局部变量
    $localVar = "我是局部变量";
    
    // 使用global关键字访问全局变量
    global $globalVar;
    echo "在函数内访问全局变量: $globalVar<br>";
    
    // 直接访问局部变量
    echo "在函数内访问局部变量: $localVar<br>";
    
    // 使用$GLOBALS数组访问全局变量
    echo "通过$GLOBALS访问全局变量: ".$GLOBALS['globalVar'] . "<br>";
    
    // 静态变量
    static $staticVar = 0;
    $staticVar++;
    echo "静态变量当前值: $staticVar<br>";
}

// 调用函数
testScopes();
echo "<br>";
testScopes();

echo "<br>在函数外访问全局变量: $globalVar<br>";
// 以下代码会报错,因为$localVar是局部变量
// echo "在函数外访问局部变量: $localVar<br>";
?>