PHP - 複合型別



PHP中的資料型別可以是“標量型別”或“複合型別”。整數、浮點數、布林值和字串型別是標量型別,而陣列和物件型別則被分類為複合型別。在一個複合型別的單個變數中可以儲存多個型別的值。

在PHP中,物件和陣列是兩種複合資料型別。

  • 陣列是有序的元素集合,這些元素可以是其他資料型別,不一定是相同型別。

  • 物件是內建類或使用者定義類的例項,包含屬性和方法。

PHP中的陣列

陣列是一種資料結構,它在一個變數中儲存一個或多個數據值。PHP中的陣列是一個有序對映,它將值與其鍵關聯。

  • 在PHP中宣告陣列有兩種方法。一種是使用內建的`array()`函式,另一種是將陣列元素放在方括號內。

  • 僅包含值的陣列稱為索引陣列。每個值都由從0開始的位置索引標識。

  • 如果陣列是鍵值對的集合,則稱為關聯陣列。對中的鍵可以是數字或字串,而值可以是任何型別。

PHP中的`array()`函式

內建的`array()`函式使用給定的引數並返回一個數組型別的物件。一個或多個用逗號分隔的引數是陣列中的元素。

array(mixed ...$values): array

括號中的每個值可以是單個值(可以是數字、字串、任何物件甚至是另一個數組),也可以是鍵值對。“=>”符號表示鍵與其值之間的關聯。

示例

請看下面的例子:

$arr1 = array(10, "asd", 1.55, true);

$arr2 = array("one"=>1, "two"=>2, "three"=>3);

$arr3 = array(
   array(10, 20, 30),
   array("Ten", "Twenty", "Thirty"),
   array("physics"=>70, "chemistry"=>80, "maths"=>90)
);

使用方括號 [ ]

除了`array()`函式之外,也可以將用逗號分隔的陣列元素放在方括號內來宣告陣列物件。在這種情況下,元素也可以是單個值、字串或另一個數組。

$arr1 = [10, "asd", 1.55, true];

$arr2 = ["one"=>1, "two"=>2, "three"=>3];

$arr3 = [
   [10, 20, 30],
   ["Ten", "Twenty", "Thirty"],
   ["physics"=>70, "chemistry"=>80, "maths"=>90]
];

訪問陣列元素

要訪問給定陣列中的任何元素,可以使用`array[key]`語法。對於索引陣列,將索引放在方括號內,因為索引本身就是鍵。

<?php
   $arr1 = [10, 20, 30];
   $arr2 = array("one"=>1, "two"=>2, "three"=>3);

   var_dump($arr1[1]);
   var_dump($arr2["two"]);
?>

它將產生以下輸出

int(20)
int(2)

PHP中的陣列遍歷

您還可以使用`foreach`迴圈迭代索引陣列。

<?php
   $arr1 = [10, 20, 30, 40, 50];
   foreach ($arr1 as $val){
      echo "$val\n";
   } 
?>

它將產生以下輸出

10
20
30
40
50

請注意,PHP內部將索引陣列視為關聯陣列,其中索引被視為鍵。可以使用`var_dump()`輸出陣列來驗證此事實。

我們可以使用foreach語法將索引陣列的每個元素解包到鍵和值變數中:

<?php
   $arr1 = [10, 20, 30, 40, 50];
   foreach ($arr1 as $key => $val){
      echo "arr1[$key] = $val" . "\n";
   }
?>

它將產生以下輸出

arr1[0] = 10
arr1[1] = 20
arr1[2] = 30
arr1[3] = 40
arr1[4] = 50

`foreach`迴圈也用於迭代關聯陣列,儘管任何其他型別的迴圈也可以透過一些操作來使用。

讓我們看看foreach迴圈的實現,其中每個鍵值對都解包到兩個變數中。

<?php
   $capitals = array(
      "Maharashtra"=>"Mumbai", 
      "Telangana"=>"Hyderabad", 
      "UP"=>"Lucknow", 
      "Tamilnadu"=>"Chennai"
   );

   foreach ($capitals as $k=>$v) {
      echo "Capital of $k is $v" . "\n";
   }
?>

它將產生以下輸出

Capital of Maharashtra is Mumbai
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai

PHP中的物件

在PHP中,物件是一種複合資料型別。它是內建類或使用者定義類的例項。下面是一個簡單的PHP類:

class SayHello {
   function hello() {
      echo "Hello World";
   }
}

要宣告一個類的物件,我們需要使用`new`運算子。

$obj=new SayHello;

我們現在可以呼叫它的方法:

<?php
   class SayHello {
      function hello() {
         echo "Hello World". PHP_EOL;
      }
   }

   $obj=new SayHello;
   var_dump(gettype($obj));
   $obj->hello();
?>

它將產生以下輸出

string(6) "object"
Hello World

stdClass

PHP提供`stdClass`作為通用的空類,它對於動態新增屬性和強制轉換很有用。`stdClass`的物件最初為null。我們可以動態地向其新增屬性。

<?php
   $obj=new stdClass;
   $obj->name="Deepak";
   $obj->age=21;
   $obj->marks=75;

   print_r($obj);
?>

它將產生以下輸出

stdClass Object (
   [name] => Deepak
   [age] => 21
   [marks] => 75
)

PHP中的陣列到物件的轉換

PHP中的陣列可以按如下方式強制轉換為物件:

<?php
   $arr=array("name"=>"Deepak", "age"=>21, "marks"=>75);
   $obj=(object)$arr;

   print_r($obj);
?>

它將產生以下輸出

stdClass Object (
   [name] => Deepak
   [age] => 21
   [marks] => 75
)

PHP中的物件到陣列的轉換

相反,物件可以強制轉換為陣列。請看下面的例子:

<?php
   $obj=new stdClass;
   $obj->name="Deepak";
   $obj->age=21;
   $obj->marks=75;

   $arr=(array)$obj;
   print_r($arr);
?>

它將產生以下輸出

Array
(
   [name] => Deepak
   [age] => 21
   [marks] => 75
)

PHP中標量型別到物件型別的轉換

任何標量型別的變數也可以透過型別轉換轉換為物件。標量變數的值成為物件標量屬性的值。

<?php
   $name="Deepak";
   $age=21;
   $percent=75.50;

   $obj1=(object)$name;
   print_r($obj1);

   $obj2=(object)$age;
   print_r($obj2);

   $obj3=(object)$percent;
   print_r($obj3);
?>

它將產生以下輸出

stdClass Object
(
   [scalar] => Deepak
)
stdClass Object
(
   [scalar] => 21
)
stdClass Object
(
   [scalar] => 75.5
)
廣告