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最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的
栗子一: IF 1=1BEGINDECLARE @test VARCHARSET @test='1' PRINT 'in if:'+@testEND 运行看结果输出in if:1这是可以预
DECLARE_MESSAGE_MAP( ) 说明: 你的程序中的每一个CCmdTarget的派生类都可以提供一个消息映射以处理消息。在你的类声明的末尾
DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC宏
IMPLEMENT_DYNAMIC是实现“运行时类型识别”宏,与之相对应的是DECLARE_DYNAMIC(声明“运行时类型识别”宏)。也就是说你在.CP
做Android布局是件很享受的事,这得益于他良好的xml方式。使用xml可以快速有效的为软件定义界面。可是有时候我们总感觉官方定义的