Hướng dẫn dùng hasproperty trong PHP
Thuộc tính (property) và phương thức (method) là hai thành phần cơ bản tạo nên một class trong PHP. Trong đó, thuộc tính là thành phần chứa dữ liệu trong class PHP. Show Bài học này sẽ xem xét chi tiết các vấn đề liên quan đến khai báo và sử dụng property trong PHP class. Khai báo property trong PHP classProperty là thành phần chứa dữ liệu của object. Khi xây dựng class, property được thể hiện như khai báo biến thông thường trong PHP. Tuy nhiên việc khai báo property trong class có những điểm khác biệt so với khai báo biến toàn cục / biến cục bộ. Hãy xem ví dụ sau: class Employee { public $name = "John"; private $title; private $wage; } Trong class Employee trên chúng ta khai báo ba property, $ Sự khác biệt đầu tiên
giữa property và biến ở chỗ, property bắt buộc phải khai báo với một trong các từ khóa điều khiển truy cập: Sự khác biệt thứ hai là property có thể không cần gán giá trị lúc khai báo, còn khi khai báo biến trong PHP bạn phải gán giá trị. Trong ví dụ trên bạn thấy property $ Sở dĩ có đặc điểm này là property trong class PHP chỉ đóng vai trò là khuôn mẫu về dữ liệu. Chỉ khi nào tạo object, property mới thực sự chứa dữ liệu. Do vậy, lúc khai báo property trong class thì không cần gán dữ liệu. Tuy nhiên, khi không gán giá trị lúc khai báo tiềm ẩn những hậu quả khi sử dụng object. Vì vậy, khi khai báo property trong class, người ta khuyến khích gán luôn giá trị đầu. Khi này, khi tạo object mà không gán giá trị khác, property vẫn có giá trị ban đầu. Đây là tình
huống với property $ Mặc dù không bắt buộc, bạn nên khai báo property tập trung ở phần đầu của class. Không nên khai báo property phân tán nhiều nơi trong class. Việc này giúp bạn quả lý code tốt hơn, nhất là khi khối lượng code trong class tăng lên. Tương tự như với biến, khi đặt tên cho property bạn có thể sử dụng các kiểu như camelCase hoặc snake_case. camelCase: viết thường chữ cái đầu tiên; nếu tên gồm nhiều từ thì các từ viết sát nhau và viết hoa chữ cái đầu các từ tiếp theo. Truy xuất propertyTruy xuất property, hiểu một cách đơn giản, chính là sử dụng giá trị lưu trong property đó. Truy xuất property có hai chiều: đọc giá trị từ property, ghi giá trị mới vào property. Bạn chỉ có thể truy xuất property thông qua object chứ không thể truy xuất property qua class. Nghĩa là, trước khi sử dụng property, bạn cần khai báo và khởi tạo object của class. Hãy xem ví dụ sau: class Employee { public $name; public $title; public $wage; } $joe = new Employee(); $joe->name = "Joe Biden"; $joe->title = "Mr."; $joe->wage = 100000; echo "Hello, my name is $joe->title $joe->name"; Trong ví dụ này chúng ta tạo class Employee với ba property $name, $title và $wage. Object $joe được tạo ra từ class Employee qua lệnh Sau đó chúng ta ghi giá trị cho từng property của $joe qua các lệnh:
Cuối cùng chúng ta sử dụng
(đọc) các giá trị từ property $title và $name trong lệnh Bạn có thể thấy, để truy xuất property, chúng ta sử dụng phép toán Đây là cách thức truy cập property từ ngoài class (client code). Truy xuất property trong code của class, $thisNhư trên đã nói, property phải truy xuất từ object. Nếu code truy xuất property nằm ngoài class, chúng ta tạo object và truy xuất qua tên object. Hãy hình dung một tình huống khác. Trong class Employee bạn muốn khai báo một phương thức print() giúp in thông tin về nhân sự. Rõ ràng trong code của print() khi khai báo class sẽ phải truy xuất tới property $name. Do bản chất property là biến, nghĩa là chính bên trong object đó cũng có thể sử dụng property. Việc sử dụng property này hoàn toàn trong nội bộ của chính object đó và nó phải thể hiện ngay khi khai báo class. Vậy làm thế nào để thể hiện việc truy xuất property bên trong chính object khi khai báo class? Hãy cùng xem ví dụ sau: class Employee { public $name; public $title; public $wage; public function print(){ echo "Hello, my name is $this->title $this->name"; } } $joe = new Employee(); $joe->name = "Joe Biden"; $joe->title = "Mr."; $joe->wage = 100000; $joe->print(); Trong ví dụ trên chúng ta khai báo phương thức (hàm) print trong class giúp in ra thông tin nhân sự. Với hàm print có sẵn này, client code không cần tự viết lại lệnh in nữa. Mặc dù chưa học chi tiết về phương thức, hãy nhìn nhần phương thức trong class tương tự như hàm thông thường. Hàm này cần sử dụng thông tin lưu trong property $name và $title. Nhưng do chưa xác định được object, chúng ta không dùng được cách thức truy xuất property như thường lệ. PHP cung cấp một cách thức để báo rằng code của object sẽ truy xuất property chứa trong nó: biến $this. Biến $this được sử dụng trong phương thức như sau: Bạn có thể hiểu như thế này: $ Như vậy, đơn giản nhất bạn chỉ cần nhớ: nếu cần truy xuất property từ bên trong class method, bạn sử dụng $this thay cho tên biến thông thường. Khi client code tạo object và gọi phương thức, $this sẽ được thay bằng object đó. Điều khiển truy cập propertyNhư trên đã nói, khi khai báo property trong PHP bạn phải chỉ định phạm vi sử dụng của property bằng một trong các từ khóa: public, private, protected. Các từ khóa này giới hạn phạm vi sử dụng property như sau: Từ khóa class Employee { // trong thân class private $name; public function print(){ // có thể dùng $name ở đây được echo "Hello, my name is $this->name"; } } // sau đây là vùng client code của Employee $joe = new Employee(); $joe->name = "Joe Biden"; // báo lỗi ở đây. Từ khóa Từ khóa Kinh nghiệm trong lập trình hướng đối tượng chỉ ra rằng không nên sử dụng public property. Lý do là vì khi đó object không thể kiểm soát giá trị nhập vào cho property. Câu hỏi đặt ra là, vậy làm thế nào để truy xuất property từ client code (ngoài class) mà không sử dụng public property? Trong khi protected và private property đều cấm truy xuất từ ngoài class. Để giải quyết vấn đề này, trong PHP thường sử dụng một kỹ thuật: tạo phương thức getter/setter cho mỗi property. Do getter/setter là các phương thức, chúng ta sẽ xem xét trong một bài học riêng. Chỉ định kiểu cho propertyMặc định, khai báo property giống khai báo biến ở chỗ, bạn không cần chỉ định kiểu dữ liệu. Đồng thời, cùng một property trong một object cũng có thể nhận giá trị thuộc về các kiểu khác nhau. Điều này có liên quan tới đặc điểm định kiểu yếu và định kiểu động của PHP. Đặc điểm này giúp PHP đơn giản dễ học với người mới bắt đầu nhưng lại tạo ra nhiều vấn đề trong các dự án lớn. Trong các dự án enterprise lớn người ta thường ưu tiên sử dụng các ngôn ngữ định kiểu tính và định kiểu mạnh như Java hay C#. Bắt đầu từ PHP 7.4 bạn có thể sử dụng lối viết như sau khi khai báo property trong PHP: class Employee { private string $name; private string $title; private float $wage; } Lối viết này tạo ra một loại property gọi là typed property (thuộc tính có định kiểu). Theo đó, trong class Employee ở trên, $name và $title thuộc kiểu string, còn $wage thuộc kiểu float. Lối viết này giúp chỉ rõ ràng ý định sử dụng của property. Tuy nhiên, nó không có tác dụng định kiểu như trong C# hay Java. Nghĩa là mặc dù khai báo $name với kiểu string, bạn vẫn có thể gán giá trị số cho $name, hoặc có thể gán giá trị chuỗi cho $wage. Đây là chế độ hoạt động mặc định của PHP (còn gọi là chế độ coercive). Để typed property thể hiện tác dụng định kiểu – nghĩa là bắt buộc dữ liệu gán cho property phải đúng kiểu đã chỉ định – chúng ta phải chuyển sang chế độ strict với lệnh sau ở đầu file script:
Khi này, việc gán giá trị cho typed property trong file script đó phải theo đúng kiểu đã chỉ định khi khai báo property. Nếu không PHP sẽ báo lỗi và dừng thực thi. <?php declare(strict_types=1); class Employee { private string $name; private string $title; private float $wage; } $joe = new Employee(); $joe->name = 1234; // sẽ báo lỗi ở đây Nếu bạn xuất phát từ một ngôn ngữ định kiểu mạnh, bạn sẽ thấy rất quen thuộc khi sử dụng chế độ strict. + Nếu bạn thấy site hữu ích, trước khi rời đi hãy giúp đỡ site bằng một hành động nhỏ để
site có thể phát triển và phục vụ bạn tốt hơn. Kết luậnTrong bài học này chúng ta đã học chi tiết về property – thành phần chứa dữ liệu của class.
|
Bài Viết Liên Quan
Kết quả Manitoba Scotties 2023
Sáu trong số 18 đội trong Giải đấu Những trái tim Scotties 2023 đã chuyển sang tranh tài ở vòng loại trực tiếp của giải vô địch môn bi đá trên băng nữ ...
Còn bao nhiêu giờ nữa cho đến ngày 9 tháng 6 năm 2023
NgàyThời gian đến ngàyNgày 26 tháng 5 năm 2023-3 tháng và 23 ngàyNgày 27 tháng 5 năm 2023-3 tháng và 22 ngàyNgày 28 tháng 5 năm 2023-3 tháng và 21 ngàyNgày 29 tháng 5 năm ...
OPPO F11 bán lại bao nhiêu?
Tuấn Nguyễn Mobile chuyên thu mua Oppo cũ giá cao tại TPHCM… Hỗ trợ thu Oppo cũ tại nhà – cơ quan, thu cũ lên đời. Tuấn Nguyễn thu không ngại số lượng và tình ...
Có bao nhiêu người nộp đơn vào Harvard 2024?
Thật vậy, những khác biệt này rất quan trọng đối với mô hình học tập của HBS, mô hình phát triển dựa trên nhiều quan điểm và trải nghiệm sống mà học ...
Có bao nhiêu giá trị nguyên của tham số m để hàm số y = x 4
Cho hình nón (N) có đường sinh tạo với đáy một góc 60o .Mặt phẳng qua trục của (N) cắt (N) theo thiết diện là một tam giác có bán kính đường tròn nội ...
Tân binh giả tưởng hàng đầu chạy lùi (2023)
Những người chạy lùi đã trở lại bảng trong vòng đầu tiên của NFL Draft 2023 -- và do đó Bijan Robinson và Jahmyr Gibbs bắt đầu sự nghiệp chuyên nghiệp của ...
Diện tích đất bao nhiêu thì được tách sổ đỏ?
Căn cứ quy định tại Điều 100 Luật Đất đai năm 2013 có quy định về những giấy tờ về quyền sử dụng đất:- Trường hợp 1 : hộ gia đình, cá nhân ...
Ngày 29 tháng 3 năm 2023 được tổ chức ngày gì?
NgàyTênVị trí/Chủ đềThứ sáu, Ngày 29 tháng 3Tuổi TrẻĐài LoanThứ sáu, Ngày 29 tháng 3Ngày tử đạoMadagascarThứ sáu, Ngày 29 tháng 3Ngày khói và gươngNghệ ...
Future 2023 trang đỏ giá bao nhiêu
Xe Future 2023 là dòng xe số cao cấp của Honda. Chúng được ra mắt lần đầu tiên vào năm 1999. Kể từ đó, Future đời đầu được hãng nâng cấp và cải tiến, ...
Lịch UDG 2023 A
Nếu bạn muốn vào Đại học Guadalajara trong LỊCH 2023-A, bạn phải cẩn thận làm theo một loạt các bước. Mặc dù UDG đã sửa đổi một chút quy trình tuyển ...
Xe tải Kia thay nhớt bao nhiêu lít?
Khi thực hiện bảo dưỡng thay nhớt ô tô thì ngoài việc thay đúng định kỳ, thay đúng số km theo khuyến cáo,... thì điều mà mọi người không thể bỏ qua nữa ...
Ngày 24 tháng 3 năm 2023 Ngày Hijriyah là ngày nào?
BLITAR MEDIA - Cùng xem review ngày 24/3/2023 là ngày gì, bạn kỷ niệm ngày nào? Ngày 24 tháng 3 năm 2023 là thứ Sáu, trùng với ngày Hijriyah của ngày 2 Ramadhan 1444 HBạn ...
Thành phố Châu Đốc có bao nhiêu xã?
Hiện nay, Các cập bậc hành chính tại nước ta (Việt Nam) được phân thành các cấp như : Cấp tỉnh, huyện và xã . Bên cạnh còn có cấp thành phố và thị ...
Vận động viên ném bóng xuất sắc nhất KKR 2023
Shreyas Iyer, đội trưởng quen thuộc của Kolkata Knight Riders (KKR), sẽ không có mặt, ít nhất là trong nửa đầu của Giải Ngoại hạng Ấn Độ 2023 (IPL). Vì vấn ...
2 quả trứng chiên bao nhiêu calo
Trứng có bao nhiêu calo thay đổi tùy thuộc vào loại trứng như trứng gà, vịt, cút lộn, cách chế biến khác nhau,... Tìm hiểu chi tiết tất cả thông tin calo của ...
Ngày 14 tháng 5 năm 2023 là ngày gì?
TRANG CHỦGIÁO DỤCTIN TỨC GIÁO DỤC?Ngày của Mẹ được tổ chức vào tuần thứ hai của tháng 5 (Minh họa Pexel)Ngày của Mẹ được tổ chức hôm nay, ngày 14 ...
Khó A1 lớn gấp bao nhiêu lần A3?
Khổ giấy A0, A1, A2, A3, A4, A5, A6, A7 như thế nào? Không ít lần bạn đến quán in và luôn bối rối khi lựa chọn kích thước khổ giấy in cho những tập tài liệu ...
Không có bằng lái xe tải bị phạt bao nhiêu tiền?
Khi tham gia giao thông bằng phương tiện ô tô, xe máy, tài xế bắt buộc phải mang theo bằng lái xe. Nếu không có bằng lái mà đưa phương tiện tham gia giao thông ...
Giải vô địch All Out 2023 nashville tn
ct_event-template-default,single,single-ct_event,postid-35751,woocommerce-no-js,ajax_fade,page_not_loaded,,qode-title-hidden,columns-4,qode-child-theme-ver-0. 1. 0,qode-theme-ver-9. 5,wpb-js-nhà ...
Danh sách kênh phát trực tiếp TATA IPL 2023
Nội dungTiếng HindiDanh sách kênh tiếng Hindi Tata Sky IPL 2023 có sốNgôi sao thể thao 1 Tiếng Hindi 460 Ngôi sao thể thao 1 Tiếng Hindi HD 459Tiếng AnhDanh sách kênh tiếng ...