php declare 的语法详解

declare


(PHP 4, PHP 5, PHP 7)
declare构造用于为代码块设置执行指令。 declare的语法类似于其他流控制结构的语法:

declare (directive)
   statement

directive 部分允许设定 declare 代码段的行为。目前只认识三个指令:ticks(更多信息见 ticks 指令), encoding(更多信息见 encoding 指令)以及 strict_types(更多信息见 strict 指令)


一、ticks指令

语法:

<?php
declare (ticks=N);
# ...

// 或下面写法作用于代码块

declare (ticks=N){
    # ...
}

Zend 引擎每执行 1 条低级语句就去执行一次 register_tick_function () 注册的函数。可以粗略的理解为每执行一句 php 代码(例如:$num=1;)就去执行下已经注册的 tick 函数。一个用途就是控制某段代码执行时间,例如下面的代码虽然最后有个死循环,但是执行时间不会超过 5 秒。

该指令需要配合register_tick_function()使用

// 下面是一个示例
declare(ticks=1);

class Counter {
    private $counter = 0;

    public function increase($a)
    {
        $this->counter+=$a;
    }
    
    public function print()
    {
        return $this->counter;    
    }
}

$obj = new Counter;
register_tick_function([&$obj, 'increase'],1);

for ($i = 0; $i < 100; $i++)
{
    $a = 3;
}

// unregister_tick_function([&$obj, 'increase']);
// Not sure how to de-register, you can use static methods and members in the Counter instead.

var_dump("Number of basic low level operations: " . $obj->print());

其他示例点CSDN > PHP declare (ticks=N); 的作用

二、encoding指令

语法:

declare(encoding='ISO-8859-1');
# ...

可以使用encoding指令为每个脚本指定脚本的编码。

Caution

当和命名空间结合起来时 declare 的唯一合法语法是 declare(encoding=’…’);,其中 … 是编码的值。而 declare(encoding=’…’) {} 将在与命名空间结合时产生解析错误。

在 PHP 5.3 中除非在编译时指定了 --enable-zend-multibyte,否则 declare 中的 encoding 值会被忽略。
注意除非用 phpinfo(),否则 PHP 不会显示出是否在编译时指定了 --enable-zend-multibyte。
参见 zend.script_encoding。

三、strict_types指令

语法:

declare(strict_types=1);
# ...

默认情况下,所有的 PHP 文件都处于弱类型校验模式。新的 declare 指令,通过指定 strict_types 的值(1 或者 0),1 表示严格类型校验模式,作用于函数调用和返回语句;0 表示弱类型校验模式。
declare (strict_types=1) 必须是文件的第一个语句。如果这个语句出现在文件的其他地方,将会产生一个编译错误,块模式是被明确禁止的。
类似于 encoding 指令,但不同于 ticks 指令,strict_types 指令只影响指定使用的文件,不会影响被它包含(通过 include 等方式)进来的其他文件。该指令在运行时编译,不能修改。它的运作方式,是在 opcode 中设置一个标志位,让函数调用和返回类型检查符合类型约束。

示例一:
declare(strict_types=1);
 
function func(int $num): int {
    return $num;
}
var_dump(func(2)); // returned value:int(2)
示例二:
//declare(strict_types=1);
 
function func(int $num):int{
    return $num;
}
var_dump(func(2.5)); // returned value:int(2)
示例三:
declare(strict_types=1);
 
function func($num):int{
    return $num;
}
var_dump(func(2.5)); // returned value:Return value of func() must be of the type integer, float returned
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TypeScript 中的 declare 关键字用于声明某些变量、函数或类的类型,但并不实际定义它们的实现。这是因为 TypeScript 可以用来编写 JavaScript,而 JavaScript 中的许多变量、函数或类并没有明确定义它们的类型。因此,使用 declare 关键字可以帮助 TypeScript 理解这些 JavaScript 代码的类型。 declare 关键字的使用有以下几种情况: 1. 声明全局变量或函数 在 TypeScript 中,全局变量或函数应该在任何文件中都可以访问。但如果这些变量或函数没有明确定义类型,则 TypeScript 编译器可能无法正确解析它们的类型。因此,使用 declare 关键字可以告诉编译器这些变量或函数的类型。 例如,以下代码声明了一个全局变量 message,并指定它的类型为字符串: ``` declare var message: string; ``` 2. 声明模块 在 TypeScript 中,可以使用 declare 关键字来声明模块的类型。例如,以下代码声明了一个名为 MyModule 的模块,并指定它包含一个名为 myFunction 的函数: ``` declare module MyModule { function myFunction(): void; } ``` 3. 声明类的类型 在 TypeScript 中,可以使用 declare 关键字来声明一个类的类型,而不实际定义它的实现。这通常用于与第三方库集成时,以便编译器知道这些类的类型。 例如,以下代码声明了一个名为 MyLibrary 的类,并指定它包含一个名为 myFunction 的方法: ``` declare class MyLibrary { myFunction(): void; } ``` 需要注意的是,使用 declare 关键字并不会实际生成任何代码,它只是告诉编译器这些变量、函数或类的类型。因此,如果使用 declare 关键字声明一个变量、函数或类的类型,就必须确保在代码中正确地实现它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值