## 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
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)