数据结构

变量变量

PHP 有一个遗留概念,叫做“变量变量”。这是一个较旧的、更有限的编程概念,早于复合数据结构的出现。由于 PHP 现在支持复合数据结构,变量变量的概念实际上已经过时。

PHP 手册中提到:

“有时能够使用可变的变量名是很方便的。也就是说,变量名可以动态地设置和使用。”

这种方法在不支持复合数据结构的编程语言中历史上曾被使用。在 PHP 中,没有一个程序功能或算法是通过变量变量获得的,而不能通过复合数据结构来获得。

此外,“变量变量”容易出错,并且需要更多的维护工作量。

基本概念

数据结构是使用常规 PHP 变量表示复合实体的一种方式。

熟悉数据库设计和数据库实现的人会知道数据库规范化的概念。

PHP 中的数据结构代表了类似的概念。每当处理复杂概念并在 PHP 中表示它们时,数据结构是一种规范化 PHP 变量的方式,以一致和统一地表示复杂概念。

PHP 原生数据结构

  • 字符串 是表示单一值(标量)的结构。
  • 数组 是表示值的列表(向量)的结构。
示例

字符串示例:

$person_name = 'Alice';

数组示例:

$person_names = Array( 0 => 'Alice', 1 => 'Bob', 2 => 'Charlie');
$alice_info   = Array( 0 => 'Alice', 1 => 'Female', 2 => '26', 3 => 'alice@example.com');

PHP 复合数据结构

  • SimpleDictionary 是表示无序名称-值对序列的结构。在 PHP 中,这是通过标准数组实现的,数组索引使用字符串。
  • SimpleSequence 是表示有序值序列的结构。在 PHP 中,这是通过标准数组实现的,数组索引使用数字。
  • SimpleTable (aod) 是一个有序序列,由一个或多个 SimpleDictionary 组成,每个 SimpleDictionary 实例都有匹配的名称。
  • SimpleTable (aoa) 是一个序列,由一个或多个 SimpleSequence 组成,每个 SimpleSequence 实例都有相应的索引。

方括号方法允许通过直接设置值来设置。例如,要使 $foobar[1] = $foo,只需要这样做:

示例

SimpleDictionary 示例

$person_names = Array( 'person1' => 'Alice', 'person2' => 'Bob', 'person3' => 'Charlie' );
$alice_info   = Array( 'first_name' => 'Alice', 'sex' => 'Female', 'age' => '26', 'email' => 'alice@example.com' );

更复杂的 SimpleDictionary 示例

$user_profile = Array(
  'main' => Array(
    'first_name'  => "Archibald",
    'last_name'   => "Shaw",
    'sex'         => "male",
    'age'         => "33",    
  ),
  'guardian' => Array(
    'first_name' => "",
    'last_name'  => "",
  ),
  'children' => Array(
    0 => Array(
      'first_name' => "Sally",
      'last_name'  => "Shaw",
    ),
    1 => Array(
      'first_name' => "Scott",
      'last_name'  => "Shaw",
    ),
  ),
);

备注和参考资料

[1] Stack Overflow: 变量变量的实际用途

最后修改: 2025年01月10日 星期五 00:54