PHP - Compound Types

Các kiểu dữ liệu trong PHP có thể là "kiểu nguyên thủy" hoặc "kiểu phức hợp". Các kiểu số nguyên, số thực, Boolean và chuỗi là các kiểu nguyên thủy, trong khi các kiểu mảng và đối tượng được phân loại là các kiểu phức hợp. Giá trị của nhiều kiểu khác nhau có thể được lưu trữ cùng nhau trong một biến duy nhất của kiểu phức hợp.

Trong PHP, đối tượng và mảng là hai kiểu dữ liệu phức hợp.

  • Một mảng là một tập hợp có thứ tự của các phần tử thuộc các kiểu dữ liệu khác nhau, không nhất thiết phải cùng loại.

  • Một đối tượng là một thể hiện của một lớp đã được định nghĩa sẵn hoặc do người dùng định nghĩa, bao gồm các thuộc tính và phương thức.

Arrays in PHP

Một mảng là một cấu trúc dữ liệu lưu trữ một hoặc nhiều giá trị dữ liệu trong một biến duy nhất. Một mảng trong PHP là một bản đồ có thứ tự liên kết các giá trị với các khóa của chúng.

  • Có hai cách để khai báo một mảng trong PHP. Một là sử dụng hàm tích hợp sẵn array(), và cách khác là đặt các phần tử của mảng bên trong dấu ngoặc vuông.

  • Một mảng chỉ chứa các giá trị được gọi là một indexed array . Mỗi giá trị được xác định bởi một chỉ số vị trí bắt đầu từ 0.

  • Nếu mảng là một tập hợp các cặp khóa-giá trị, nó được gọi là một associative array . Thành phần khóa của cặp có thể là một số hoặc một chuỗi, trong khi phần giá trị có thể thuộc bất kỳ loại nào.

The array() Function in PHP

Hàm array() tích hợp sẵn sử dụng các tham số được cung cấp cho nó và trả về một đối tượng kiểu mảng. Một hoặc nhiều tham số cách nhau bằng dấu phẩy là các phần tử trong mảng.

array(mixed ...$values): array

Mỗi giá trị trong dấu ngoặc đơn có thể là một giá trị đơn lẻ (nó có thể là một số, chuỗi, bất kỳ đối tượng nào hoặc thậm chí là một mảng khác), hoặc là một cặp khóa-giá trị. Mối liên kết giữa khóa và giá trị của nó được biểu thị bằng ký hiệu ">".

Example

Hãy xem ví dụ sau đây −

$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)
);

Using Square Brackets [ ]

Thay vì sử dụng hàm array(), các phần tử mảng được phân tách bằng dấu phẩy cũng có thể được đặt bên trong dấu ngoặc vuông để khai báo một đối tượng mảng. Trong trường hợp này, các phần tử có thể là giá trị đơn lẻ, một chuỗi hoặc một mảng khác.

$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]
];

Accessing Array Elements

Để truy cập bất kỳ phần tử nào từ một mảng đã cho, bạn có thể sử dụng cú pháp array[key]. Đối với mảng chỉ mục, hãy đặt chỉ số bên trong dấu ngoặc vuông, vì chỉ số đó tự nó là khóa.

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

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

Nó sẽ tạo ra output

int(20)
int(2)

Array Traversal in PHP

Bạn cũng có thể sử dụng vòng lặp foreach để lặp qua một mảng có chỉ số.

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

Nó sẽ tạo ra output

10
20
30
40
50

Lưu ý rằng PHP xử lý mảng chỉ số như một mảng kết hợp, với chỉ số được coi là khóa. Thực tế này có thể được xác minh qua đầu ra của hàm var_dump() của mảng.

Chúng ta có thể giải nén từng phần tử của mảng chỉ mục vào các biến key và value với cú pháp foreach

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

Nó sẽ tạo ra output

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

Vòng lặp foreach cũng được sử dụng để lặp qua một mảng liên kết, mặc dù bất kỳ loại vòng lặp nào khác cũng có thể được sử dụng với một số điều chỉnh.

Hãy xem xét việc triển khai vòng lặp foreach , với mỗi cặp k-v được giải nén thành hai biến.

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

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

Nó sẽ tạo ra output

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

Objects in PHP

Trong PHP, một đối tượng là một kiểu dữ liệu phức hợp. Nó là một thể hiện của một lớp được định nghĩa sẵn hoặc do người dùng định nghĩa. Dưới đây là một lớp PHP đơn giản −

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

Để khai báo một đối tượng của một lớp, chúng ta cần sử dụng toán tử new .

$obj=new SayHello;

Chúng ta bây giờ có thể gọi phương thức của nó −

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

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

Nó sẽ tạo ra output

string(6) "object"
Hello World

stdClass

PHP cung cấp stdClass như một lớp rỗng chung, rất hữu ích cho việc thêm thuộc tính một cách động và ép kiểu. Một đối tượng của stdClass ban đầu là null. Chúng ta có thể thêm thuộc tính vào nó một cách động.

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

   print_r($obj);
?>

Nó sẽ tạo ra output

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

Array to Object Conversion in PHP

Một mảng trong PHP có thể được ép kiểu thành một đối tượng như sau −

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

   print_r($obj);
?>

Nó sẽ tạo ra output

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

Object to Array Conversion in PHP

Ngược lại, một đối tượng có thể được chuyển đổi thành một mảng. Hãy xem ví dụ sau đây −

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

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

Nó sẽ tạo ra output

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

Scalar Type to Object Type Conversion in PHP

Một biến của bất kỳ kiểu số học nào cũng có thể được chuyển đổi thành một đối tượng bằng cách ép kiểu. Giá trị của biến số học trở thành giá trị của thuộc tính số học của đối tượng.

<?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);
?>

Nó sẽ tạo ra output

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