php標量資料和陣列的最大區別是什麼

2022-05-19 22:00:42

最大區別是:一個標量只能存放一個資料,而陣列可以存放多個資料;且標量型別是值傳遞,而陣列是參照傳遞。在PHP中,標量資料有四種型別:布林型、字串、整型、浮點型,它們一次只能存一個值;而陣列是一組資料的集合,可儲存任意多個、任意型別的資料。

本教學操作環境:windows7系統、PHP7.1版、DELL G3電腦

php標量資料和陣列的區別

  • 最大區別:一個標量只能存放一個資料,而陣列可以存放多個資料。

  • 其他區別:標量型別是值傳遞,而陣列是參照傳遞。

什麼是標量資料

標量資料型別是資料結構最基礎的單元,只能儲存一個資料。在 PHP 中的標量資料型別分為四種:

型別功能
boolean(布林型)最簡單的資料型別,只有兩個值:true(真) / false(假)
string(字串)字串是連續的字元序列
integer(整型)整型資料型別包含所有的整數,其可以是整數也可以是負數
float(浮點型)浮點型資料型別也是用來儲存數位,與整型不同它包含小數

1)布林型(boolean)

布林型是 PHP 中較為常用的資料型別之一,它儲存一個真值(true) 或 假值(false)

// 程式碼:
$a = true; // 真值
$b = false; // 假值

2)字串(string)

字串是連續的字元序列,由數位、字母、符號組成,字串的每個字元只佔一個位元組。字元包含以下幾種型別

字元型別名內容
數位型別如:1、2、3等
字母型別如:a、b、c等
特殊型別如:#、$、^、&等
不可見型別如:\n(換行符)、\r(回車)、\t(tab字元)等

不可見字元是比較特殊的字元用於控制字串格式輸出,在瀏覽器上不可見,只是能看到字串的輸出結果。

在 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 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 "</pre>";
?>

這個例子的輸出結果是這樣的:

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 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 "</pre>";

執行結果也許出乎你的預料:

object(SampleClass)#1 (1) {
   ["value"]=>
   int(1)
}
int(1)

改動 $a->value 的值僅僅是改動 了 $a->value 的值,而改動 $b->value 的值卻改動 了 $b 本身,這就是物件參照和指標參照的區別。

推薦學習:《》

以上就是php標量資料和陣列的最大區別是什麼的詳細內容,更多請關注TW511.COM其它相關文章!