Hướng dẫn dùng constsnt trong PHP

Khái niệm về hằng số trong PHP

Hằng số là một tên (dịnh danh) cho một giá trị đơn giản. Gọi là hằng số bởi vì giá trị ứng với tên hằng sau khi định nghĩa là không đổi trong quá trình thi hành script. Mặc định hằng số có phân biệt chữ hoa chữ thường. Thông thường viết code thì ta nên đặt tên hằng số bằng các ký tự IN HOA. Một hằng số phải bắt đầu bằng một ký tự chữ  (a-Z) hoặc gạch dưới (_), theo sau không được chứa các ký tự đặc biệt.

Nội dung chính

  • Khái niệm về hằng số trong PHP
  • Định nghĩa hằng số với hàm define
  • Định nghĩa hằng với từ khóa const
  • Sự khác nhau giữa hằng số và biến
  • Các hằng số đặc biệt (Magic Constant) trong PHP
  • Các hằng số định nghĩa trước trong PHP

Nếu dùng biểu thức chính quy đề kiểm tra đặt tên là phù hợp, thì biểu thức đó là:

^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$

Định nghĩa hằng số với hàm define

Để định nghĩa một hằng số bạn phải sử dụng hàm define() với cú pháp của hàm đó như sau:

define ( string $name , mixed $value) : bool

Trong đó $name là tên hằng số, và $value là giá trí gán cho hằng số, giá trị hằng số phải là một trong các kiểu:  boolean, integer, float string.

Để lấy giá trị hằng bạn chỉ cần chỉ ra tên hằng, hằng số có phạm vi toàn cục, có nghĩa là sau khi định nghĩa bạn có thể truy cập nó ở bất kỳ đâu.

Trong trường hợp bạn dùng biến lưu trữ tên hằng thì lấy giá trị của hằng bằng hàm constant($name).

<?php 
    define("FIRSTWEEKDAY", 'MONDAY');


    echo FIRSTWEEKDAY, PHP_EOL;         //Lấy hằng số bằng cách chỉ ra tên

    $firstweek = 'FIRSTWEEKDAY';
    echo constant($firstweek), PHP_EOL; // Lấy hằng số có tên lưu trong biến $firstweek
?> 

Khi bạn định nghĩa một hằng số, nếu trước đó đã định nghĩa sẽ dẫn tới lỗi. Khi cần thiết, bạn có thể kiểm tra xem một hằng số đã được định nghĩa hay chưa bằng hàm defined($ten-hang-so);

// Kiểm tra xem hằng số MYCOLOR có tồn tại không, nếu không
// thì bắt đầu định nghĩa
if (!defined('MYCOLOR'))
{
    define('MYCOLOR', 'Green');
}

Định nghĩa hằng với từ khóa const

Với PHP 5.3.0 trở đi thì có thể dùng từ khóa const để định nghĩa hằng số, từ PHP 7 còn có thể định nghĩa hằng số bằng một mảng các giá trị, ví dụ:

// Định nghĩa hằng số bằng từ khóa const
const MONDAY = "THỨ HAI";
echo MONDAY, PHP_EOL;

// hằng số là một mảng các ký tự
const DAYOFWEEK = [
    'CHỦ NHẬT', 'THỨ HAI', 'THỨ BA', 'THỨ TƯ', 'THỨ NĂM', 'THỨ SAU', 'THỨ BẢY',
];
// Truy cập đọc hằng số
echo DAYOFWEEK[6]; // THỨ BẢY

Dùng từ khóa const cũng là cách tạo hằng số cho một lớp ở phần lập trình hướng đối tượng PHP

Sự khác nhau giữa hằng số và biến

  • Tên hằng số thi không cần bắt đầu bằng ký tự dollar $ như biến.
  • Hằng số không thể sử dụng phép gán giá trị như biến (=), giá trị của nó phải được xác định duy nhất tại hàm define.
  • Hằng số có thể truy cập bất cứ ở đâu mà không giới hạn phạm vị như biến.
  • Ngay sau khi giá trị hằng thiết lập, nó không bị thay đổi hay định nghĩa lại nữa.

Các hằng số đặc biệt (Magic Constant) trong PHP

PHP cung cấp một số lượng lớn các hằng đã định nghĩa sẵn, một số hằng rất đặc biệt gọi là Magic constant.  Dưới đây là một số hằng Magic (ma thuật):

Tên hằngMô tả
__LINE__ Dòng hiện tại của php file.
__FILE__

Tên file đầy đủ của script đang thi hành.

__DIR__ Tên thư mục đầy đủ của file PHP
__FUNCTION__ Lấy tên của hàm đang chạy
__CLASS__ Tên của lớp đang chạy
__TRAIT__ Tên của trait đang chạy
__METHOD__ Lấy tên mothod của lớp
__NAMESPACE__ Lấy tên namspace
ClassName::clas Tên đầy đủ của một lớp

Các hằng số định nghĩa trước trong PHP

Khi PHP hoạt động có vô số hằng số, một số định nghĩa bởi nhân của PHP, một số do các thành phần mở rộng (Extension), để lấy các hằng số đã định nghĩa thì dùng hàm get_defined_constants, nó trả về mảng các hằng số có trong PHP đang hoạt động của bạn

$allConst = get_defined_constants(true);
print_r($allConst);

Một số hằng số đã định nghĩa trước bởi nhân PHP tham khảo tại: reserved.constants, ví dụ PHP_EOL là ký tự xuống dòng.

Source code: const (Git), hoặc tải rphp-const

Trong bài này, chúng ta sẽ tìm hiểu kỹ về các kiểu dữ liệu số (number) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP. Và các bạn cần đọc lại bài Các kiểu dữ liệu (data type) trong PHP để nắm sơ lược về kiểu dữ liệu IntegerFloat trong PHP.

Nội dung chính

  • 1. Kiểu dữ liệu số nguyên (Integer) trong PHP
  • 2. Kiểu dữ liệu số thực (Float) trong PHP
  • 3. Not a Number trong PHP (PHP NaN)
  • 4. Chuỗi số trong PHP (PHP Numerical Strings)
  • 5. Ép kiểu String và Float sang Integer trong PHP

1. Kiểu dữ liệu số nguyên (Integer) trong PHP

Trong hệ thống 32bit, kiểu Integer lưu trữ một số nguyên từ -2147483648 (2^31-1) đến 2147483647 (2^31). Trong hệ thống 64bit, kiểu Integer lưu trữ một số nguyên từ -9223372036854775808 (2^63-1) đến 9223372036854775807 (2^63).

Lưu ý: Một giá trị nằm ngoài phạm vi lưu trữ trên sẽ được lưu trữ với kiểu dữ liệu Float.

PHP có các hằng số (constant) được xác định trước cho các số nguyên:

  • PHP_INT_MAX: Số nguyên lớn nhất được hỗ trợ
  • PHP_INT_MIN: Số nguyên nhỏ nhất được hỗ trợ
  • PHP_INT_SIZE: Kích thước của một số nguyên tính theo byte

PHP có các function hỗ trợ kiểm tra xem một biến có đang lưu trữ số nguyên hay không:

  • is_int()
  • is_integer()
  • is_long()
<?php
echo "PHP_INT_MAX: ".PHP_INT_MAX."<br>";
echo "PHP_INT_MIN: ".PHP_INT_MIN."<br>";
echo "PHP_INT_SIZE: ".PHP_INT_SIZE." bytes<br>";
$x = 5985;
echo 'Is $x Integer? ';
var_dump(is_int($x));
$y = 59.85;
echo '<br>Is $y Integer? ';
var_dump(is_int($y));
?>
Kết quả
PHP_INT_MAX: 9223372036854775807
PHP_INT_MIN: -9223372036854775808
PHP_INT_SIZE: 8 bytes
Is $x Integer? bool(true)
Is $y Integer? bool(false)

2. Kiểu dữ liệu số thực (Float) trong PHP

Kiểu dữ liệu Float có thể lưu trữ giá trị lên đến 1.7976931348623E+308 và có tối đa là 14 chữ số ở phần thập phân.

PHP có các hằng số (constant) được xác định trước cho các số thực:

  • PHP_FLOAT_MAX: Số thực lớn nhất có thể lưu trữ
  • PHP_FLOAT_MIN: Số thực nhỏ nhất có thể lưu trữ
  • -PHP_FLOAT_MAX: Số thực âm (negative Float) nhỏ nhất có thể lưu trữ
  • PHP_FLOAT_DIG: Số chữ số thập phân có thể được làm tròn thành một số Float
  • PHP_FLOAT_EPSILON: Số x dương nhỏ nhất x + 1.0! = 1.0
<?php
echo "PHP_FLOAT_MAX: ;".PHP_FLOAT_MAX."<br>";
echo "PHP_FLOAT_MIN: ".PHP_FLOAT_MIN."<br>";
echo "-PHP_FLOAT_MAX: ;".-PHP_FLOAT_MAX."<br>";
echo "PHP_FLOAT_DIG: ".PHP_FLOAT_DIG."<br>";
echo "PHP_FLOAT_EPSILON: ".PHP_FLOAT_EPSILON."<br>";
$x = 5985;
echo 'Is $x Float? ';
var_dump(is_float($x));
$y = 59.85;
echo '<br>Is $y Float? ';
var_dump(is_float($y));
?>
Kết quả
PHP_FLOAT_MAX: ;1.7976931348623E+308
PHP_FLOAT_MIN: 2.2250738585072E-308
-PHP_FLOAT_MAX: ;-1.7976931348623E+308
PHP_FLOAT_DIG: 15
PHP_FLOAT_EPSILON: 2.2204460492503E-16
Is $x Float? bool(false)
Is $y Float? bool(true)

Số vô cực trong PHP (PHP Infinity)

Một giá trị lớn hơn PHP_FLOAT_MAX được coi là số vô cực (infinity). PHP có các function để kiểm tra xem một giá trị số là vô hạn hay hữu hạn:

  • is_finite()
  • is_infinite()
<?php
$x = 1.9e411;
echo 'Is $x infinite? ';
var_dump(is_infinite($x));
echo "<br>";
var_dump($x);
?>
Kết quả
Is $x infinite? bool(true)
float(INF)

3. Not a Number trong PHP (PHP NaN)

NaN là viết tắt của Not a Number. PHP cung cấp sẵn hàm is_nan() để kiểm tra nếu một giá trị không phải là một số.

<?php
$x = 200;
$y = acos(1.01);
var_dump($x);
echo "<br>";
var_dump($y);
?>
Kết quả
int(200)
float(NAN)

4. Chuỗi số trong PHP (PHP Numerical Strings)

Một String trong PHP có thể chỉ bao gồm các chữ số. Hàm is_numeric() được sử dụng để xác định xem một String có chỉ gồm toàn các chữ số không. Hàm is_numeric() trả về true nếu biến là một số hoặc một chuỗi số, ngược lại trả về false.

<?php
$x = 5985;
echo "Is 5985 number? ";
var_dump(is_numeric($x));
echo "<br>";
$x = "5985";
echo "Is '5985' number? ";
var_dump(is_numeric($x));
echo "<br>";
$x = "59.85" + 100;
echo "Is '5985' + 100 number? ";
var_dump(is_numeric($x));
echo "<br>";
$x = "gochocit.com";
echo "Is 'gochocit.com' number? ";
var_dump(is_numeric($x));
echo "<br>";
$x = 0xf4c3b00c;
echo "Is 0xf4c3b00c number? ";
var_dump(is_numeric($x));
echo "<br>";
$x = "0xf4c3b00c";
echo "Is '0xf4c3b00c' number? ";
var_dump(is_numeric($x));
?>
Kết quả
Is 5985 number? bool(true)
Is '5985' number? bool(true)
Is '5985' + 100 number? bool(true)
Is 'gochocit.com' number? bool(false)
Is 0xf4c3b00c number? bool(true)
Is '0xf4c3b00c' number? bool(false)

5. Ép kiểu String và Float sang Integer trong PHP

Chúng ta có thể ép kiểu StringFloat sang Integer trong PHP.

<?php
// Cast float to int
$x = 23465.768;
$int_cast = (int)$x;
echo $int_cast."<br>";
// Cast string to int
$x = "23465.768";
$int_cast = (int)$x;
echo $int_cast."<br>";

$y = "2345a.6789";
$int_cast = (int)$y;
echo $int_cast;
?>
Kết quả
23465
23465
2345

Hàm (int), (integer) hoặc intval() thường được sử dụng để ép kiểu một value sang Integer.

  • Lập trình điều khiển Servo motor với board mạch Arduino
  • Xây dựng danh sách liên kết kép (Doubly Linked List) với con trỏ (pointer)
  • Sửa (update) dữ liệu và câu lệnh drop trong MySQL với Python
  • Mối liên hệ giữa cấu trúc dữ liệu và giải thuật
  • Cấu trúc rẽ nhánh switch case và minh họa với C++