Mảng và đối tượng trong PHP là gì?

Các tiêu chuẩn để phát triển WordPress đang dần chuyển từ các lượt mã thủ tục thiếu tính trừu tượng phù hợp sang mã RẮN hơn và hướng đối tượng

Đó là một bước đi đúng hướng, nhưng đừng quên hai điều quan trọng thường bị bỏ qua trong các cuộc thảo luận này. đặt mã trong một lớp không làm cho nó trở thành “hướng đối tượng” và PHP hướng đối tượng, theo định nghĩa, không tốt hơn

Hôm nay, chúng ta sẽ thảo luận về đối tượng là gì và vai trò của nó là gì. Sau đó, chúng ta có thể thảo luận về ý nghĩa của “lập trình hướng đối tượng thực sự” và liệu mã của bạn có thực sự quan trọng hay không nếu mã của bạn là “đúng OOP” hay không

Mảng so với đối tượng

PHP có hai kiểu dữ liệu hợp chất [còn được gọi là hỗn hợp]. đối tượng và mảng. Các kiểu dữ liệu phức hợp yêu cầu thành phần — quá trình kết hợp các kiểu dữ liệu khác thành một “đơn vị. ” Trong các ngôn ngữ hướng đối tượng thuần túy, chúng ta phải soạn các kiểu dữ liệu mà trong PHP có sẵn cho chúng ta dưới dạng các kiểu nguyên thủy

Khi giải thích về đối tượng và lập trình hướng đối tượng, tôi nghĩ sẽ rất hữu ích khi bắt đầu bằng cách nói về mảng, mảng không phải là đối tượng. Sự khác biệt cơ bản giữa mảng PHP và đối tượng là chúng ta không thể thay đổi quy tắc của mảng. PHP ngôn ngữ xác định những gì chúng ta có thể và không thể làm với một mảng và không có cách nào để chương trình PHP của bạn thay đổi điều đó

Mặt khác, các đối tượng có các quy tắc được xác định bởi chương trình PHP mà chúng đang chạy trong đó. Những quy tắc này là những gì chúng ta gọi là các lớp

Trong khi mọi mảng hoạt động theo cùng một quy tắc, mỗi đối tượng hoạt động theo quy tắc của đối tượng và theo quy tắc của lớp được sử dụng để tạo ra chúng

trường hợp

Đôi khi các từ "lớp" và "đối tượng" được sử dụng thay thế cho nhau, nhưng chúng không nên. Như tôi đã nói ở trên, các lớp là các quy tắc để tạo các đối tượng, nhưng các đối tượng đó không tồn tại cho đến khi chúng được khởi tạo

Khởi tạo lớp xảy ra bằng cách sử dụng từ khóa mới. Nếu tôi muốn một phiên bản của lớp WP_Query, tôi có thể tạo một phiên bản như thế này

$products = new WP_Query[ [ 'post_type' => 'product' ] ];

Khởi tạo một lớp và gọi một hàm rất giống nhau, nhưng các lệnh gọi hàm không được đặt trước từ khóa mới

Khi một lớp được khởi tạo, hàm tạo của nó được gọi ngay lập tức và bất kỳ đối số nào được đưa vào lớp đều được chuyển đến hàm tạo. Trình xây dựng là một ví dụ về phương thức ma thuật PHP. Chúng là một cách để đưa dữ liệu trực tiếp vào đối tượng và cũng để chạy mã ngay lập tức khi khởi tạo

Như bạn đã nhận thấy, tôi đã chuyển một mảng đối số cho lớp WP_Query khi tôi khởi tạo đối tượng. Nếu bạn nhìn vào bên trong hàm tạo của WP_Query, nếu một đối số mà nó chấp nhận không trống, thì đối số đó sẽ được chuyển đến phương thức truy vấn của lớp đó

Phương thức truy vấn đặt ra quy trình mà WP_Query được sử dụng để truy vấn cơ sở dữ liệu để nhận bài đăng. Tách phương thức đó ra khỏi hàm tạo là một thiết kế tốt vì nó giúp hàm tạo không đảm nhận quá nhiều trách nhiệm. Nó cũng cho phép chúng tôi kiểm soát khi truy vấn được chạy. Mặc dù hầu hết thời gian bạn có thể chạy truy vấn ngay lập tức, nhưng tính linh hoạt trong việc tách truy vấn[] khỏi __construct[] rất hữu ích

Mặc dù WP_Query có rất nhiều quy tắc, nhưng chúng áp dụng cho tất cả các đối tượng hoặc WP_Query, điều đó không có nghĩa là tất cả các đối tượng của WP_Query đều giống nhau. Đó là bởi vì các thuộc tính của chúng sẽ chứa thông tin khác nhau. Ví dụ, nhìn vào mã này

$products = new WP_Query[ [ 'post_type' => 'product' ] ];

$orders = new WP_Query[ [ 'post_type' => 'shop_order' ];

Bây giờ chúng ta có hai phiên bản của lớp WP_Query. Mỗi người sẽ chứa các bài đăng hoàn toàn khác nhau trong thuộc tính bài đăng của họ, nhưng cách mà những bài đăng đó đến đó và cách chúng có thể được truy cập hoặc thay đổi là giống nhau

Một đối tượng là một thể hiện của cái gì

Trong phần trước, tôi đã nói về các đối tượng là phiên bản của WP_Query. Điều chúng tôi muốn nói là những đối tượng này được tạo bằng cách sử dụng lớp WP_Query. Tuy nhiên, đừng quên rằng các lớp có thể được phân lớp. Khi một đối tượng là một thể hiện của một lớp mở rộng một lớp khác, thì nó được coi là một thể hiện của cả hai lớp

Đây là một điểm khác biệt quan trọng vì nó xác định cách hàm is_a[] sẽ hoạt động cũng như quy tắc gợi ý nhập. Nếu tôi tạo một lớp mở rộng WP_Query, nó sẽ được coi là một phiên bản của WP_Query. Đây là một trong những tính năng của kế thừa đối tượng khiến nó trở nên hữu ích

Giả sử bạn có một lớp trừu tượng có tên là “xã hội” và hai lớp mở rộng nó có tên là “Facebook” và “Twitter”. Bạn có thể xác định thể hiện của các lớp này bằng cách kiểm tra xem chúng có phải là thể hiện của “xã hội. ”

$này là gì?

Bên trong một lớp, bạn có thể truy cập phiên bản hiện tại bằng cách sử dụng biến đặc biệt $this. Ngoài lớp học, bạn không thể sử dụng $this nếu không PHP sẽ báo lỗi. Bên trong một lớp, bạn sử dụng $this để truy cập các thuộc tính hoặc phương thức của lớp đó

Biến $this luôn đề cập đến đối tượng hiện tại, bất kể bạn thuộc lớp nào trong hệ thống phân cấp thừa kế. Mặt khác, từ khóa “self” đề cập đến lớp hiện tại, không phải trường hợp hiện tại. Thuộc tính tĩnh không phải là duy nhất cho một đối tượng cụ thể, chúng là duy nhất cho một lớp

Lập trình hướng đối tượng “đúng”

Rất nhiều lần chúng ta thấy các lớp không thực sự đại diện cho một đối tượng rõ ràng. Thay vào đó, chúng là một tập hợp các chức năng liên quan. Trong trường hợp này, lớp đóng vai trò là một không gian tên. Điều này có thể hoặc không thể là một điều xấu

Chúng ta luôn nên kiểm tra những tình huống này theo từng trường hợp. Theo tôi, vấn đề là liệu mã có thể được viết lại thành một tập hợp các hàm không có trong một lớp hay không. Tôi nói điều này bởi vì viết một lớp, chỉ để tránh sử dụng các tiền tố chức năng duy nhất không phải là lý do để sử dụng một lớp, và kém hiệu quả hơn và kém linh hoạt hơn

Nếu tiện ích duy nhất của một lớp là tránh sử dụng các tiền tố duy nhất, thì tại sao không chỉ nhóm các hàm vào một tệp và sử dụng một không gian tên trong tệp đó?

Tuy nhiên, hãy nhớ rằng các lớp có tính kế thừa, khả năng hiển thị và các thuộc tính mà một nhóm chức năng không có. Đây là những lý do hoàn toàn chính đáng để sử dụng một lớp, ngay cả khi nó không phải là PHP hướng đối tượng “đúng”

Trong những tình huống này, bạn thường xử lý một lớp mà một thể hiện không thể phân biệt được với thể hiện tiếp theo. Khởi tạo các lớp này thành các đối tượng và theo dõi các đối tượng đó hầu như luôn có mùi mã xấu và không cần thiết. Trong những tình huống này, tốt hơn hết là khai báo tất cả các phương thức của lớp tĩnh, vì vậy việc khởi tạo là không cần thiết

Nhiều người sẽ nói với bạn rằng chỉ vì bạn đang sử dụng một lớp không có nghĩa là bạn đang sử dụng lập trình hướng đối tượng. Họ đúng. Chỉ cần đừng quên rằng lập trình hướng đối tượng không tốt hơn về mặt phân loại so với các lựa chọn thay thế

Mảng và đối tượng là gì?

Đối tượng mảng. Mảng là cấu trúc dữ liệu lưu trữ thông tin trong một tập hợp các địa chỉ bộ nhớ liền kề . Trong thực tế, điều này có nghĩa là bạn có thể lưu trữ các biến và đối tượng khác bên trong một mảng và có thể truy xuất chúng từ mảng bằng cách tham chiếu đến số vị trí của chúng trong mảng.

Sự khác biệt giữa mảng và đối tượng trong PHP là gì?

Sự khác biệt cơ bản giữa mảng PHP và đối tượng là chúng ta không thể thay đổi quy tắc của mảng . PHP ngôn ngữ xác định những gì chúng ta có thể và không thể làm với một mảng và không có cách nào để chương trình PHP của bạn thay đổi điều đó. Mặt khác, các đối tượng có các quy tắc được xác định bởi chương trình PHP mà chúng đang chạy trong đó.

Mảng đối tượng trong PHP là gì?

Một đối tượng là một thể hiện của một lớp. Nó chỉ đơn giản là một mẫu vật của một lớp và được cấp phát bộ nhớ. Mảng là cấu trúc dữ liệu lưu trữ một hoặc nhiều loại giá trị tương tự trong một tên duy nhất nhưng mảng kết hợp khác với một mảng PHP đơn giản. Một mảng chứa chỉ số chuỗi được gọi là mảng kết hợp.

Đối tượng trong PHP là gì?

Đối tượng là một thể hiện riêng lẻ của cấu trúc dữ liệu được định nghĩa bởi một lớp . Chúng tôi định nghĩa một lớp một lần và sau đó tạo nhiều đối tượng thuộc về nó. Các đối tượng còn được gọi là thể hiện.

Chủ Đề