Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Câu lệnh declare trong PHP

Giới thiệu

Cú pháp câu lệnh declare trong PHP tương tự các cấu trúc điều khiển luồng khác như while, for, foreach, v.v.

Cú pháp

declare (directive) {
    statement1;
    statement2;
    ...
}

Hành vi của block được định nghĩa bởi loại directive. Ba loại directive có thể cung cấp trong declare: ticks, encoding và strict_types.

Directive ticks

Một tick là tên gọi cho sự kiện đặc biệt xảy ra sau khi một số lượng câu lệnh nhất định trong script được thực thi. Các câu lệnh này là internal của PHP và xấp xỉ bằng các câu lệnh trong script của bạn (trừ biểu thức điều kiện và đối số). Bất kỳ hàm nào có thể liên kết với sự kiện tick bằng register_tick_function. Hàm đã đăng ký sẽ được thực thi sau số tick chỉ định trong declare directive.

Trong ví dụ sau, myfunction() được thực thi mỗi khi vòng lặp trong declare construct hoàn thành 5 vòng lặp.

<?php
function myfunction() {
    echo "Hello World\n";
}
register_tick_function("myfunction");
declare (ticks=5) {
    for ($i = 1; $i <= 10; $i++) {
        echo $i . "\n";
    }
}
?>

Kết quả

1
2
3
4
5
Hello World
6
7
8
9
10
Hello World

PHP cũng có unregister_tick_function() để gỡ bỏ liên kết hàm với sự kiện tick.

Directive strict_types

PHP là ngôn ngữ kiểu yếu (weakly typed), cố gắng chuyển đổi kiểu dữ liệu phù hợp để thực hiện phép toán. Nếu có hàm với hai tham số integer và trả về tổng, và một đối số cho là float khi gọi, PHP parser sẽ tự động chuyển float thành integer. Nếu ép buộc này không mong muốn, ta có thể chỉ định strict_types=1 trong declare construct.

Ví dụ: Mặc định (strict_types=0)

<?php
// strict_types = 0 mặc định
function myfunction(int $x, int $y) {
    return $x + $y;
}
echo "total=" . myfunction(1.99, 2.99);
?>

Tham số float bị ép kiểu integer để thực hiện cộng cho kết quả:

total=3

Ví dụ: strict_types=1 ngăn chặn ép kiểu

<?php
declare (strict_types=1);
function myfunction(int $x, int $y) {
    return $x + $y;
}
echo "total=" . myfunction(1.99, 2.99);
?>

Lỗi

Fatal error: Uncaught TypeError: Argument 1 passed to myfunction() must be of the type integer, float given

Directive encoding

Cấu trúc declare có directive Encoding cho phép chỉ định encoding scheme của script:

<?php
declare(encoding='ISO-8859-1');
echo "This Script uses ISO-8859-1 encoding scheme";
?>