## declare
(PHP4,PHP5,PHP7)
declare结构用来设定一段代码的执行指令。declare的语法和其他流程控制结构相似:
~~~
declare (directive)
statement
~~~
directive部分允许设定declare代码段的行为。目前只认识两个指令*ticks*(更多信息见下面 [ticks](http://php.net/manual/zh/control-structures.declare.php#control-structures.declare.ticks) 指令)以及 *encoding*(更多信息见下面 [encoding](http://php.net/manual/zh/control-structures.declare.php#control-structures.declare.encoding) 指令)。
> **Note**: encoding 是 PHP 5.3.0 新增指令。
*declare* 代码段中的 *statement* 部分将被执行——怎样执行以及执行中有什么副作用出现取决于 *directive* 中设定的指令。
*declare* 结构也可用于全局范围,影响到其后的所有代码(但如果有 *declare* 结构的文件被其它文件包含,则对包含它的父文件不起作用)。
```
<?php
// 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
?>
```
### Ticks
Tick(时钟周期)是一个在 *declare* 代码段中解释器每执行 N 条可计时的低级语句就会发生的事件。N 的值是在 *declare* 中的 *directive* 部分用 `ticks=N` 来指定的。
不是所有语句都可计时。通常条件表达式和参数表达式都不可计时。
在每个 tick 中出现的事件是由 [register\_tick\_function()](http://php.net/manual/zh/function.register-tick-function.php) 来指定的。更多细节见下面的例子。注意每个 tick 中可以出现多个事件。
**Example #1 Tick 的用法示例**
```
<?php
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);
}
?>
```
**Example #2 Ticks 的用法示例**
```
<?php
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();
?>
```
参见 [register\_tick\_function()](http://php.net/manual/zh/function.register-tick-function.php) 和 [unregister\_tick\_function()](http://php.net/manual/zh/function.unregister-tick-function.php)。
### Encoding
可以用 encoding 指令来对每段脚本指定其编码方式。
**Example #3 对脚本指定编码方式**
```
<?php
declare(encoding='ISO-8859-1');
// code here
?>
```
**Caution**
当和命名空间结合起来时 declare 的唯一合法语法是 *declare(encoding='...');*,其中 *...* 是编码的值。而 *declare(encoding='...') {}* 将在与命名空间结合时产生解析错误。
在 PHP 5.3 中除非在编译时指定了 *\--enable-zend-multibyte*,否则 declare 中的 encoding 值会被忽略。
注意除非用 [phpinfo()](http://php.net/manual/zh/function.phpinfo.php),否则 PHP 不会显示出是否在编译时指定了 *\--enable-zend-multibyte*。
参见 [zend.script\_encoding](http://php.net/manual/zh/ini.core.php#ini.zend.script-encoding)。
- 序言
- 简介
- PHP是什么?
- PHP能做什么?
- 基本语法
- 类型
- boolean(布尔型)
- integer(整型)
- float(浮点型)
- string(字符串)
- array(数组)
- object(对象)
- callable(可调用)
- resource(资源)
- NULL(无类型)
- 伪类型
- 类型转换的判别
- 变量
- 基础
- 预定义变量
- 变量范围
- 可变变量
- 来自PHP之外的变量
- 常量
- 语法
- 魔术常量
- 表达式
- 运算符
- 运算符优先级
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 错误控制运算符
- 执行运算符
- 递增/递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代语法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函数
- 用户自定义函数
- 函数的参数
- 返回值
- 可变函数
- 内部 (内置)函数
- 匿名函数
- 类与对象
- 简介
- 基本概念
- 属性
- 类的自动加载
- 构造函数
- 访问控制(可见性)