本页是对变量在PHP中如何工作的完整总结。该文本以略带技术性的风格编写,初学者可能无法完全理解。如果你对完整的基础知识感兴趣,那么请阅读初学者教程和编写变量的原则。
变量是运行内存中的一个虚拟位置,它由名称'和
数据类型'定义。在数据类型中,变量就有一些`内容'。
在内部,PHP将变量表示为一个所谓的哈希表,即所有的变量都存储在一个搜索速度非常快的表中,所以访问每个变量所需的时间几乎是**不变的。
写作实例。
$a = 10;$b = '猫';$c = true;
样本中的每一行表示一个变量的定义。每个变量的名称以美元符号$
开头,后面是名称本身。等号可以用来给变量赋值。
在内部,这些变量将以哈希表的形式存储在内存中。
名称 | 类型 | 缩写 | 值 |
---|---|---|---|
$a |
整数 | int | 10 |
$b |
字符串 | 字符串 | cats |
$c |
boolean | bool | true ! |
变量根据访问权限和使用情况进行分类。
变量可以包含其当前数据类型所允许的任何内容。如果没有指定数据类型,它将根据内容自动确定(不建议这样做,因为它可能导致错误)。
数据类型是独立工作的,所以我们几乎可以使用任何类型。然而,如果我们想进行一些合并操作,我们必须始终确保转换为一种格式。
一个很好的例子是,例如数字的加法和乘法。
$x = 5; // 整数$y = 3; // 整数$z = $y + $y; // 变量$z将根据多个变量组成。
在这种情况下,PHP面临的问题是新创建的变量$z
将具有什么数据类型。如果它们是相同的数据类型,并且操作是可能的,那么数据类型就被继承了。
然而,有时我们可以用多种数据类型来执行一个操作。
$x = 1; // 整数$y = 3.14159; // 浮动$z = $y + $y; // 浮动
在这种情况下,我们将整数和浮点数合并。输出将是一个十进制的数字,所以使用float。在这种情况下,PHP会做一个叫做**动态重新分区的事情。
然而,我们不能总是依赖这种行为。例如,你想如何合并一个数字和一个字符串?
$x = 256; // 整数$y = '嘿,嘿!'; // 浮动$z = $y + $y; // ???
PHP是一种解释型语言,所以与其他编程语言相比,它有一些特殊性,其中之一是我们不必为变量指定数据类型,即每个变量根据其内容动态地改变其数据类型(除非另有说明)。不过,至少知道基本的数据类型是很好的,在优化应用程序或与数据库一起工作时尤其有用。
符号可以看起来像这样。
$x = (int) 25; //创建一个整数类型的变量
如果我们只知道这段源代码,那么变量$x
会有什么数据类型?
$x = $y;
它取决于变量$y
的数据类型,其值和数据类型都将被继承。在这种情况下,我们不知道变量$x
,所以我们不能继续评估代码,并且会抛出一个错误信息。
让我们有以下2个变量。
$x = 10;$y = '10';
变量$x
和$y
的内容有什么不同?
变量$x
是一个数字,$y
是一个字符串(包含一个 "1 "和一个 "0"),所以如果我们只是将变量存储在内存中,不进行任何操作,会影响数值。例如,以下2个条目将返回相同的结果。
echo $x + 5; //打印出15echo $y + 5; //打印出15
在第二种情况下,发生了所谓的动态覆盖,也就是说,变量转换了它的数据类型,这样就可以对它进行计算操作。这种行为不能总是被依赖,更多的是一种纠正行为,以修复写得不好的初级脚本。如果可能的话,总是用数据类型来存储数字,因为这样可以提高数字的精度,使它们在将来更容易使用。
**注意:**需要注意的是,我们不能完全任意地转换数据类型,所以这并不总是可能的。如果你把一个数据类型覆盖到其他(不兼容)的数据类型,要么转换可能根本没有发生,要么原来的内容可能被破坏或完全被破坏,并被另一个类型所取代。例如,如果你把一个字符串改写成一个整数(并且一些不是数字的文本被存储在变量中),那么值
1
将被存储在变量中,而不是数字值。
所有的字符串在内部都是作为一个字符数组来存储的。也就是说,每个字符都有自己的索引,可以被引用。如果我们不指定一个索引,整个字符串就会被处理。
$x = '让我们用PHP编程吧!';$n = 3;echo $x; // 这将打印出$x变量的全部内容。echo $x[0]; // 这将打印出$x变量的空字符。echo $x[$n]; // 这将打印出$x变量的第n个字符。
**注意:**PHP数字从零开始,即零字符是'P',第一个字符是'r'。
此外,字符是由字节转换的。例如,UTF-8编码中的字符 "no "有2个字节长,因此在滚动时,字符串中的字符索引将与实际位置不匹配,将使用2个索引来存储该字符。
一个数组元素的存在应该总是用isset()
函数来验证。
if (isset($x[$n])) {echo $x[$n];}
另外,你也可以用三元运算符很好地写下来。
echo $x[$n] ?? '';
让我们有以下变量。
$q = 'Lorem ipsum, ...';
然后将其值复制到下一个变量。
$qi = $q;
幸运的是,不会进行复制,PHP将只是在一个哈希表中存储一个对数值的引用。只有当其中一个变量的值应该改变时,该值才会被实际复制。这种行为由一个通常称为桥收集器的组件处理。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | zh