最大差異是:一個標量只能存放一個數據,而陣列可以存放多個數據;且標量類型是值傳遞,而陣列是引用傳遞。在PHP中,標量資料有四種:布林型、字串、整數、浮點型,它們一次只能存一個值;而陣列是一組資料的集合,可儲存任意多個、任意類型的數據。
本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦
php標量資料和陣列的差異
最大差異:一個標量只能存放一個數據,而陣列可以存放多個資料。
其他區別:標量類型是值傳遞,而陣列是引用傳遞。
標量資料型態是資料結構最基礎的單元,只能儲存一個資料。在PHP 中的標量資料型別分為四種:
#類型 | ##函數|
---|---|
最簡單的資料類型,只有兩個值:true(真) / false(假) | |
字串是連續的字元序列 | |
整數資料型別包含所有的整數,其可以是整數也可以是負數 | |
浮點型資料型別也是用來儲存數字,與整數型不同它包含小數 |
1)布林型(boolean)
布林型是PHP 中較為常用的資料類型之一,它保存一個真值(true) 或假值(false)// 代码: $a = true; // 真值 $b = false; // 假值登入後複製
2)字串(string)
字串是連續的字元序列,由數字、字母、符號組成,字串的每個字元只佔一個位元組。字元包含以下幾種型別
#數字型別 | 如:1、2、3等 |
字母型別 | 如:a、b、c等 |
不可见字符是比较特殊的字符用于控制字符串格式输出,在浏览器上不可见,只是能看到字符串的输出结果。
在 PHP 中有 3 种定义字符串的方式:
a.单引号(')
$a = 'zZ爱吃菜';
b.双引号(")
$b = "zZ爱吃菜";
单引号与双引号的区别:双引号所包含的变量会自动被替换成实际值,而单引号包含的变量则按普通类型输出。例如:
$a = 'hello'; $b = '$a china'; $c = "$a world"; // 个人建议这样写:$c = "{$a} world"; 不容易产生歧义 echo $b; echo $c; 结果: $a china hello world
c.定界符(<<<)
如果用传统的输出方法——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,以免出现语法错误。如果是一两处还可以容忍,但是要是一个完整的html文本或者是一个200行的js我想是谁都会崩溃的。这就是PHP为什么要引入一个定界符的原因——至少一大部分原因是这样的。
1.PHP 定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
2.PHP 定界符中字符串内容不需要转义
// 定义 <<<Eof …… Eof;
不需要对付出转义的好处:直接输出你想要的 html 字符串
$name = 'kitty'; echo <<<Eof <table height="20"> <tr><td> {$name}<br/> <script> var p='hello world'; document.writeln(p); </script> </td></tr> </table> <select> <option>aaaaa</option> <option>aaaaa</option> <option>aaaaa</option> </select> Eof;
注意:使用定界符输出字符串,结束标识符必须单独另起一行,并且不允许有空格。
3)整型(integer)
整型数据类型只能包含整数,在 32 位的操作系统中,有效范围是: -2147483648(2的31次方) ~ 217483647 (2的31次方-1)。整型可以使用十进制、八进制和十六进制表示,如:八进制(数字前面必须加0)、十六进制(数字前面必须加0x)
$int1 = 1234; $int2 = 01234; $int3 = 0x1234; echo "十进制的结果是:{$int1}<br>"; echo "八进制的结果是:{$int2}<br>"; echo "十六进制的结果是:{$int3}<br>"; 结果 十进制的结果是:1234 八进制的结果是:668 十六进制的结果是:4660
注意:如果给定的数值超出了 int 型所能表示的最大范围,将会被当作 float 型处理,这种情况叫做:整型溢出。表达式最后的运算结果超出 int 范围,也会返回 float 型
4)浮点型(float)
浮点型数据类型可以用来存储整数,也可以保存小数。它提供的精度比整数大得多。 在32系统中有效范围: 1.7E-308 ~ 1.7E+308
在 PHP 4.0 之前的版本 浮点型被标识为 double,也叫双精度浮点数,两者没什么区别
// 定义 $a = 1.036; $b = 2.035; $c = 3.48E2; // En代表10*n, E1 代表 * 10, $c = 348 echo $c; 结果:348
数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。
因为 PHP 是弱数据类型的编程语言,所以 PHP 中的数组变量可以存储任意多个、任意类型的数据,并且可以实现其他强数据类型中的堆、栈、队列等数据结构的功能。
数组 array 是一组有序的变量,其中每个值被称为一个元素。每个元素由一个特殊的标识符来区分,这个标识符称为键(也称为下标)。
数组中的每个实体都包含两项,分别是键(key)和值(value)。可以通过键值来获取相应的数组元素,这些键可以是数值键,也可以是关联键。如果说变量是存储单个值的容器,那么数组就是存储多个值的容器。
PHP 数组比其他高级语言中的数组更加灵活,不但支持以数字为键名的索引数组,而且支持以字符串或字符串、数字混合为键名的关联数组。而在其他高级语言中,如 Java 或者 C++ 等语言的数组,只支持数字索引数组。
PHP 数组的结构如下图所示:
扩展知识:
在 PHP 中,标量类型数据是值传递的,而复合类型数据(对象和数组)是引用传递的。
但是复合类型数据的引用传递和用 & 符号明确指定的引用传递是有区别的,前者的引用传递是对象引用,而后者是指针引用。
在解释对象引用和指针引用之前,先让咱们 看多个 例子。
<?php echo "<pre class="brush:php;toolbar:false">"; class SampleClass { var $value; } $a = new SampleClass(); $a->value = $a; $b = new SampleClass(); $b->value = &$b; echo serialize($a); echo "\n"; echo serialize($b); echo "\n"; echo ""; ?>
这个例子的输出结果是这样的:
O:11:"SampleClass":1:{s:5:"value";r:1;} O:11:"SampleClass":1:{s:5:"value";R:1;}
大家 会发觉 ,这里变量 $a 的 value 字段的值被序列化成了 r:1,而 $b 的 value 字段的值被序列化成了 R:1。
但是对象引用和指针引用到底有什么区别呢?
看下面这个例子:
echo "<pre class="brush:php;toolbar:false">"; class SampleClass { var $value; } $a = new SampleClass(); $a->value = $a; $b = new SampleClass(); $b->value = &$b; $a->value = 1; $b->value = 1; var_dump($a); var_dump($b); echo "";
运行结果也许出乎你的预料:
object(SampleClass)#1 (1) { ["value"]=> int(1) } int(1)
改动 $a->value 的值仅仅是改动 了 $a->value 的值,而改动 $b->value 的值却改动 了 $b 本身,这就是对象引用和指针引用的区别。
推荐学习:《PHP视频教程》
以上是php標量資料和數組的最大差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!