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";
?>

更新于:2020年9月18日

549 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告