PHP 的 <declare> 语句
简介
PHP 中 declare 语句的语法与其他流程控制结构(例如 while、for、foreach 等)类似。
语法
declare (directive)
{
statement1;
statement2;
. .
}
块的行为由指令类型定义。declare 语句中可以提供三种类型的指令 - ticks、encoding 和 strict_types 指令。
ticks 指令
"tick"是指特殊事件的名称,该事件发生时,脚本中的一定数量的语句将被执行。这些语句是 PHP 内部的,大致相当于脚本中的语句(不包括条件表达式和参数表达式)。任何函数都可以通过 register_tick_function 与 tick 事件关联。注册的函数将在 declare 指令中指定的 tick 次数后执行。
在以下示例中,declare 结构中的循环每完成 5 次迭代就会执行 myfunction()。
示例
<?php
function myfunction(){
echo "Hello World
";
}
register_tick_function("myfunction");
declare (ticks=5){
for ($i=1; $i<=10; $i++){
echo $i."
";
}
}
?>
输出
当从命令行运行上述脚本时,将产生以下结果 −
1 2 3 4 5 Hello World 6 7 8 9 10 Hello World
PHP 还具有 unregister_tick_function() 用于移除函数与 tick 事件的关联
strict_types 指令
PHP 是一种弱类型语言,它会尝试将数据类型转换为适合执行特定操作的类型。如果一个函数有两个整型参数并返回它们的和,并且在调用该函数时,其中一个参数是浮点型,则 PHP 解析器会自动将浮点型转换为整型。如果不需要这种强制转换,我们可以在 declared 结构中指定 strict_types=1
示例
<?php
//strict_types 默认为 0
function myfunction(int $x, int $y){
return $x+$y;
}
echo "total=" . myfunction(1.99, 2.99);
?>
浮点型参数被强制转换为整数,执行加法运算后结果为 −
输出
total=3
但是,使用 delcare 构造函数并将 strict_types=1 设置为 1 可以防止强制转换
示例
<?php
declare (strict_types=1);
function myfunction(int $x, int $y){
return $x+$y;
}
echo "total=" . myfunction(1.99, 2.99);
?>
输出
这将产生以下错误−
Fatal error: Uncaught TypeError: Argument 1 passed to myfunction() must be of the type integer, float given, called in line 7 and defined in C:\xampp\php\testscript.php:3
Encoding 指令
declare 结构包含 Encoding 指令,可用于指定脚本的编码方案
示例
<?php declare(encoding='ISO-8859-1'); echo "This Script uses ISO-8859-1 encoding scheme"; ?>

