Get native type of a variable using get_debug_type() in PHP 8

1. Giới thiệu Trước PHP 8, bất cứ khi nào bạn muốn lấy kiểu của một biến, bạn có thể sử dụng hàm gettype . <?php $foo = 'bar'; echo gettype($foo); // string $object = new stdClass; echo gettype($object); // object Như bạn có thể thấy, hàm gettype sẽ trả về kiểu của một biến

1. Giới thiệu

Trước PHP 8, bất cứ khi nào bạn muốn lấy kiểu của một biến, bạn có thể sử dụng hàm gettype .

<?php

$foo = 'bar';

echo gettype($foo); // string

$object = new stdClass;

echo gettype($object); // object

Như bạn có thể thấy, hàm gettype sẽ trả về kiểu của một biến dưới dạng một chuỗi. Đây là tất cả các giá trị có thể được trả về bởi hàm.

  • boolean
  • integer
  • double
  • string
  • array
  • object
  • resource
  • resource (closed) as of PHP 7.2.0
  • NULL
  • unknown type

Nhưng vấn đề với gettype là nó trả về các kiểu dài thay vì các kiểu gốc và quen thuộc hơn. Ví dụ, nó trả về integer thay vì int, double thay vì float, …

Để giảm thiểu vấn đề này, PHP 8 đã giới thiệu một hàm mới có tên là get_debug_type, cùng nhau khai sáng thôi nào !

2. Bắt đầu

Hàm get_debug_type mới sẽ trả về kiểu “gốc” thực sự của một biến. Và như mình đã nói trước đó, hàm sẽ khác với gettype ở chỗ nó sẽ trả về các tên kiểu gốc, ví dụ: int thay vì integer, double thay vì float.

Bảng sau đây cho thấy hàm get_debug_type trả về cho các giá trị khác nhau và hàm gettype:

Ngoài ra, hàm sẽ tự động get tên lớp của các đối tượng. Vì vậy, thay vì làm như vậy bằng cách sử dụng gettype:

<?php

$bar = $arr['key'];

if (!($bar instanceof Foo)) {
  throw new TypeError('Expected ' . Foo::class . ' got ' . (is_object($bar) ? get_class($bar) : gettype($bar)));
}

Bạn có thể đơn giản hóa nó bằng cách sử dụng get_debug_type (get_class) như vậy.

<?php
$bar = $arr['key'];

if (!($bar instanceof Foo)) { 
  throw new TypeError('Expected ' . Foo::class . ' got ' . get_debug_type($bar));
}

3. Kết thúc

Vì vậy, nếu bạn muốn nhất quán hơn trong việc nhận kiểu của một biến bạn nên sử dụng hàm get_debug_type thay vì hàm gettype.

Thân ái ! chồ tộm biệt !
Quyết thắng đại dịch!

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ