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 数量后执行。
在下面的示例中,myfunction() 在 declare 结构中的循环完成 5 次迭代后每次都执行。
示例
<?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 解析器将自动将浮点数转换为整型。如果不需要这种强制转换,我们可以在 declare 结构中指定 **strict_types=1**。
示例
<?php //strict_types is 0 by default function myfunction(int $x, int $y){ return $x+$y; } echo "total=" . myfunction(1.99, 2.99); ?>
浮点参数被强制转换为整型以执行加法,得到以下结果:
输出
total=3
但是,使用带有 strict_types=1 的 declare 结构可以防止强制转换。
示例
<?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"; ?>
广告