Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Những tính năng mới trong PHP 7.2

Mặc dù PHP 7.2 ra mắt cũng khác lâu rồi (30/11/2017) nhưng nay mình mới có thời gian viết về nó :D. Bài này mình sẽ list ra những tính năng mới trong PHP 7.2 cho mọi người cùng biết.

1. Những tính năng mới

New object type

- Giờ đây bạn đã có thể xác định type là object cho parameter hoặc return type trong PHP.

<?php

function test(object $obj) : object
{
    return new SplQueue();
}

test(new StdClass());

Ghi đè abstract method

- PHP 7.2 đã cho chúng ta overwrite lại abstract method trong class abstract cha.

abstract class A
{
    abstract function test(string $s);
}
abstract class B extends A
{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;
}

Băm password với Agron2

- Agron2 đã được thêm vào trong password hashing của PHP với các hằng số như sau:

PASSWORD_ARGON2I
PASSWORD_ARGON2_DEFAULT_MEMORY_COST
PASSWORD_ARGON2_DEFAULT_TIME_COST
PASSWORD_ARGON2_DEFAULT_THREADS

Mở rộng thêm các kiểu string cho PDO

- Bổ sung thêm một số kiểu string mở rộng phù hợp với một số kí tự của một số quốc gia (cái này thì Việt Nam mình không cần phải quan tâm lắm).

Các kiểu được bổ sung:

PDO::PARAM_STR_NATL
PDO::PARAM_STR_CHAR
PDO::ATTR_DEFAULT_STR_PARAM

Bổ sung thêm một số phương thức trong Socket extension

- Ở phiên bản này PHP đã bổ sung thêm một số phương thức giúp tra cứu thông tin address của socket (nằm trong socket extension).

Các hàm được bổ sung lần này là:

Thay đổi type của parameter

- Giờ đây bạn đã có thể thay đổi type của parameter được định nghĩa ở interface cha.

interface A
{
    public function Test(array $input);
}

class B implements A
{
    public function Test($input){} // type omitted for $input
}

Cho phép sử dụng dấu phẩy trong nhóm namespace.

Như các bạn đã biết thì PHP 7 đã cho phép chúng ta khai báo sử dụng group namespace, và giờ đây PHP 7.2 cũng cho phép chúng ta sử dụng dấu phẩy để ngăn cách giữa các namespace.

<?php

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};

Hàm proc_nice() đã được hỗ trợ trên windows.

- Hàm proc_nice() nay đã được hỗ trợ trên windows. Đây là hàm cho phép chúng ta thay đổi mức độ ưu tiên của process trên hệ điều hành.

Cải tiến exif extension.

- PHP 7.2 đã cải tiến exif extension để nó có thể hoạt động tốt hơn trên nhiều device khác nhau, như lần này PHP 7.2 đã mở rộng trên các thiết bị sau:

  • Samsung
  • DJI
  • Panasonic
  • Sony
  • Pentax
  • Minolta
  • Sigma/Foveon
  • AGFA
  • Kyocera
  • Ricoh
  • Epson

Hỗ trợ ghi Blob trong SQLite3

- PHP 7.2 đã cho phép chúng ta có thể ghi blob trong SQLite3, trước đây chỉ có thể đọc được thôi :D.

Hỗ trợ failover callback trong Oracle OCI8

- PHP 7.2 đã hỗ trợ tự động kết nối lại một OCI8 connection khi nó bị hỏng hoặc bị một vấn đề nào đó dẫn đến việc disconnect đột ngột. Cái này cực tốt đối với những bạn nào sử dụng PHP + Oracle DB.

Cải tiến Zip extension.

- Giờ đây chúng ta đã có thể đọc ghi các tài liệu đã được archives, nhưng chúng ta phải chắc chắn là hệ điều hành đã được cài libzip >1.2.0. Đồng thời class ZipArchive đã được implement coutable interface (cái này giúp chúng ta đếm số file trong ZIP archive).

2. Loại bỏ tính năng

png2wbmp() và jpeg2wbmp()

- Hai hàm này trong GD extension đã chính thức được chuyển về trạng thái deprecated và sẽ được loại bỏ trong version tiếp theo của PHP.

Hàm __autoload()

- Hàm này cũng đã được đánh deprecated và sẽ được loại bỏ ở version tiếp theo, vì theo như PHP nói thì hàm này không có khả năng xâu chuỗi lại được các autoloader, và nó không có khả năng tương tác được với các autoloader khác. Thay vào đó thì PHP khuyên chúng ta sử dụng hàm  spl_autoload_register()

Hàm create_function()

- Hàm này cũng sẽ được loại bỏ, vì nó luôn quan đến vấn đề bảo mật. Bản thân hàm này cũng rất ít khi được sử dụng, hầu như là không bao giờ. Và nếu như bạn cần sự lựa chọn thay thế thì hãy xem xét sử dụng anonymous function trong PHP.

Hàm parse_str() với một tham số

- Hàm parse_str() bây giờ bắt buộc bạn phải truyền vào hai tham số, với tham số thứ 2 là biến chưa output của hàm.

Hàm gmp_random()

- Hàm này giúp chúng ta tạo ra một số ngẫu nhiên được tính trên unexposed, nằm trên gói GMP.

Hàm each()

- Hàm này được loại bỏ bởi hiệu năng của nó chậm hơn rất nhiều so với foreach và nó cũng gặp phải một số vấn đề trên một số ngôn ngữ.

Hàm assert() với tham số là string.

- Hàm này sẽ ngừng hỗ trợ đối với tham số truyền vào là String.

Hàm read_exif_data()

- Hàm này sẽ được thay thế bằng hàm  exif_read_data()

3. Một số thay đổi

Ngăn chặn hàm number_format trả về số 0 âm

Ở các phiên bản trước thì hàm này vẫn có thể trả về -0  bởi vì theo chuẩn IEEE 754 floating point specification thì hoàn toàn là có thể. Nhưng giờ đây PHP đã ngăn chặn không cho nó trả về -0 nữa.

VD:

<?php

var_dump(number_format(-0.01)); 
// bây giờ kết quả trả về string(1) "0" thay thế cho string(2) "-0"
// trong các phiên bản trước.

Chuyển đổi key là số trong object hoặc ép kiểu array

Các bạn xem ví dụ cho dễ hiểu nhé.

<?php

// array to object
$arr = [0 => 1];
$obj = (object)$arr;
var_dump(
    $obj,
    $obj->{'0'}, // bây giờ đã hoạt động
    $obj->{0} // bây giờ đã hoạt động
);
<?php

// object to array
$obj = new class {
    public function __construct()
    {
        $this->{0} = 1;
    }
};
$arr = (array)$obj;
var_dump(
    $arr,
    $arr[0], // bây giờ đã hoạt động
    $arr['0'] // bây giờ đã hoạt động
);

Cảnh báo khi sử dụng hàm count()

Bây giờ khi sử dụng hàm count đối với tham số không có khả năng đếm thì PHP sẽ show warning message.

Để hiểu rõ hơn về những thứ non-countable bạn có thể xem ví dụ sau:

<?php

var_dump(
    count(null), // NULL is not countable
    count(1), // integers are not countable
    count('abc'), // strings are not countable
    count(new stdclass), // objects not implementing the Countable interface are not countable
    count([1,2]) // arrays are countable
);

Kết quả trả về sẽ như sau:

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d

Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
int(0)
int(1)
int(1)
int(1)
int(2)

Và còn một số thứ khác nữa, để biết chi tiết bạn có thể xem tại đây.

https://www.php.net/manual/en/migration72.php

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha