变量是 PHP 编程的基础,用于存储和操作数据。理解变量的使用是学习 PHP 的关键第一步。
变量是用于存储信息的"容器",可以保存各种类型的数据,如数字、文本、数组等。
<?php
$x = 5;
$y = 6;
$z = $x + $y;
echo $z; // 输出 11
?>
在代数中,我们使用字母表示值:
x = 5
y = 6
z = x + y
从表达式 z = x + y,我们可以计算出 z 的值为 11。
在 PHP 中,这些字母被称为变量。
PHP 变量遵循特定的命名规则:
<?php
// 合法的变量名
$name = "John";
$_age = 25;
$user1 = "admin";
$firstName = "Alice";
$last_name = "Smith";
?>
<?php
// 非法的变量名(会导致错误)
// $1number = 10; // 不能以数字开头
// $user-name = "Tom"; // 不能包含连字符
// $user name = "Tom"; // 不能包含空格
// $function = "test"; // 虽然是合法命名,但避免使用保留字
?>
PHP 是动态类型语言,无需预先声明变量类型。变量在第一次赋值时自动创建:
<?php
// 不同类型的变量声明
$text = "Hello World!"; // 字符串
$number = 42; // 整数
$price = 19.99; // 浮点数
$is_active = true; // 布尔值
$colors = array("red", "green", "blue"); // 数组
echo $text; // 输出: Hello World!
echo $number; // 输出: 42
?>
注意: 当为变量赋文本值时,必须在文本两侧使用引号(单引号或双引号)。
PHP 是一种弱类型(松散类型)语言,具有以下特点:
<?php
// PHP 自动处理类型转换
$var = "10"; // 字符串 "10"
$var = $var + 5; // 自动转换为整数 15
$var = $var . " apples"; // 转换为字符串 "15 apples"
echo $var; // 输出: 15 apples
?>
在强类型语言(如 Java、C++)中,必须预先声明变量类型:
// Java 需要明确声明类型
int number = 10;
String text = "Hello";
// number = "text"; // 编译错误:类型不匹配
// PHP 自动处理类型
$number = 10;
$text = "Hello";
$number = "text"; // 允许:自动类型转换
变量的作用域决定了在脚本的哪些部分可以访问该变量。PHP 有四种作用域:
在所有函数外部定义的变量拥有全局作用域,可以在脚本的任何地方访问(除了函数内部)。
在函数内部定义的变量拥有局部作用域,只能在函数内部访问。
<?php
$global_var = "我是全局变量"; // 全局变量
function testFunction() {
$local_var = "我是局部变量"; // 局部变量
echo $local_var; // 可以访问局部变量
// echo $global_var; // 错误:无法直接访问全局变量
}
testFunction(); // 输出: 我是局部变量
echo $global_var; // 输出: 我是全局变量
// echo $local_var; // 错误:无法在函数外访问局部变量
?>
要在函数内部访问全局变量,需要使用 global 关键字:
<?php
$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // 输出 15
?>
PHP 将所有全局变量存储在 $GLOBALS 数组中,也可以通过该数组访问全局变量:
<?php
$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // 输出 15
?>
通常,函数执行完毕后,其所有局部变量都会被删除。使用 static 关键字可以保留局部变量的值:
<?php
function myTest() {
static $x = 0;
echo $x;
$x++;
}
myTest(); // 输出: 0
myTest(); // 输出: 1
myTest(); // 输出: 2
?>
每次调用函数时,静态变量会保留前一次调用结束时的值。
注意: 静态变量仍然是局部变量,只能在声明它的函数内部访问。
参数是通过调用代码传递给函数的局部变量,在函数参数列表中声明:
<?php
function greetUser($name) {
echo "Hello, " . $name . "!";
}
function calculateSum($a, $b) {
return $a + $b;
}
greetUser("John"); // 输出: Hello, John!
echo calculateSum(5, 3); // 输出: 8
?>
<?php
// 好的变量命名和实践
$userName = "john_doe";
$isLoggedIn = true;
$itemCount = 0;
$shoppingCart = array();
// 避免的命名方式
$n = "john"; // 无意义
$flag = true; // 不明确
$cnt = 0; // 缩写不清晰
?>
PHP 提供了一些有用的变量处理函数:
<?php
$testVar = "Hello World";
// 检查变量是否设置
if (isset($testVar)) {
echo "变量已设置";
}
// 获取变量类型
echo gettype($testVar); // 输出: string
// 检查变量是否为空
if (!empty($testVar)) {
echo "变量不为空";
}
// 释放变量
unset($testVar);
?>