12/08/2018, 15:50

Series PHP - Lập trình hướng đối tượng (Phần 2)

Tiếp tục series, phần 1 mình đã đề cập đến những vấn đề cơ bản nhất trong Lập trình hướng đối tượng, các bạn có thể bấm vào link ở mục lục bên dưới để có thể xem nhanh phần cũ nhé. Các đặc điểm cơ bản của lập trình hướng đối tượng. Chúng được thể hiện như thế nào trong PHP Sự khác biệt giữa ...

Tiếp tục series, phần 1 mình đã đề cập đến những vấn đề cơ bản nhất trong Lập trình hướng đối tượng, các bạn có thể bấm vào link ở mục lục bên dưới để có thể xem nhanh phần cũ nhé.

  • Các đặc điểm cơ bản của lập trình hướng đối tượng. Chúng được thể hiện như thế nào trong PHP
  • Sự khác biệt giữa Abstract Class và Interface
  • Thế nào là một hàm static. Phân biệt cách dùng từ khoá static::method() với self::method()
  • Thế nào là Trait
  • Thế nào là Namespaces
  • Thế nào là magic functions
  • Tìm hiểu về các quy tắc trong PSR2
  • Các phương pháp thiết kế hướng đối tượng (SOLID)

Thế nào là Trait

Việc ngôn ngữ PHP chỉ hỗ trợ đơn kế thừa khiến cho việc lập trình khoai sắn hơn, tuy nhiên ở phiên bản PHP 5.4 trở đi, Trait đã giúp các lập trình viên khắc phục được nhược điểm đó bằng việc có thể sử dụng lại các phương thức từ các class khác nhau một cách dễ dàng hơn. Sử dụng Trait không hề khó khi chúng ta nắm được cách sử dụng cơ bản của nó.

Khởi tạo:

trait traitNameFirst
{
    public function traitMethodFirst ()
    {
    //
    }
}

Trait lồng trait

trait traitNameSecond
{
    use traitNameFirst;
    public function traitMethodSecond ()
    {
    //
    }
}

Sử dụng:

class useTrait
{
    use traitNameFirst; // sử dụng 1 trait
    use traitNameFirst, traitNameSecond; // sử dụng 2 trait
}

insteadof:

Từ khóa này sẽ giúp ta xử lý trường hợp use 2 trait có các hàm giống nhau nhưng ta chỉ định được sẽ sử dụng hàm nào của trait nào

trait traitNameFirst
    {
        public function traitMethod ()
        {
        //
        }
    }

trait traitNameSecond
{
    public function traitMethod ()
    {
    //
    }

class useTrait
{
    use traitNameFirst, traitNameSecond 
    {
        traitNameFirst::traitMethod() insteadof traitNameSecond;
    }
}

Thế nào là Namespaces

Namespaces được hiểu là cách đóng gói các file php. Nó giúp giải quyết vấn đề tác quyền của thư viện đang sử dụng và việc phân biệt không gian tên của những thành phần code thường được tái sử dụng như class và function.

ĐỊnh nghĩa namepsaces

<?php
namespace nameSpace; // từ khóa namespace, vị trí trên cùng của file

Nạp namespaces bằng use

<?php
namespace nameSpace;
use nameSpaceclassName; // vị trí trên cùng file hoặc dưới namespace

Thế nào là magic functions

Cái tên đã thể hiện sự ảo diệu của nó, đây là các hàm tự động thực thi khi chúng ta thao tác tới đối tượng. Có thể nhận biết các hàm này bằng kiểu __functionName()

Một số magic functions thường dùng

  • construct(), hàm khởi tạo, được gọi khi khởi tạo mới đối tượng
  • destruct(), hàm hủy, được gọi khi đối tượng bị hủy
  • get(), hàm getter, được gọi khi lấy giá trị của thuộc tính
  • set(), hàm setter, được gọi khi gán giá trị cho thuộc tính
  • call(), hàm call, được gọi khi ta gọi đến một phương thức không tồn tại trong đối tượng
  • callStatic(), hàm call static, được gọi khi ta gọi đến một phương thức tĩnh không tồn tại trong đối - tượng
  • isset()
  • unset()
  • sleep()
  • wakeup()
  • toString()
  • invoke()
  • set_state()
  • clone()
  • debugInfo()

Chú ý:

  • Tốc độ chậm hơn so với các phương thức bình thường
  • Không quan tâm đến phạm vi do đó ta có thể vô tình để lộ một thuộc tính nào đó hoặc những phương thức ẩn trong chương trình

Các quy tắc trong PSR-2

PSR-2 là bộ quy tắc viết code áp dụng cho tất cả các project, giúp cho code có thể đạt tới cảnh giới sáng sủa tối dễ bảo trì... Bộ quy tắc PSR-2 bao gồm bộ quy tắc PSR-1 và một số quy tắc khác. Mỗi ngôn ngữ và cộng đồng sẽ có những bộ quy tắc chung và riêng tuy nhiên nhờ ưu điểm nó mang lại mà nó được công nhận hầu hết bởi các lập trình viên trên thế giới. Các bạn có thể tham khảo bài viết PSR và Coding Standard in Framgia của anh @trinh.duc.toan để có cái nhìn chi tiết hơn về vấn đề này.

Phần hai trong series giới thiệu về Lập trình hướng đối tượng trong PHP tạm thời dừng tại đây. Cám ơn mọi người đã dừng chân lại nơi này và đọc bài của mình, tuy nhiên đừng đi đâu xa cả vì phần ba nói về Các phương pháp thiết kế hướng đối tượng (SOLID) sẽ có sớm thôi. Hẹn gặp lại :3

0