Lập trình hướng đối tượng trong PHP - AGOLA Lập trình hướng đối tượng trong PHP - AGOLA

Chúng ta có thể tưởng tượng rằng vũ trụ được tạo từ các đối tượng khác nhau như mặt trời, mặt trăng, trái đất,… Theo cách tương tự, bạn có thể tưởng tượng chiếc xe hơi được tạo từ các đối tượng khác nhau như bánh xe, khung xe, động cơ, cần sang số… Theo cách như vậy, các khái niệm trong lập trình hướng đối tượng giả sử rằng mọi thứ như một đối tượng và triển khai một phần mềm bởi sử dụng các đối tượng khác nhau. Bạn có thể tham khảo cách Steve Jobs định nghĩa lập trình hướng đối tượng khiến cả thế giới thán phục, mô tả quy trình lập trình hướng đối tượng cực kỳ dễ hiểu.

Các khái niệm hướng đối tượng trong PHP

Trước khi đi vào chi tiết, chúng ta nhắc lại một số khái niệm liên quan tới Lập trình hướng đối tượng.

Class − Đây là một kiểu dữ liệu được định nghĩa bởi lập trình viên, mà gồm các hàm cục bộ cũng như dữ liệu cục bộ. Bạn có thể nghĩ về một Class như là một Template để tạo nhiều instance (sự thể hiện) của cùng loại (hoặc lớp) của đối tượng.

Object − Một instance (sự thể hiện) riêng biệt của cấu trúc dữ liệu được định nghĩa bởi một Class. Một khi bạn định nghĩa một Class, và sau đó tạo nhiều Object của Class đó. Các Object cũng còn được biết như là Instance.

Biến thành viên − Đây là các biến được định nghĩa bên trong một Class. Dữ liệu này sẽ không nhìn thấy với ngoại vi lớp đó và có thể được truy cập thông qua các hàm thành viên. Những biến này được gọi là attribute của đối tượng một khi đối tượng đã được tạo.

Hàm thành viên − Đây là hàm được định nghĩa bên trong một Class và được sử dụng để truy cập dữ liệu đối tượng.

Tính kế thừa − Khi một lớp được định nghĩa bằng việc kế thừa hàm đang tồn tại của một lớp cha, thì nó được gọi là tính kế thừa. Ở đây, lớp con sẽ kế thừa tất cả hoặc một số hàm và biến thành viên của lớp cha.

Lớp cha − Một lớp mà được kế thừa từ lớp khác. Nó cũng được gọi là một lớp cơ sở (base class) hoặc super class.

Lớp con − Một lớp mà kế thừa từ lớp khác. Nó cũng được gọi là một lớp phụ hoặc một lớp kế thừa.

Tính đa hình − Đây là một khái niệm hướng đối tượng mà cùng một hàm có thể được sử dụng cho các mục đích khác nhau. Ví dụ, tên hàm sẽ vẫn giống như vậy, nhưng nó nhận số tham số khác nhau và có thể thực hiện các tác vụ khác nhau.

Nạp chồng (Overloading) − Một kiểu đa hình, trong đó một số hoặc tất cả toán tử có trình triển khai khác nhau phụ thuộc vào kiểu các tham số của chúng. Tương tự, các hàm cũng có thể được nạp chồng với trình triển khai khác nhau.

Trừu tượng hóa dữ liệu − Bất kỳ biểu diễn dữ liệu nào mà trong đó chi tiết về trình triển khai bị ẩn.

Tính bao đóng − Liên quan tới một khái niệm mà chúng ta có thể bao đóng tất cả dữ liệu và hàm thành viên với nhau để tạo thành một Object.

Constructor − Liên quan tới một kiểu hàm đặc biệt mà sẽ được gọi tự động bất cứ khi nào có một sự tạo thành đối tượng từ một Class.

Destructor − Liên quan tới một kiểu hàm đặc biệt mà sẽ được gọi tự động bất cứ khi nào một đối tượng bị xóa hoặc ra khỏi phạm vi.

Định nghĩa Class trong PHP

Form chung để định nghĩa một lớp mới trong PHP như sau:

<?php class phpClass{ var $var1; var $var2 = "Một hằng số"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>

Dưới đây là phần giải thích mỗi dòng trên:

  • Thủ tục class đặc biệt đi kèm với tên của lớp mà bạn muốn định nghĩa.
  • Các cặp dấu ngoặc móc bao quanh bất kỳ số lượng khai báo biến hoặc định nghĩa hàm nào.
  • Các khai báo biến bắt đầu với thủ tục đặc biệt var đi kèm với một tên biến theo qui ước $; chúng cũng có thể có một phép gán khởi tạo tới một giá trị hằng số.
  • Định nghĩa hàm ở đây khá giống với các hàm standalone trong PHP, nhưng đây là hàm cục bộ cho lớp và sẽ được sử dụng để thiết lập và truy cập dữ liệu đối tượng.

Ví dụ:

Ví dụ sau định nghĩa một lớp tên là Books.

Phần 1:

<?php class Books{ /* các biến thành viên */ var $price; var $title; /* các hàm thành viên */ function setPrice($par){ $this->price = $par; } function getPrice(){ echo $this->price ."<br/>"; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title ." <br/>"; } } ?>

Biến $this là một biến đặc biệt và nó tham chiếu tới cùng đối tượng (ví dụ: chính nó).

Tạo Object trong PHP

Một khi bạn đã định nghĩa lớp cho mình, thì bạn có thể tạo bao nhiêu đối tượng của kiểu lớp đó tùy bạn thích. Ví dụ sau là cách tạo đối tượng bởi sử dụng từ khóa new trong PHP.

Phần 2:

$tiengAnh = new Books;
$toanCaoCap = new Books;
$tuTuongHCM = new Books;

Ở đây, chúng ta đã tạo 3 đối tượng và những đối tượng này là độc lập với nhau và chúng sẽ có sự tồn tại riêng rẽ nhau. Phần tiếp theo, chúng ta xem cách truy cập hàm thành viên và xử lý các biến thành viên trong PHP.

Gọi hàm thành viên trong PHP

Sau khi tạo các đối tượng, bạn sẽ có thể gọi các hàm thành viên liên quan tới đối tượng đó. Một hàm thành viên sẽ chỉ có thể xử lý biến thành viên liên quan tới đối tượng đó.

Ví dụ sau minh họa cách thiết lập title và price cho 3 book bằng cách gọi các hàm thành viên.

Phần 3:

$tiengAnh->setTitle( "English Grammar in Use" ); $tuTuongHCM->setTitle( "Toán cao cấp 1" ); $toanCaoCap->setTitle( "Tư tưởng Hồ Chí Minh" ); $tiengAnh->setPrice( 10 ); $tuTuongHCM->setPrice( 15 ); $toanCaoCap->setPrice( 7 );

Bây giờ bạn gọi các hàm thành viên khác để lấy giá trị đã được thiết lập trong ví dụ trên:

Phần 4:

$tiengAnh->getTitle(); $tuTuongHCM->getTitle(); $toanCaoCap->getTitle(); $tiengAnh->getPrice(); $tuTuongHCM->getPrice(); $toanCaoCap->getPrice();

Lưu 4 phần code trên (theo thứ tự như trên) trong một file có tên là test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ http://localhost:8080/test.php sẽ cho kết quả:

Gọi hàm thành viên trong PHP

Hàm constructor trong PHP

Hàm constructor là kiểu hàm đặc biệt mà sẽ được gọi tự động bất cứ khi nào có một sự tạo thành đối tượng từ một Class. Vì thế, chúng ta lợi dụng cách vận hành này, bằng việc khởi tạo nhiều thứ thông qua các hàm constructor trong PHP.

PHP cung cấp một hàm đặc biệt được gọi là __construct() để định nghĩa một constructor. Bạn có thể truyền bao nhiêu tham số tùy bạn vào trong hàm constructor này.

Ví dụ sau sẽ tạo một constructor cho lớp Books và nó sẽ khởi tạo price và title cho book tại thời điểm tạo đối tượng này.

Phần 1.1:

function __construct( $par1, $par2 ){
 $this->price = $par1;
 $this->title = $par2;
}

Bây giờ, chúng ta không cần gọi tập hợp hàm riêng rẽ để thiết lập price và title. Chúng ta chỉ có thể khởi tạo hai biến thành viên của chúng tại thời điểm tạo đối tượng. Bạn kiểm tra ví dụ sau:

Phần 2.2:

$tiengAnh = new Books( "English Grammar in Use", 10 ); $toanCaoCap = new Books ( "Toán cao cấp 1", 15 ); $tuTuongHCM = new Books ("Tư tưởng Hồ Chí Minh", 7 ); /* lấy các giá trị đã được thiết lập */ $tiengAnh->getTitle(); $tuTuongHCM->getTitle(); $toanCaoCap->getTitle(); $tiengAnh->getPrice(); $tuTuongHCM->getPrice(); $toanCaoCap->getPrice();

Đặt contructor (phần 1.1) vào class (phần 1) và sau đó thay các phần 2, 3 và 4 bằng phần 2.2 (theo thứ tự như trên) trong một file có tên là test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ http://localhost:8080/test.php sẽ cho kết quả tương tự như trên:

Hàm constructor trong PHP

Destructor trong PHP

Giống một hàm constructor trong PHP, bạn có thể định nghĩa một hàm destructor bởi sử dụng hàm __destruct(). Bạn có thể giải phóng tất cả nguồn với một destructor trong PHP.

Tính kế thừa trong PHP

Các định nghĩa lớp trong PHP có thể kế thừa từ một định nghĩa lớp cha bởi sử dụng mệnh đề extends trong PHP. Cú pháp của nó như sau:

class Child extends Parent {
 <phn định nghĩa ca lp con>
}

Hiệu quả của tính kế thừa là lớp con (lớp phụ hoặc lớp kế thừa) có các đặc trưng sau:

Tự động có tất cả khai báo biến thành viên của lớp cha.

Tự động có tất cả các hàm thành viên giống như trong lớp cha, mà (theo mặc định) sẽ làm việc theo cùng phương thức như khi hàm đó làm trong lớp cha.

Ví dụ sau kế thừa lớp Books và thêm một số tính năng tùy theo yêu cầu.

class Novel extends Books{ var publisher; function setPublisher($par){ $this->publisher = $par; } function getPublisher(){ echo $this->publisher. "<br />"; } }

Bây giờ, ngoài những hàm đã kế thừa, lớp Novel bổ sung thêm hai hàm thành viên.

Ghi đè hàm (Function Overriding) trong PHP

Các định nghĩa hàm trong các lớp con ghi đè các định nghĩa với cùng tên trong các lớp cha. Trong một lớp con, chúng ta có thể sửa đổi định nghĩa của một hàm được kế thừa từ lớp cha.

Trong ví dụ sau, các hàm getPrice và getTitle được ghi đè để trả về các giá trị.

function getPrice(){ echo $this->price . "<br/>"; return $this->price; } function getTitle(){ echo $this->title . "<br/>"; return $this->title; }

Thành viên public trong PHP

Trừ khi bạn xác định, nếu không thì các thuộc tính (property) và phương thức của một lớp là public. Tức là, chúng có thể được truy cập trong 3 tình huống sau:

Từ bên ngoài lớp trong đó nó được khai báo.

Từ bên trong lớp trong đó nó được khai báo.

Từ bên trong lớp ngoài mà triển khai lớp đó trong đó nó được khai báo.

Tới giờ, chúng ta đã thấy tất cả thành viên là các thành viên public. Nếu bạn muốn giới hạn truy cập của các thành viên của một lớp, thì bạn định nghĩa thành viên lớp là private hoặc protected trong PHP.

Thành viên private trong PHP

Bằng việc chỉ định một thành viên là private, bạn giới hạn độ truy cập cho lớp trong đó nó được khai báo. Thành viên private không thể được tham chiếu từ các lớp mà kế thừa lớp trong đó nó được khai báo và không thể được truy cập từ bên ngoài lớp đó.

Một thành viên lớp có thể được chỉ định là private bởi sử dụng từ khóa private ở trước thành viên đó.

class MyClass { private $car = "skoda"; $driver = "SRK"; function __construct($par) { // các lệnh ở đây được thực thi mỗi khi // một instance của class // được tạo } function myPublicFunction() { return("Đây là một hàm Public!"); } private function myPrivateFunction() { return("Đây là một hàm Private!"); } }

Khi lớp MyClass được kế thừa bởi lớp khác bởi sử dụng extends, hàm myPublicFunction() sẽ là nhìn thấy, như $driver. Lớp kế thừa sẽ không nhận biết hoặc không truy cập tới hàm myPrivateFunction và $car, bởi vì chúng được khai báo là private.

Thành viên protected trong PHP

Một thuộc tính hoặc phương thức protected là có thể truy cập trong lớp mà trong đó nó được khai báo, cũng như trong các lớp mà kế thừa từ lớp đó. Các thành viên protected là không có sẵn với ngoại vi của hai loại lớp này. Một thành viên lớp có thể được chỉ định là protected bởi sử dụng từ khóa protected ở trước thành viên đó trong PHP.

Dưới đây là phiên bản khác của MyClass:

class MyClass { protected $car = "skoda"; $driver = "SRK"; function __construct($par) { // các lệnh ở đây được thực thi mỗi khi // một instance của class // được tạo } function myPublicFunction() { return("Đây là một hàm Public!"); } protected function myPrivateFunction() { return("Đây là một hàm Protected!"); } }

Interface trong PHP

Interface được định nghĩa để cung cấp một tên hàm chung cho các trình triển khai. Các Implementor khác nhau có thể triển khai các Interface của chúng theo yêu cầu của chúng. Bạn có thể nói, Interface là bộ khung mà được triển khai bởi lập trình viên.

Như trong PHP 5, nó là có thể để định nghĩa một Interface, giống như:

interface Mail { public function sendMail(); }

Sau đó, nếu lớp khác triển khai Interface đó, giống như:

class Report implements Mail { // lớp này cần định nghĩa hàm sendMail() }

Hằng số (Constant) trong PHP

Một constant là một cái gì đó giống như một biến, trong đó nó giữ một giá trị, nhưng thực sự thì nó giống một hàm hơn, bởi vì một hằng là không thể thay đổi. Một khi bạn khai báo một hằng, nó không thay đổi.

Khai báo một hằng trong PHP là khá dễ dàng, như được thực hiện trong phiên bản MyClass này.

class MyClass { const requiredMargin = 1.7; // từ khóa const function __construct($incomingValue) { // các lệnh ở đây được thực thi mỗi khi // một instance của class // được tạo } }

Trong lớp này, requireMargin là một hằng. Nó được khai báo với từ khóa const trong PHP, và giá trị của nó sẽ không thay đổi trong bất kỳ tình huống nào. Ghi nhớ rằng, tên hằng không bắt đầu với $, như trong tên biến.

Lớp trừu tượng (Abstract Class) trong PHP

Một lớp trừu tượng là một lớp mà không thể được khởi tạo, chỉ được kế thừa. Bạn khai báo một lớp trừu tượng với từ khóa abstract trong PHP, giống như dưới đây.

Khi kế thừa từ một lớp trừu tượng, tất cả phương thức được đánh dấu abstract trong khai báo lớp cha phải được định nghĩa bởi lớp con; ngoài ra, những phương thức này phải được định nghĩa với cùng tính nhìn thấy.

abstract class MyAbstractClass { abstract function myAbstractFunction() { } }

Ghi chú rằng, các định nghĩa hàm bên trong một lớp trừu tượng cũng phải được đặt trước bởi từ khóa abstract. Trong PHP, nó là không hợp lệ nếu bạn có định nghĩa hàm abstract bên trong một lớp non-abstract.

Từ khóa static trong PHP

Khai báo các thành viên lớp hoặc phương thức lớp là static làm cho chúng có thể truy cập mà không cần một khởi tạo lớp. Một thành viên được khai báo là static không thể được truy cập với một đối tượng lớp đã được khởi tạo (mặc dù một phương thức là static có thể).

Ban thử ví dụ sau:

<?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } print Foo::$my_static . "n"; $foo = new Foo(); print $foo->staticValue() . "n"; ?>

Từ khóa final trong PHP

PHP 5 giới thiệu từ khóa final, mà ngăn cản các lớp con từ việc ghi đè một phương thức bằng việc đặt vào trước định nghĩa từ khóa final. Nếu chính lớp đó đang được khai bào là final, thì nó không thể được kế thừa.

Ví dụ sau tạo Fatal Error: Cannot override final method BaseClass::moreTesting()

<?php class BaseClass { public function test() { echo "BaseClass::test() called<br>"; } final public function moreTesting() { echo "BaseClass::moreTesting() called<br>"; } } class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() called<br>"; } } ?>

Gọi constructor cha trong PHP

Thay vì viết cả một constructor mới cho lớp con, bạn có thể viết nó bằng cách gọi constructor của lớp cha một cách tường minh và sau dó thực hiện bất kỳ việc gì cần thiết để khởi tạo lớp con này. Dưới đây là một ví dụ đơn giản trong PHP.

class Name { var $_firstName; var $_lastName; function Name($first_name, $last_name) { $this->_firstName = $first_name; $this->_lastName = $last_name; } function toString() { return($this->_lastName .", " .$this->_firstName); } } class NameSub1 extends Name { var $_middleInitial; function NameSub1($first_name, $middle_initial, $last_name) { Name::Name($first_name, $last_name); $this->_middleInitial = $middle_initial; } function toString() { return(Name::toString() . " " . $this->_middleInitial); } }

Trong ví dụ này, chúng ta có lớp cha Name, có một constructor nhận hai tham số, và một lớp con NameSub1, có một constructor nhận 3 tham số. Constructor của NameSub1 thực hiện chức năng bằng việc gọi constructor cha của nó một cách tường minh bởi sử dụng cú pháp :: (truyền hai tham số của nó) và sau đó thiết lập một trường bổ sung. Theo cách tương tự, NameSub1 định nghĩa hàm toString() mà nó ghi đè từ lớp cha.

Ví dụ − Một constructor có thể được định nghĩa với cùng tên như tên của một lớp, như trong ví dụ trên.

Theo tutorialspoint




Các lý do cần đọc trước khi quyết định liên hệ tôi 

  1. Tham gia group Mua bán Google Ads và Google Shopping :

    https://www.facebook.com/groups/314513929300715

  2. Tham gia group mua bán cho thuê tài khoản BM Agency :

    https://www.facebook.com/groups/1204318359703229

  3. AGOLA chỉ cung cấp dịch vụ không có dịch vụ tư vấn hiểu tới đâu bán tới đó !
  4. AGOLA ngừng cung cấp các gói dịch cho bọn có Slogan " Tuần đổi xe tháng mua nhà " hoặc liên quan !
  5. Các dịch vụ liên quan đến hướng dẫn : diễn ra từ 5-30 phút thông qua teamview hoặc ultral thời gian càng ngắn giá tiền càng cao nên các bạn đọc kỹ trước khi sử dụng
  6. Các sản phẩm dịch vụ không có thương thảo giá và cũng không có hỏi thêm
  7. Không làm việc với mấy thằng giao lưu với lũ suốt ngày dùng VPS remote này remote kia sock này sock kia đổi ngôn ngữ này đổi ngôn ngữ kia add page này sang page kia đổi đá cá kiểu con đà điều ... đây là một lũ ngu thời hiện đại khi bạn muốn vượt rào vòng đầu bạn đã gian lận thì vượt vào đít kèm với đó khả năng dính liên đơi nghi ngờ hành vi bất thường là rất cao nó như kiểu hành vi của bạn có tần xuất giống như hành vi của bọn gian lận khá nhiều nó cho bạn vào động cơ gian lận có nguy cơ nó sẽ pem luôn nhé ... và ti tỷ lý do khác nhé nếu bọn mày mà làm theo tụi nó lên cam được tao cho 20 triệu tiền cafe cà pháo
  8. Không bán vĩnh viễn mọi dịch vụ mua nhầm đòi đổi sang gói dịch vụ khác
  9. Thông tin bảo hành gần như không có nhưng cũng có một số dịch vụ có bảo hành đề nghị đọc kỹ trước khi quyết định mua
  10. Quyết định mua hàng là đồng ý các điều khoản mua bán và điều khoản không được lấy lại tiền và không bồi hoàn
  11. Mua hàng thì xin đọc kỹ điều khoản ở từng mô tả trước khi quyết định nhấc máy liên hệ ở thông tin của từng gói dịch vụ
  12. Mọi giao dịch đều được phải bắt buộc chụp màn hình chuyển khoản gửi vào Zalo
  13. Các đối tượng cố ý chuyển tiền gói này để trục lợi sử dụng gói khác đều được coi là hình vi lừa đảo ! Cố ý ghi nội dung hiểu lầm về chuyển tiền để đôi co đòi sử dụng gói dịch vụ khác cũng vậy !
  14. Tôi là dân khối A nên việc viết sai lỗi chính tả thì kệ mẹ tôi thích thì mua không thích thì đừng soi đi ra chỗ khác do tôi không có soát lại chính tả nên các bạn đọc thay vì thắc mắc thì thông cảm giùm tôi ! miễn sao tôi truyền tải thông tin bạn đọc bạn thấy hiểu được bạn sử dụng không được bạn tìm bên khác
  15. Tôi không làm việc với bọn cử nhân viên là các công ty Agency , truyền thông gọi hỏi dò hỏi luyên thuyên ! Nếu cố tình tôi sẽ dùng CRM Agency cấm lock chạy Ads vĩnh viễn khi nhìn thấy đuôi theo rõi của doanh nghiệp đó mà tôi đã gán.
  16. Tôi không làm việc với bọn nào thì tôi chạy tiền tỷ tôi tiêu tiền tỷ nhưng chạy demo trước nếu ngon thì vít lớn nhưng sau 3 ngày thuê thấy đéo thấy như cam kết về ngân sách
  17. Tôi không hợp tác ăn chia hay kiểu Win Win đôi bên có lợi
  18. Tất cả những câu hỏi khi gọi điện khiến tôi nghĩ rằng bạn chưa đọc kỹ thông tin trên website sẽ được tôi từ chối vô điều kiện
  19. Không làm việc các công ty có các nhân vật nổi tiếng trên các đài báo truyền hình bởi vậy bớt quảng cáo
  20. Các đối tượng cố tình lên mạng tìm kiểm thông tin tôi và không có trao đổi được tôi dùng Zalo : O9O9.456.866 gửi STK thông tin thanh toán của tôi qua zalo đó mà vẫn chuyển tiền vào tài khoản của tôi được coi là hình vi lừa đảo cố tình trọc phá và lợi dụng sử dụng lừa đảo để mong muốn sử dụng dịch vụ của tôi nhưng vì cấm nên phải làm vậy
  21. Kiến thức của đại đa số dân trên mạng không sai mà chỉ đúng với bọn gà mờ mà thôi kiểu như bạn học lớp 1 cô giáo nói 1 không trừ được cho 2 lên cấp 2 cô giáo nói 1 trừ được cho 2 ! Lúc đó cô giáo cấp 1 hay thầy giáo cấp 2 không nói ai đúng ai sai được mà tại thời điểm đó bạn thấy nó đúng còn khi đi sâu vào nó đéo đúng 😀 ! Cũng như việc tôi bán dịch vụ cho dân trong nghề việc tôi có bắt mấy thằng cấp 1 nuốt kiến thức chuyên sâu của cấp 2 là không được bởi vậy dân nào hiểu sẽ liên hệ mua chứ đừng kiểu lơ mở hỏi cho vui cửa vui nhà
  22. Không làm việc với bọn hở miệng ra là em từng có BM2500 với BM1000
  23. Không lamg việc với bọn hở mồm ra là fake mà đến cái via kiểm tra như thế nào là 1 cái via Việt hay via us... cũng đéo biết kiểm tra thế mà cứ đi nghe mấy thằng trên mạng Fake Ip , Fake đổi ngôn ngữ này ngôn ngữ kia ... tùm lum tà la login đổi via các kiểu con đa điểu rồi nghe thì vui tai mà làm cũng được không đéo có biết lý do chỉ có lý do vớ vẩn - Không tin tao đố bọn mày hỏi thử nó 1 câu via Việt là như thế nào đố thằng đó biết đó xàm xí - hay via việt là thông tin Việt Nam hahaha !
  24. Không làm việc với bọn nào thì đổi mạng 4g kết nối này kết nối kia lên cam có con cặc ấy mấy cái công nghệ cổ lỗ sĩ này bọn code tool click quảng cáo nó sài gần 10 năm nay rồi lòe dân gà hoài dần dần ko hiệu quả bọn nó ko dùng rồi lũ đó biến mất khỏi thị trường bán tài khoản
  25. Quyết tâm cấm log mọi thằng liên quan tới BM2500 vĩnh viễn hạn chế tài khoản quảng cáo liên đới từ 6 tới 2 năm kể cả cho kháng XMDT theo tút trên mạng
  26. Tiếp tục sắp tới sẽ thanh lọc toàn bộ Invoice
  27. Bọn mày nghĩ xem mẹ chúng nó giỏi vậy nhận hàng về mà chạy quảng cáo đi giàu hơn ko sao phải đi kiếm tiền dạy học ba láp ba xàm đó xem thấy quảng cáo của tụi đó trước đây chạy quảng cáo tràn lan quảng bá khóa học như đúng rồi giờ chạy đi ba láp ba xàm

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Call Now Button
X