必威体育Betway必威体育官网
当前位置:首页 > IT技术

declare

时间:2019-09-29 20:45:48来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

declare

declare

ticks=1

example #1

<?php
    // 例子1
    function doTicks ()
    {
        echo 'Ticks';
    }
    register_tick_function('doTicks');
    declare(ticks = 1) {
        for ($x = 1; $x < 10; ++ $x) {
            echo $x .'<br />';
        }
    }
    // opout 
    // 1
    // Ticks2
    // Ticks3
    // Ticks4
    // Ticks5
    // Ticks6
    // Ticks7
    // Ticks8
    // Ticks9
    // TicksTicks
?>

Example #2

先定义declare 会先执行declare 当执行了语句的时候 还会执行一次declare (declare(ticks=1) 之前的代码不会生效)

 <?php   
    declare(ticks=1);
    // A function called on each tick event
    function tick_handler()
    {
        echo "tick_handler() called<br/>";
    }
    register_tick_function('tick_handler');
    $a = 1;
    if ($a > 0) {
        $a += 2;
        print($a);
    }
    // opout 
    // tick_handler() called
    // tick_handler() called
    // tick_handler() called
    // 3tick_handler() called
    // tick_handler() called
?>

EXample #3 模仿declare

<?php
    function bar_handler()
    {
      echo "bar_handler() called<br/>";
    }

    $a = 1;
    bar_handler();

    if ($a > 0) {
        $a += 2;
        bar_handler();
        print($a);
        bar_handler();
    }
    bar_handler();
    // opout 
    // bar_handler() called
    // bar_handler() called
    // 3bar_handler() called
    // bar_handler() called
?>

Example #4 后调用 declare

<?php
    function handler(){
        print "hello <br />";
    }
    register_tick_function("handler");
    declare(ticks=1){
        $b = 2;
    }
    // opout 
    // hello 
?>
总结
01、通过上面的例子可以知道。几乎就是执行一条语句、php就会自动调用 register_tick_function 的方法
02、如果以declare(ticks=1)定义的、register_tick_function 则会先运行一次方法、结束的时候还会再调用一次 该方法
03、以 declare(ticks=1){ $b = 2;}定义的、结束的时候会调用一次(与02不同的地方就是定义的时候不会调用)
04、declare 前面的语句都不会调用 register_tick_function 的方法
declare(ricks = n) 的作用
01、控制某段代码执行时间
02、检查该进程是否有未处理过的信号


01、控制某段代码的时间
<?php
    declare(ticks=1);
    // 开始时间
    $time_start = time();
    // 检查是否已经超时
    function check_timeout(){
        // 开始时间
        global $time_start;
        // 5秒超时
        $timeout = 5;
        if(time()-$time_start > $timeout){
            exit("超时{$timeout}秒\n");
        }
    }
    // Zend引擎每执行一次低级语句就执行一下check_timeout
    register_tick_function('check_timeout');
    // 模拟一段耗时的业务逻辑
    while(1){
       $num = 1;
    }
    // 模拟一段耗时的业务逻辑,虽然是死循环,但是执行时间不会超过$timeout=5秒
    while(1){
       $num = 1;
    }
?>

02、检查该进程是否有未处理过的信号
<?php
    declare(ticks=1);
    pcntl_signal(SIGINT, function(){
       exit("Get signal SIGINT and exit\n");
    });

    echo "Ctl + c or run cmd : kill -SIGINT " . posix_getpid(). "\n" ;

    while(1){
      $num = 1;
    }
?>

php7的新特性 declare(strict_types=1);

强类型strict_types是从PHP7开始才引入的东西,默认不开启

strict_types=1无非就是约束了参数和返回值的类型

<?php
    declare(strict_types=1);
    function foo(int $num): int {
        return $num/2;
    }
    foo(1); //返回值类型错误
    foo(1.5); //参数类型错误
    foo(2); //正常

?>

相关阅读

android 自定义控件 使用declare-styleable进行配置属

http://blog.csdn.net/vipzjyno1/article/details/23696537最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的

Sql学习笔记-declare用法

栗子一: IF 1=1BEGINDECLARE @test VARCHARSET @test='1'   PRINT 'in if:'+@testEND 运行看结果输出in if:1这是可以预

DECLARE_MESSAGE_MAP用法

DECLARE_MESSAGE_MAP( ) 说明: 你的程序中的每一个CCmdTarget的派生类都可以提供一个消息映射以处理消息。在你的类声明的末尾

DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC宏

   IMPLEMENT_DYNAMIC是实现“运行时类型识别”宏,与之相对应的是DECLARE_DYNAMIC(声明“运行时类型识别”宏)。也就是说你在.CP

declare-styleable:自定义控件的属性

做Android布局是件很享受的事,这得益于他良好的xml方式。使用xml可以快速有效的为软件定义界面。可是有时候我们总感觉官方定义的

分享到:

栏目导航

推荐阅读

热门阅读