quang cao 1 quang cao 2
tin tức

PHP 5.3, Phần 1: Các thay đổi về giao diện đối tượng

22/02/2012 - Xem: 3250
Nó được thiết kế làm một bản phát hành để chuẩn bị cho các nhà phát triển PHP V6 khi nó xuất hiện với nhiều đặc tính mới, làm sạch các đặc tính hiện tại bằng cách thay đổi chút ít (tweaking) các chức năng, cố định khía cạnh về nền đặc biệt, và loại bỏ các tính năng cũ mà sẽ không còn trong các bản sau này của PHP. Trong loạt bài "Có gì mới trong PHP V5.3" này, chúng ta sẽ xem xét các đặc tính mới của bản V5.3, và xem cách chúng được dùng, cũng như cách dùng chúng trong ứng dụng web của bạn.

PHP V5 và lập trình hướng đối tượng

Khi PHP V5 được phát hành vào năm 2004, nó đã là một bước đại nhảy vọt so với những gì mà PHP V4 cung cấp về mặt thiết kế và lập trình hướng đối tượng OOP (object-oriented program). Nó bổ sung một vài cải tiến cần thiết, thí dụ như khả năng nhìn thấy lớp (class visibility), các bộ dựng (constructors) và các bộ huỷ (destructors) phù hợp, các gợi ý về kiểu, và API phản ảnh lớp (class-reflection API). Nó mở ra cánh cửa cho việc lập trình hướng đối tượng tiên tiến trong PHP, và cho phép bạn thực hiện nhiều mẫu thiết kế dễ hơn nhiều, cùng với các lớp thiết kế và các API tốt hơn.

Trong PHP V5.3, nhiều bổ sung gia tăng đã được đưa vào nhằm tăng cường OOP. Những cải tiến này đã nằm trong lĩnh vực bổ sung cú pháp và cải tiến hiệu năng. Để bắt đầu, chúng ta hãy quan sát các đặc tính mới sẵn có với các phương thức và thành viên tĩnh.

Các phương thức tĩnh được cải thiện và quản lí thành viên (member handling)

Một bổ sung hữu ích trong PHP V5 là khả năng quy định một phương thức hoặc thành viên của một lớp là tĩnh (PHP V4 thực hiện hỗ trợ truy cập tĩnh đến các phương thức và các thành viên của lớp, nhưng không có khả năng quy định rằng phương thức hoặc thành viên đó được thiết kế để truy cập tĩnh). Truy cập tĩnh đặc biệt rất hữu ích để thực hiện mẫu thiết kế đơn lẻ (singleton design), nơi chỉ tồn tại một thực thể của lớp.

PHP V5.3 đã thêm vào một số đặc tính để tăng cường trợ giúp các thành viên và các phương thức tĩnh trong một lớp. Đầu tiên chúng ta sẽ quan sát một phương thức ma thuật vừa được thêm vào: __callStatic().

Phương thức ma thuật _callStatic()

PHP V5 có một số phương thức được xác định một cách đặc biệt, có thể sử dụng bên trong các lớp gọi là các phương thức ma thuật (magic methods). Khi được xác định trong lớp, các phương thức này cung cấp các chức năng đặc biệt, và có khả năng chịu tải (khả năng cho phép một phương thức chấp nhận các kiểu tham số khác nhau) và tính đa dạng (polymorphism) (khả năng cho phép các kiểu dữ liệu khác nhau sử dụng cùng một giao diện). Chúng cũng mở cánh cửa cho việc sử dụng các kiểu khác nhau của các phương thức lập trình OOP và các mẫu thiết kế bằng PHP một cách dễ dàng.

Trong PHP V5.3 có một phương thức ma thuật mới được thêm vào: __callStatic(). Nó làm việc tương tự như phương thức ma thuật __call() được thiết kế để xử lý các cuộc gọi ra phương thức cho các phương thức mà không được xác định hoặc nhìn thấy được trong lớp. Tuy nhiên, __callStatic() được thiết kế để xử lý các cuộc gọi ra phương thức tĩnh, chúng cho chúng ta khả năng thiết kế tốt hơn sự quá tải về phương thức của chúng ta. Một ví dụ về cách sử dụng phương thức này như dưới đây.


Liệt kê 1. Ví dụ về việc sử dụng __callStatic() đối với __call()

{geshibot lang="php" head=""}class Foo
{
    public static function __callStatic(
        $name,
        $args
        )
    {
        echo "Called method $name statically";
    }

    public function __call(
        $name,
        $args
        )
    {
        echo "Called method $name";
    }
}

Foo::dog();       // outputs "Called method dog statically"
$foo = new Foo;
$foo->dog();      // outputs "Called method dog"
{/geshibot} 

 Một điều cần lưu ý là PHP thực hiện áp đặt định nghĩa của phương thức __callStatic(); nó phải là chung (public), và nó phải được tuyên bố là tĩnh. Cũng như vậy, phương thức ma thuật __call() cũng phải được xác định là chung, đúng như tất cả các phương thức ma thuật phải là như vậy.

Các cuộc gọi ra tĩnh động

Một đặc tính rất hay của PHP là các biến cho biến (variable variables). Điều có nghĩa là bạn có thể sử dụng chuỗi giá trị của một biến để quy định tên của một biến khác. Nói một cách khác, bạn có thể thực hiện việc gì đó giống như dưới đây.


Liệt kê 2. Các biến “biến” (Variable variables)

{geshibot lang="php" head=""}    $x = 'y';
    $$x = 'z';
    echo $x;  // outputs 'y'
    echo $y;  // outputs 'z'
    echo $$x; // outputs 'z'{/geshibot} 

 

Cùng một khái niệm có thể được sử dụng với các hàm, hoặc thậm chí các phương thức lớp như dưới đây.


Liệt kê 3. Tên các hàm biến và phương thức lớp

{geshibot lang="php" head=""}class Dog
{
    public function bark()
    {
        echo "Woof!";
    }
}

$class = 'Dog'
$action = 'bark';
$x = new $class(); // instantiates the class 'Dog'
$x->$action();     // outputs "Woof!" {/geshibot} 

Điểm mới ở PHP V5.3 là khả năng có tên của lớp khi được quy định là một biến khi thực hiện một cuộc gọi tĩnh. Việc này mở ra một vài khả năng mới, như dưới đây.


Liệt kê 4. Đặt tên lớp biến

{geshibot lang="php" head=""}class Dog
{
    public static function bark()
    {
         echo "Woof!";
    }
}

$class = 'Dog';
$action = 'bark';
$class::$action();  //outputs "Woof!" {/geshibot} 

Bổ sung này tạo ra khía cạnh về các biến của biến trong PHP đầy đủ, cho phép dùng chúng chỉ trong từng tình huống với PHP.

Chúng ta hãy quan sát một cải tiến hữu ích hơn cho việc sử dụng các phương thức và thành viên tĩnh: liên kết tĩnh muộn (late static binding).

Liên kết tĩnh muộn

Một trong những điều phiền phức nhất về PHP trước V5.3 là cách phương thức và thành viên tĩnh được xử lý. Cho đến nay, các tham chiếu tĩnh (static references), chẳng hạn như các tham chiếu được làm bản thân nó hoặc __CLASS__, được giải quyết trong phạm vi lớp, trong đó hàm được định nghĩa. Vấn đề là ở chỗ tham chiếu sẽ không đúng nếu lớp được mở rộng và cuộc gọi được thực hiện từ lớp con (child class) mới. Liên kết tĩnh muộn đã được thêm vào PHP V5.3 để giảm bớt vấn đề này. Để minh hoạ rõ hơn, chúng ta hãy tạo ra một lớp với một phương thức tĩnh dưới đây.


Liệt kê 5. Lớp Foo với phương thức tĩnh test()

{geshibot lang="php" head=""}class Foo
{
    protected static $name = 'Foo';

    public static function test()
    {
        return self::$name;
    }
} {/geshibot} 

Chúng ta hãy mở rộng lớp này. Chúng ta sẽ định nghĩa lại thành viên $name trong lớp con này.


Liệt kê 6. Lớp con Bar mở rộng lớp cha Foo

{geshibot lang="php" head=""}class Bar extends Foo
    {
       protected static $name = 'Bar';
    }{/geshibot} 

Chúng ta thực hiện cuộc gọi tĩnh trong Liệt kê 7.


Liệt kê 7. Các cuộc gọi phương thức tĩnh test()

{geshibot lang="php" head=""}echo Bar::test(); {/geshibot} 

Kết quả từ cuộc gọi đó sẽ là chuỗi Foo. Đây là do tham chiếu self::$name thực hiện trong phương thức test() được thực hiện bằng lớp Foo. Liên kết xuất hiện bằng cách này vì đây là nơi hàm được định nghĩa.

PHP V5.3 đã thêm từ khoá static để cho phép bạn thực hiện một tham chiếu đối với lớp hiện tại. Do đó bạn sẽ thay đổi lớp Foo trên để sử dụng từ khoá này trong Liệt kê 8, và chúng ta sẽ thấy rằng Bar sẽ thay vào kết quả.


Liệt kê 8. Sử dụng từ khoá static

{geshibot lang="php" head=""}class Foo
{
    protected static $name = 'Foo';

    public static function test()
    {
        return static::$name;
    }
}

class Bar
{
    protected static $name = 'Bar';
}

echo Bar::test(); // outputs 'Bar'{/geshibot} 

Một điều cần lưu ý về từ khoá static là nó không làm việc như cách làm trong ngữ cảnh không tĩnh. Điều này có nghĩa là các nguyên tắc kế thừa bình thường không áp dụng với các cuộc gọi tĩnh. Từ khoá static sẽ chỉ cần cố gắng giải quyết cuộc gọi trong lớp hiện tại thay cho lớp mà hàm được định nghĩa. Đây là một điều quan trọng cần lưu ý.

Bây giờ chúng ta đã thấy một vài cải tiến với các phương thức và thành viên tĩnh, hãy quan sát một vài lớp mới được bổ sung vào bộ phận rất hữu ích của PHP V5, là Thư viện lớp PHP chuẩn.

Thư viện lớp PHP chuẩn

Thư viện lớp PHP chuẩn (SPL) là một tập các giao diện và các lớp thêm vào PHP V5, được thiết kế để giải quyết các vấn đề chuẩn. Các vấn đề này gồm việc cho một đối tượng được lặp (iterateable), cho phép một đối tượng đối xử cứ như một mảng, hoặc thực hiện một danh sách móc nối. Lợi điểm của việc sử dụng các lớp và các phương thức này là ở chỗ chúng là riêng cho PHP, nghĩa là chúng sẽ nhanh hơn nếu chúng được thực hiện trong chính PHP. Chúng cũng, trong nhiều ví dụ, cho phép nhiều hàm trong của PHP sử dụng các đối tượng trực tiếp này, chẳng hạn như cách giao diện biến lặp (Iterator interface) cho phép bạn sử dụng cấu trúc foreach để lặp lại trên đối tượng.

PHP V5.3 thêm khá nhiều lớp vào SPL. Có một điều chúng ta đã tham khảo trước đây là cài đặt danh sách móc nối kép (doubly linked list) trong lớp SPL SplDoublyLinkedList. Nó được sử dụng bởi hai lớp SPL mới khác: SplStack, cài đặt stack (vùng nhớ xếp chồng), và SplQueue, cài đặt hàng đợi.

Chúng ta hãy quan sát cách bạn có thể sử dụng lớp SplStack để thực hiện một vùng nhớ.


Liệt kê 9. Sử dụng SplStack

{geshibot lang="php" head=""}$stack = new SplStack();

// push a few new items on the stack
$stack->push('a');
$stack->push('b');
$stack->push('c');

// see how many items are on the stack
echo count($stack); // returns 3

// iterate over the items in the stack
foreach ( $stack as $item )
    echo "[$item],";  
// the above outputs: [c],[b],[a]

// pop an item off the stack
echo $stack->pop(); // returns 'c'

// now see how many items are on the stack
echo count($stack); // returns 2{/geshibot} 

SqlQueue làm việc theo kiểu tương tự, nhưng nó làm việc như một hàng đợi (vào trước, ra trước; chứ không phải là vào sau, ra trước, như là stack. Ngoài ra, còn cài đặt đống (SplHeap), cũng như là hàng đợi riêng và các cài đặt đống cho vài tình huống nhất định (SplMinHeap, SplMaxHeap và SplPriorityQueue).

Một bổ sung hữu ích nữa là lớp SplFixedArray mà như tên đã ngụ ý, là cài đặt mảng kích thước cố định. Tất nhiên nó khá nhanh — thực ra là nhanh đến mức được đo thử chuẩn, nhanh hơn 10-30% so với cài đặt mảng lắp sẵn trong PHP. Sự tăng tốc này là do việc mảng này có một kích thước cố định, không thay đổi như PHP mặc định, và do không được phép sử dụng các chỉ mục phi số. Liệt kê 10 chỉ ra cách nó được sử dụng.


Liệt kê 10. SplFixedArray
{geshibot lang="php" head=""}$array = new SplFixedArray(3); 
$array[0] = 'dog'; 
$array[1] = 'cat'; 
$array[2] = 'bird'; 
$a->setSize(4); // increase the size on the fly 
$array[3] = 'mouse'; 
foreach ( $array as $value ) 
echo "[$value],";
Output: 
[dog],[cat],[bird],[mouse] {/geshibot}

Ngoài ra còn có một vài lớp biến lặp mới đã được thêm vào: FilesystemIterator và GlobIterator. Các biến này làm việc như các lớp biến lặp khác trong PHP, nhưng chúng được thiết kế đặc biệt dùng cho vài cá thể nhất định.

Một thay đổi nữa với SPL là ở chỗ bây giờ nó luôn được kích hoạt trong PHP V5.3. Trong các phiên bản trước của PHP V5, bạn có thể vô hiệu hoá SPL vào lúc dịch, nhưng đối với PHP V5.3, việc này không còn cho phép.

Các bổ sung mới cho SPL thêm một số chức năng hữu ích vào PHP rất dễ sử dụng, cũng như các bổ sung về cấu trúc dữ liệu, thí dụ như các danh sách móc nối kép, stack, heap, và hàng đợi. Các lớp này có thể được sử dụng để thay thế các cài đặt không gian người dùng mà bạn có thể có, chúng sẽ thu được tốc độ gia tăng và sự kết hợp tốt hơn với các cấu trúc và hàm PHP khác nhau.

Giờ chúng ta đã thấy một vài bổ sung mới cho SPL, hãy xem cách OOP trong PHP V5.3 đã thu được một hiệu năng quan trọng và cải thiện việc sử dụng bộ nhớ với bổ sung việc gom rác xoay vòng (circular garbage collection).

Gom rác xoay vòng

Một vấn đề mà các nhà phát triển PHP gặp phải trên quan điểm hiệu năng là việc gom rác (garbage collection). PHP có một bộ gom rác khá đơn giản, mà về cơ bản sẽ thu thập rác cho một đối tượng khi nó không còn nằm trong phạm vi hợp lệ. Cách mà nó thực hiện việc này về mặt nội tại là bằng cách sử dụng một bộ đếm quy chiếu (reference counter), để khi bộ đếm chạm 0 (có nghĩa là không còn các quy chiếu đến đối tượng này nữa), đối tượng sẽ được thu gom và gạch bỏ từ bộ nhớ.

Việc này khá tốt, nhưng có thể trở thành một vấn đề trong các tình thế khi một đối tượng quy chiếu đến một đối tượng khác theo quan hệ cha-con (parent-child relationship). Với tình tình thế này, bộ đếm quy chiếu đối với các đối tượng đó không được thu gom, nên bộ nhớ sử dụng bằng đối tượng này lưu lại trong bộ nhớ không quy chiếu (unreferenced memory) và không được ngừng cấp phát, cho đến khi kết thúc yêu cầu. Chúng ta hãy quan sát một ví dụ khi vấn đề này xảy ra.


Liệt kê 11. Quan hệ lớp cha-con bị thu gom rác không phù hợp trong bản PHP V5.2 và bản trước đó

{geshibot lang="php" head=""}class Parent
{
    public function __construct()
    {
        $this->child = new Child($this);
    }
}

class Child
{
    public function __construct(
        Parent $parent
        )
    {
        $this->parent = $parent;
    }
} {/geshibot}

Trong ví dụ này, mỗi khi bạn tạo ra một cá thể của lớp Parent và sau đó cá thể tiếp theo không còn nằm trong phạm vi hợp lệ, bộ nhớ không bao giờ được giải phóng, như vậy kịch bản lệnh sẽ ngày càng lớn thêm trong việc sử dụng bộ nhớ. Có một số giải pháp về không gian người dùng đối với vấn đề này, chẳng hạn như tạo một hàm huỷ cho lớp cha mà sẽ trực tiếp giải phóng đối tượng con. Hàm huỷ này sẽ phải được gọi ra riêng trước khi bỏ thiết đặt quy chiếu lớp cha (parent class reference). Thực hiện tất cả các việc này gây phức tạp một chút cho chương trình của bạn.

Trong PHP V5.3, bộ gom rác sẽ dò tìm các quy chiếu vòng này và có thể giải phóng hết bộ nhớ chúng sử dụng, do đó việc sử dụng bộ nhớ PHP sẽ giữ được ngang bằng khi kịch bản lệnh được thực hiện. Khi mỗi tham chiếu đến lớp Parent được loại bỏ, tham chiếu lớp Child bên trong lớp Parent cũng sẽ được gom rác.

Tóm tắt

PHP đã tiến thêm một quãng dài về cách hỗ trợ lập trình hướng đối tượng, từ việc hỗ trợ yếu trong những ngày còn PHP V4 cho đến các bổ sung nhiều cải tiến hơn trong PHP V5 và các thay đổi nhỏ với các bản tiếp sau đó. Hiện nay, PHP V5.3 đã đạt được một vài cải thiện hứng thú, gồm các cải tiến về cú pháp như các phương thức ma thuật mới __callStatic(), các cuộc gọi tĩnh động, liên kết tĩnh muộn, phương thức tĩnh, và trợ giúp thành viên. Các bổ sung mới vào SPL với các bổ sung danh sách móc nối kép, các stack, heap, và hàng chờ, đặt ra một vài cấu trúc dữ liệu thông thường trên đầu ngón tay bạn (dễ tìm thấy) và làm cho chúng dễ sử dụng. Cuối cùng, bộ gom rác xoay vòng mong đợi từ lâu đã ổn định bộ nhớ và các vấn đề về hiệu năng làm việc với các lớp tự quy chiếu, bằng cách cài đặt một bộ gom rác nhiều cải tiến mà đã giải phóng bộ nhớ đúng cách cho các cá thể vòng tròn này. Tất cả các đặc tính này làm cho PHP V5.3 trở thành một ngôn ngữ mạnh hơn nhiều đối với lập trình hướng đối tượng.

Liên kết

Tin được quan tâm nhất

Quản cáo

Tags: xo so , kqxs , xo so mien bac , ket qua xo so , ket qua xo so mien bac , so xo , xskt , ket qua so xo , xổ số miền bắc , xs , soi cau xoso , ket qua xsmb , soi cau mb , ket qua , so ket qua , kết quả xổ số , du doan xo so , xo so truc tiep , xosomienbac , soi cau mien bac , du doan xsmb , kqxs mb , xo so hom nay , du doan xo so mien bac , xổ số , soi cau lo , soxo , ket qua xo so hom nay , kết quả xổ số , kết quả , xổ số miền bắc , tần số nhịp , soi cầu lotto , lotto gan , đầu đuôi lotto , đo dàn đặc biệt , chu kỳ đặc biệt , vietlott , sx vietlott , mega , mega 6/45 , power 6/55 , jackpot mega 6/45 , jackpot power 6/55 , xổ số điện toán , xo so dien toan , xổ số mega , vietlott power , xổ số power , jackpot power , power , xổ số miền trung , kết quả xổ số miền trung , kqxs miền trung , xs miền trung , xs mt , kqxs mt , xổ số miền nam , kết quả xổ số miền nam , kqxs miền nam , xs miền nam , xs mn , kqxs mn , lịch vạn niên , xem lịch hôm nay , xem ngày , xem giờ tốt , xem ngày tốt , giờ tốt hôm nay , lịch hôm nay , giờ hoàng đạo , xem giờ hoàng đạo , thiết kế website , thiết kế web giá rẻ , thiết kế web , thiết kế logo , thiết kế ấn tượng , mẫu thiết kế , thiết kế , design website , design web , design logo , design template , design , đồ họa , lập trình , máy tính , hack , hacker , bảo mật , mạng máy tính , công nghệ , thủ thuật , facebook , like , tăng like , fanpage , phần mềm , tin học , thông tin , php , website , web , logo , template , mẫu đẹp , soi cầu mb , du doan xsmb , dự đoán xsmb , du doan xo so mien bac , du doan xs mb , du doán xsmb , xoso minh ngoc , xổ số hà nội , xổ số ha noi , xsmb 30 ngày , xsmb 30 ngay , xsmb30ngay , xo so mien bac 30 ngay , xsmb30 ngày , kết quả xổ số miền bắc hôm nay , kết quả xổ số miên bắc hôm nay , xổ số miền bắc hôm nay , xổ số miên bắc hôm nay , xô sô miên băc hôm nay , xô số miền bắc hôm nay , xổ số miền bắc , kết quả xổ số , ket qua xsmb , ket qua xo so mien bac , ket qua xs mb , xo số miền bắc , kết qua xsmb , xô sô miên băc , xổ số miên bắc , xổ số miền băc , xo so , xổ số , xô số , xôso , xổ sô , xstd , kết quả xổ số miền bắc , kết quả xổ số miên bắc , kếtquảxổ sốmiềnbắc , xsmn , xổ số miền nam , sxmn , kqxs , xổ số miền nam hôm nay , xổ số hôm nay , xo so mien nam , kqxsmn , xs mn , xô số miền nam , xs kt , xo số miền nam , kq xs , xô số hôm nay , xo số mien nam , xỗ số miền nam , xo số miền nam hôm nay , xổ so hôm nay , sxmb , xổ số miền trung , xổ số miền trung hôm nay , xs mt , xô sô miên trung hôm nay , xsmb , kqxsmb , xs mb , xổ số miền bac , kq xsmb , xổ số mien bac , xổ so miền bắc , xs minh ngọc , xsmb thu 6 , xsmb thứ 6 , xs mega , xs bd , xs vl , xo so mien bac thu 6 , xosome , sổ kết quả , quay thử xổ số miền nam , dudoan xsmn , du đoán xsmn , xổ số vietlott , soi cầu , xổ số cần thơ , dự đoán kết quả xổ số siêu chính xác hôm nay , du đoán kết quả xổ số siêu chính xác hôm nay , soi cau du doan xsmb chinh xac 100 , xo so me , xs vietlott , xổ số khánh hòa , xổ số gia lai , xổ số đắk lắk , xổ số bạc liêu , xổ số bình định , xổ số đà nẵng , trực tiếp xổ số miền nam , xsmn thứ 4 , xổ số đồng nai , xổ số thủ đô , dự đoán xổ số miền nam , xổ số miền nam thứ ba , xổ số miền nam trực tiếp , trực tiếp xổ số miền bắc , truc tiếp xổ số miền bắc , xổ số miền bắc trực tiếp , trực tiếp kết quả xổ số miền bắc , trục tiếp kết quả xổ số miền bắc , xổ số miền nam minh ngọc , soi cầu miền bắc , dự đoán xổ số miền bắc , xổ số đại phát , soi cau xo so mien bac , soi cau xs mb , xs bl , xs st , quay thử xổ số miền bắc , thống kê kết quả xổ số miền bắc 100 ngày , xổ số tiền giang , thống kê xổ số miền bắc , truc tiep xsmb , truc tiep xo so mien bac , trưc tiêp xsmb , truc tiếp xsmb , tructiep xsmb , xổ số trực tiếp miền bắc , xổ số bến tre , dd xsmb , xổ số long an , xổ số miền bắc 100 ngày , xsmn thứ 2 , xsmn thu2 , xổ số miền bắc hàng tuần , xổ số miền bắc hàng ngày , xổ số vũng tàu , xổ số miền bắc 30 ngày , xổ số miền nam chủ nhật , xổ số miền nam thứ 6 , xổ số trực tiếp , xổ số miền nam thứ 7 , kết quả xổ số mb , xổ số miền nam thứ 2 , xổ số trực tiếp miền nam , xổ số miền nam thứ tư hàng tuần , xổ số minh ngọc miền nam , xổ số đồng tháp , xổ số trực tiếp hôm nay , xổ số thành phố , xổ số miền bắc thứ sáu hàng tuần , xổ số miền , xổ số miền bắc hôm quả , xổ số tây ninh , xổ số hà nội hôm nay , xsmb truc tiep , xsmb trực tiếp , xổ số miền nam thứ hai , xổ số miền bắc thứ ba , xổ số ba miền , xổ số miền bắc ngày hôm nay , xổ số miền bắc thứ ba hàng tuần , xổ số vĩnh long , xổ số vinh long , xs mien bac , xs mien bắc , xổ số đài bắc , xổ số miền bắc hôm qua , xổ số miền bắc hom qua , xổ số phú yên , ket qua xo so , so xo mien bac , kết quả xsmb , ket qua so xo , ket qua so xo mien bac , xsmn kết quả xổ số miền nam , xo so mien bac hom nay , sổ xô miên bắc hôm nay , kết quả xổ số kiến thiết miền bắc , xs mb hom nay , so xo mien bắc , số xo mien bac , kết qua xo so , ket qua xo số , xổ số kiến thiết miền bắc , kqxs miền bắc , xsmb hôm nay , miền bắc , xổ số kiến thiết miền bắc hôm nay , xsmb xsmn kết quả xổ số miền bắc hôm nay , xổ số hôm nay miền bắc , xsktmb , xskt miền bắc , xs dt , xs mb hôm nay , kqxs mien bắc , xsmbhom nay , xsmb xsmn kết quả xổ số miền bac hôm nay , so xo , xs bt , xổ số mb , kqxs miền nam , kqxs mien nam , ket qua xs mien nam , xo số mb , xo sô mb , xosomienbac , kqxs mien bac , xoso mien bac , xổ số kiên giang , kết quả xổ số miền nam , so xo mien nam , xo so hom nay , số miền nam , xs hom nay , xổ số bình dương , xsmn hom nay , xsmn sxmn kết quả xố số miền nam hôm nay , xổ số sóc trăng , xổ số trà vinh , kết quả xổ số miền nam hôm nay , xổ số chiều nay , xổ số cà mau , xstt , xs mien nam , xổ số kiến thiết miền nam , kết quả xổ số hôm nay , xổ số hồ chí minh , xổ số kiến thiết , ket qua xo so mien nam , xổ số miền nam hôm qua , xổ số miền nam ngày hôm nay , sxmn hôm nay , xo so mn , xs3m , xshom nay , kqsxmn , xổ số ba đài , xskt hôm nay , xosomiennam , xổ số kiến thiết hôm nay , xổ số bình phước , xsbth , xs dn , xs vt , xs tg , xs tn , xskt miền nam , xs ag , xs mn hom nay , xoso mien nam , xổ số hcm , xs bth , số xo mien nam , xsmn sxmn kết quả xổ số miền nam hôm nay , xs kt hôm nay , kết quả xo so mien nam , kết quả xố số hôm nay , kết quả xổ số miền trung , xo so mien trung , so xo mien trung , xs mien trung , kết quả xổ số miền trung hôm nay , xs daklak , xs mtrung , xo so miền trung , xskt mien trung , kq xs mt , xs đăk lăk , sốmientrung , số miền bắc , kết quả xổ số miền bắc ngày hôm nay , kết quả xổ số xsmb , kqxs 30 ngày , kqxsmb hôm nay , kết quả xổ số miền bắc hôm qua , kqxs 30 ngay , sốmienbac , kq xsmb hôm nay , kqxsmb 30 ngày , du doan xsmn , xổ số an giang , xổ số quảng ngãi , xsmb 30 , xsmn thứ 5 , xsmn thứ 6 , quay thu xsmb , soi cau mn , xổ số kon tum , xsmn thứ 7 , xsmn thứ 3 , xsmb 90 ngày , quay thu xsmn , du doan mb , xsmb thu 4 , xsmb thứ 7 , xsmb thu 5 , xổ số minh ngọc hôm nay , xổ số miền bắc thứ hai hàng tuần , xsmb thu 2 , xổ số miền bắc thứ bảy hàng tuần , xổ số miền bắc chủ nhật hàng tuần , xsmn chủ nhật , xổ số hậu giang , xổ số miền bắc thứ tư hàng tuần , xsmb thứ 5 , xổ số đà lạt , xsmb thứ 3 , xsmn thu 6 , xsmb thu 3 , xổ số miền bắc thứ năm hàng tuần , xsmb minh ngoc , xsmb thu 7 , xs khanh hoa , xsmn thu 7 , xs gia lai , xsmn cn , xsmb thứ 4 , xsmb cn , ketquanet , kết quả xổ số miền bắc 30 ngày , xổ số bình thuận , xs da nang , xsmb thứ 2 , xổ số miền nam thứ 3 , xổ số miền bắc chủ nhật , xs kon tum , xsgl , xổ số miền nam thứ sáu hàng tuần , xổ số miền nam thứ tư , xổ số miền nam thứ ba hàng tuần , xổ số miền bắc minh ngọc , xổ số miền nam chủ nhật hàng tuần , xổ số miền nam thứ năm hàng tuần , quay thu mn , xổ số miền bắc thứ bảy , xổ số miền nam thứ bảy hàng tuần , xổ số miền nam thứ hai hàng tuần , xổ số miền bắc thứ hai , xổ số quảng bình , xổ số miền bắc thứ tư , xổ số miền bắc thứ sáu , xổ số miền nam thứ bảy , kết quả xổ số 30 ngày , xổ số 3 miền , xổ số chủ nhật hàng tuần , xổ số miền nam thứ năm , xổ số miền bắc thứ năm , dự đoán xổ số miền trung , ket qua xsmb 30 ngay , xổ số ninh thuận , quay thử xsmb , xổ số miền nam thứ sáu , xổ số thứ tư hàng tuần , thong ke xsmb , kết quả xsmb 30 ngày , xổ số thứ hai hàng tuần , xổ số thứ năm hàng tuần , xổ số thứ bảy hàng tuần , xổ số thứ ba hàng tuần , xsmb 200 ngày , thống kê xsmb , xổ số thứ sáu hàng tuần , xs binh dinh , xsbdi , kqxs minh ngoc , xsmb chu nhat , xstd 30 , soi cầu 666 , xổ số 30 ngày , xsmb chủ nhật , thống kê kết quả xổ số miền bắc , xsmb 90 ngay , xs quang ngai , xsmb 30 ngày gần nhất , dự đoán xsmb minh ngọc , dự đoán xsmb win2888 , truc tiep xsmn , xsmt thứ 2 , xsmb t7 , xsmn t4 , xsmb 200 ngay , soi cau wap , xsmb30 , xsmb minh ngọc , xs khánh hòa , xsmb 100 ngay , xo so phu yen , xsmn thu5 , xsmb 100 ngày , xo so binh dinh , xsmnthu4 , du doan xs , kqxs minh ngọc , xo so quang ngai , xsmnthu3 , xs py , xsmn thu4 , xsmn 30 ngay , soi cau xsmb win2888 , xs gl , xsmn thu6 , xsmnthu5 , xsmb thu3 , xs khánh hoà , xs qng , xstd30 , dự đoán mb , xsmbthu3 , xs hg , trực tiếp xsmn , xs dl , xs mb t7 , xs mn thu 7 , xs mn thu 5 , du doan xsmb win2888 , ket qua xo so mien bac 30 ngay , quay thu xs mb , xs mn thu 3 , xs mn thu 2 , xs mn thu 6 , xs mb thu 4 , xs mb cn , xs mn thu 4 , du doan xsmb minh ngoc , xs binh đinh , xo so mien bac thu 5 , xs mb thu 2 , xs mb chu nhat , dự đoán mn , quay thu xs mn , quay thu xo so mien bac , xs mt thu 2 , xs mn cn , xs khanh hòa , xs mn minh ngoc , thong ke xs mb , xs khanh hoà , dự đoán xsmb minh ngoc , dudoan mn , du đoán mb , xs truc tiep , xs trực tiếp , xs truc tiếp , max 3d , max3d , xsglai , xsmn t7 , số kết quả , xs g lai , xs mn t7 , ket qua vietlott , ket quả vietlott , kết quả vietlott , sosomienbac , kq vietlott , xổ số vietlott hôm nay , vietlott hôm nay , xs tv , xsmchung , dự đoán giải đặc biệt ngày mai , xo so online , dò vé số , dự đoán xổ số , xổ số hà nội trực tiếp , dự đoán kết quả xổ số miền bắc , xổ số me , xổ số mẹ , xô sô me , xổ số miền bắc trực tiếp hôm nay , trực tiếp xổ số miền bắc hôm nay , xổ số ba miền hôm nay , quay thử xổ số miền bắc hôm nay , trực tiếp xổ số miền nam hôm nay , kết quả xổ số vietlott , xổ số cần thơ hôm nay , soi cầu dự đoán xổ số miền bắc hôm nay , kết quả xổ số vietlott hôm nay , dự đoán kết quả xổ số , dự đoán kết quả xổ số miền bắc hôm nay , du đoán kết quả xổ số miền bắc hôm nay , soi cầu xổ số , dự đoán xổ số miền bắc hôm nay , xổ số miền nam trực tiếp hôm nay , trực tiếp kết quả xổ số miền nam , kết quả xổ số trực tiếp miền nam , dư đoán xổ số miền bắc hôm nay , du đoán xổ số miền bắc hôm nay , xổ số trực tiếp miền nam hôm nay , trực tiếp kết quả xổ số miền bắc hôm nay , trực tiếp xổ số hôm nay , soi cầu miền bắc hôm nay , dự đoán xổ số miền trung chính xác 100 , trực tiếp miền bắc , xổ số miền bắc hôm nay trực tiếp , truc tiep kết quả xổ số miền bắc hôm nay , tra cứu kết quả xổ số miền bắc , xs dien toan , xsdientoan , dự đoán xổ số miền nam hôm nay