PHP静态变量用法

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

具体例子可参考官网。下面给出生产环境的用法:
一、区分项目
在基础目录新增一个Util.php文件

<?php
/**
 * 功能介绍 工具方法
 *
 * @author:   chuanbo7 <salmonl@niliu.me>
 * @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文件

<?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();

发表评论

电子邮件地址不会被公开。 必填项已用*标注