Hướng dẫn dùng declare to trong PHP

Phiên bản: PHP 4, PHP 5, PHP 7.

Cấu trúc declare được sử dụng để thiết lập các chỉ thị thực hiện cho khối mã lệnh. Cú pháp của declare tương tự như cú pháp của các cấu trúc điều khiển khác:

declare (directive)
    statement

Phần directive cho phép thiết lập hành vi của khối declare. Hiện tại thì chỉ có ba chỉ thị sau được chấp nhận là chỉ thị ticks, chỉ thị encoding và chỉ thị strict_types.

Phiên bảnMô tả
5.3.0 Thêm chỉ thị encoding
7.0.0 Thêm chỉ thị strict_types directive

Các chỉ thị được xử lý giống như file được biên dịch, chỉ có các literal là được chấp nhận như là các giá trị của chỉ thị, còn biến và hằng thì không thể được sử dụng. Dưới đây là ví dụ minh họa:


// This is valid:
declare(ticks=1);

// This is invalid:
const TICK_VALUE 1;
declare(
ticks=TICK_VALUE);
?>

Phần statement của khối declare sẽ được thực thi - nó thực thi thế nào và xảy ra hiệu ứng gì trong quá trình thực thi có thể phụ thuộc vào tập chỉ thị trong khối directive.

Cấu trúc declare cũng có thể được sử dụng ở phạm vi global, điều này sẽ ảnh hưởng đến mã lệnh sau nó (tuy nhiên nếu đưa vào tập tin có chứa declare thì nó sẽ không ảnh hưởng đến tập tin cha).


// these are the same:

// you can use this:


declare(ticks=1) {
    
// entire script here
}

// or you can use this:
declare(ticks=1);
// entire script here
?>

Tick

Mỗi tick là một sự kiện xảy ra cho mỗi N câu lệnh có khả năng đánh dấu là mức thấp bởi bộ truyền trong khối declare. Giá trị của N được xác định bằng cách sử dụng ticks=N trong phần directive của khối declare.

Không phải tất cả các câu lệnh đều có khả năng đánh dấu. Thông thường thì những biểu thức điều kiện và biểu thức tham số không có khả năng đánh dấu.

Sự kiện xảy ra trên mỗi tick được xác định bằng cách sử dụng hàm register_tick_function(). Cần lưu ý rằng có thể có nhiều hơn một sự kiện xảy ra cho mối tick.

Ví dụ 1: Sử dụng tick.

declare(ticks=1);

// A function called on each tick event
function tick_handler()
{
    echo 
"tick_handler() called\n";
}

register_tick_function('tick_handler');

$a 1;

if (

$a 0) {
    
$a += 2;
    print(
$a);
}

?>

Ví dụ 2: Sử dụng nhiều tick.

function tick_handler()
{
  echo 
"tick_handler() called\n";
}

$a 1;
tick_handler();

if (

$a 0) {
    
$a += 2;
    
tick_handler();
    print(
$a);
    
tick_handler();
}

tick_handler();

?>

Encoding ¶

Mỗi encoding của kịch bản có thể được xác định bằng cách sử dụng chỉ thị encoding.

Ví dụ 3: Khai báo một encoding cho kịch bản.


declare(encoding='ISO-8859-1');
// code here
?>

Cảnh báo

Khi biên dịch với namespace thì chỉ có cú pháp hợp lệ của declare là declare(encoding='...'); , trong đó ... là giá trị encoding. declare(encoding='...') {} sẽ bị lỗi parse khi biên dịch trong namespace.

Giá trị khai báo encoding bị bỏ qua đối với phiên bản PHP 5.3 trừ khi mã lệnh php được biên dich với --enable-zend-multibyte.

Lưu ý rằng PHP không tường minh rằng liệu --enable-zend-multibyte có được sử dụng để biên dịch PHP hay không bằng phpinfo().