php 静态变量用法,PHP静态变量用法

本文详细阐述了静态变量在PHP中的特性,如初始化时机、存储位置及生命周期,并通过实际项目示例展示了如何在区分项目和记录执行时间中运用静态变量。同时探讨了静态变量与全局变量的区别和常见用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态变量,static variable。下面这句话非常重要: 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

第一部分 静态变量

一、静态变量和普通变量的区别

0、静态变量只被初始化一次,下一次依据上一次结果值。

1、静态变量存储在静态存储区

一定会存在的而且会永恒存在、不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等。

静态 、常量、全局变量就是存放在静态存储区,他们在程序编译完成后就已经分配好了,生命周期持续至程序结束。

进一步解释,查看《Linux内存管理笔记》《动态存储区、静态存储区、堆和栈的区别》

二、静态变量赋值的时机

三、静态变量释放的时机

程序退出的时候。

四、静态方法

第二部分 静态变量的用法

具体例子可参考官网。下面给出生产环境的用法:

一、区分项目

在基础目录新增一个Util.php文件

/**

* 功能介绍 工具方法

*

* @author: chuanbo7

* @date: 2019-04-19

*/

// set app标示

function appFlagSet($flag, $get = false)

{

static $app_flag = ' ';

if ($get === true) {

return $app_flag;

}

$app_flag = $flag;

}

// get app标示

function appFlagGet()

{

return appFlagSet('', true);

}

// the end of the script

用法:

0、在项目入口文件index.php中引入这个文件

1、在项目路由中区分项目,分别调用appFlagSet()写入不同的标示。

$uri = $request->getRequestUri();

if ($uri == 'episode') {

appFlagSet(EPISODE);

} elseif ($uri == 'variety') {

appFlagSet(VRRIETY);

}

2、在项目中任何地方调用appFlagGet()获取项目标示。

3、思考:如果是单纯的标示,使用$GLOBALS[‘app_flag’] = EPISODE;也可以达到目的。

二、项目记录Debug和执行时间

0、在基础目录新增一个Util.php文件

//打时间标记, $flag 为标记名,默认为_default

function flagtime($flag = '_default') {

static $static_time = array();

if (!isset($static_time[$flag])) {

$static_time[$flag] = microtime(true);

}

$diff = microtime(true) - $static_time[$flag];

$static_time[$flag] = microtime(true);

return substr(($diff * 1000) , 0, 5) . 'ms';

}

//存debug信息

function debugSet($string, $get = false) {

if (!DEBUG)

return '';

static $debug_data = array();

if ($get === true) {

return $debug_data;

}

if (DEBUG) {

$d = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);

$file = isset($d[0]['file']) ? basename($d[0]['file']) : 'unknown';

$line = isset($d[0]['line']) ? $d[0]['line'] : 'unknown';

$debug_data[] = $file . '(line ' . $line . '): ' . $string;

}

}

//取debug信息

function debugGet() {

return debugSet('', true);

}

1、在入口和出口分别调用flagtime(),获取项目执行时间。

2、获取请求url执行时间,在请求前后记录

// 请求前

flagtime(1);

// 请求结束

debugSet('{Curl(' . flagtime(1) . ')}' . $url);

// 输出

debugGet();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值