2024 年 PHP 日本大会

基础

PHP 中的变量由美元符号后跟变量名表示。变量名区分大小写。

有效的变量名以字母(A-Za-z 或字节 128 到 255)或下划线开头,后跟任意数量的字母、数字或下划线。作为正则表达式,它将这样表示:^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$

注意 PHP 不支持 Unicode 变量名,但是,某些字符编码(例如 UTF-8)以这样的方式编码字符,使得多字节字符的所有字节都落在允许的范围内,从而使其成为有效的变量名。

注意 $this 是一个特殊变量,不能赋值。在 PHP 7.1.0 之前,间接赋值(例如,使用 可变变量)是可能的。

提示

另请参阅 用户命名指南

示例 #1 有效和无效的变量名

<?php
$var
= 'Bob';
$Var = 'Joe';
echo
"$var, $Var"; // 输出 "Bob, Joe"

$4site = 'not yet'; // 无效;以数字开头
$_4site = 'not yet'; // 有效;以下划线开头
$täyte = 'mansikka'; // 有效;'ä' 是 (扩展) ASCII 228。
?>

PHP 接受任意字节序列作为变量名。不遵循上述命名规则的变量名只能在运行时动态访问。有关如何访问它们的信息,请参阅 可变变量

示例 #2 访问模糊的变量名

<?php
${'invalid-name'} = 'bar';
$name = 'invalid-name';
echo ${
'invalid-name'}, " ", $$name;
?>

上面的示例将输出

bar bar

默认情况下,变量总是按值赋值。也就是说,当表达式赋值给变量时,原始表达式的整个值都会复制到目标变量中。这意味着,例如,在将一个变量的值赋给另一个变量后,更改其中一个变量不会影响另一个变量。有关此类赋值的更多信息,请参阅关于 表达式 的章节。

PHP 还提供另一种将值赋给变量的方式:按引用赋值。这意味着新变量只是引用(换句话说,“成为原始变量的别名”或“指向”)原始变量。对新变量的更改会影响原始变量,反之亦然。

要按引用赋值,只需在被赋值变量(源变量)的开头添加一个和号 (&)。例如,下面的代码片段两次输出 'My name is Bob'

<?php
$foo
= 'Bob'; // 将值 'Bob' 赋给 $foo
$bar = &$foo; // 通过 $bar 引用 $foo。
$bar = "My name is $bar"; // 更改 $bar...
echo $bar;
echo
$foo; // $foo 也被更改了。
?>

需要注意的是,只有变量才能按引用赋值。

<?php
$foo
= 25;
$bar = &$foo; // 这是一个有效的赋值。
$bar = &(24 * 7); // 无效;引用了一个未命名的表达式。

function test()
{
return
25;
}

$bar = &test(); // 无效,因为 test() 没有按引用返回变量。
?>

PHP 中不需要声明变量,但是这是一个非常好的实践。访问未定义的变量将导致 E_WARNING(在 PHP 8.0.0 之前,为 E_NOTICE)。未定义变量的默认值为 nullisset() 语言结构可用于检测变量是否已被初始化。

示例 #3 未初始化变量的默认值

<?php
// 未设置且未引用(无使用上下文)的变量。
var_dump($unset_var);
?>

上面的示例将输出

Warning: Undefined variable $unset_var in ...
NULL

PHP 允许从未定义的变量中自动创建数组(自动创建新数组)。将元素添加到未定义的变量将创建一个新数组,并且不会生成警告。

示例 #4 从未定义的变量中自动创建数组

<?php
$unset_array
[] = 'value'; // 不会生成警告。
?>
警告

依赖未初始化变量的默认值在将一个文件包含在另一个使用相同变量名的文件中时是有问题的。

可以使用 unset() 语言结构销毁变量。

有关变量相关函数的信息,请参阅 变量函数参考

添加注释

用户贡献的注释 1 条注释

13
anisgazig at gmail dot com
3 年前
清晰的变量声明规则和分类概念

变量声明规则

1.以美元符号 ($) 开头
2.变量名的第一个字母来自 a-zA-z_
3.变量名的后续字母来自 a-zA-Z0-9_
4.无空格,无语法错误

变量分类

变量主要分为两种类型
1.预定义变量
2.用户定义变量

预定义变量
PHP 8 中有 12 个预定义变量
1.$GLOBALS
2.$_SERVER
3.$_REQUEST
4.$_FILES
5.$_ENV
6.$_SESSION
7.$_COOKIE
8.$_GET
9.$_POST
10.$http_response_header
11.$argc
12.$argv

用户定义变量
用户定义变量分为 3 种类型
1.变量作用域
2.可变变量
3.引用变量

变量作用域
变量作用域分为 3 种类型
1.局部作用域
2.全局作用域
3.静态变量
To Top