资讯专栏INFORMATION COLUMN

通过自己PHP编码实现var_dump()方法

alighters / 2139人阅读

摘要:个人学习笔记核心源码如下打印打印单个变量打印数组前置空格打印对象前置空格测试代码效果如下

个人学习笔记
核心源码如下:
/**
 * 打印
 * @param array ...$params
 * @author klinson 
 */
function info(...$params)
{
    foreach ($params as $param) {
        info_item($param);
    }
}

/**
 * 打印单个变量
 * @param $param
 * @param int $i
 * @author klinson 
 */
function info_item($param, $i = 0)
{
    switch (gettype($param)) {
        case "array":
            info_array($param, $i);
            break;
        case "object":
            info_object($param, $i);
            break;
        case "boolean":
            echo "bool(".($param ? "true" : "false").")";
                break;
        case "integer":
            echo "int({$param})";
            break;
        case "string":
            echo "string({$param})";
            break;
        case "double":
            echo  "float({$param})";
            break;
        case "null":
            echo "null";
            break;
        case "resource":
            echo "resource";
            break;
        default:
            echo "UNKNOWN TYPE";
            break;
    }
    echo PHP_EOL;
}

/**
 * 打印数组
 * @param $param
 * @param int $i
 * @author klinson 
 */
function info_array($param, $i = 0)
{
    // 前置空格
    $space = "";
    $num = $i;
    while ($num) {
        $space .= "  ";
        $num--;
    }

    echo "array[".count($param)."]: {".PHP_EOL;
    foreach ($param as $key => $item) {
        echo $space."  [{$key}] => ";
        info_item($item, $i+1);
    }
    echo $space."}";
}

/**
 * 打印对象
 * @param $param
 * @param int $i
 * @author klinson 
 */
function info_object($param, $i = 0)
{
    // 前置空格
    $space = "";
    $num = $i;
    while ($num) {
        $space .= "  ";
        $num--;
    }

    echo "object(".get_class($param)."[".count($param)."]): {".PHP_EOL;
    foreach ($param as $key => $item) {
        echo $space."  [{$key}] => ";
        info_item($item, $i+1);
    }
    echo $space."}";
}
测试代码:
$a = 1.11;
$b = "a";
$c = [$a, $b];
$d = new stdClass();
$d->aaa = "aaa";
$d->bb = $c;
info($a, $b, $c, $d);
效果如下:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29843.html

相关文章

  • PHP细节:foreach、(汉子)字符串反转、isset,empty用法区别以及0、‘’、null

    摘要:规定要反转的字符串。参考文档实现字符串翻转包含中文汉字参考处理汉字官方文档函数最下面给出了支持的方案三用法区别以及之间关系用法如果是非空或非零的值,则返回。若想检测常量是否已设置,可使用函数。 一、foreach 第一题: //1.for循环执行几次 //for($i=0;$i=1;$i++){ // echo $i; //} $i==1条件很成立,死循环 for($i=0;$...

    孙淑建 评论0 收藏0
  • PHP7新特性的介绍

    摘要:截止到目前为止,官方已经发布了的版本,距离发布第一个正式版本不会很远了现在来说的重大特性肯定已经是定型了,不会再有什么变动了。 截止到目前为止,PHP官方已经发布了php7的RC7版本,距离发布第一个正式版本不会很远了!现在来说php7的重大特性肯定已经是定型了,不会再有什么变动了。后续一些版本的迭代主要也就是修修bug,优化之类的。下面就来说话我们一直期待的php7会有那些主要的变化...

    klivitamJ 评论0 收藏0
  • php获取编码方式及改变编码方法

    摘要:场景说明此变量存储的为通过等方式获取到的字符串,拿到后浏览器为乱码实际为,转化编码格式后为正常数据,拿到中也为,但是此码就是为得到目前编码转化编码字不如图是最常用的表示方法。浏览器编码表上的,通常都是指表示法。 抓xx页面的时候,虽然返回数据为json格式的,但是是非utf-8的,这样json_decode的时候返回的是null,因为json只是支持UTF-8/ASCII,应该也有其他...

    qylost 评论0 收藏0
  • php如何openssl_encrypt加密解密

    摘要:密钥长度是位,超过位数密钥被忽略。跨语言做加密解密经常会出现问题,往往是填充方式不对编码不一致或者加密解密模式没有对应上造成。是为了兼容用加密的结果。 最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了百度和谷歌两个老师后,结合了多篇文档内容后,终于实现了。 一、DES介绍 DES 是对称性加密里面常见一种,全称为 Data Enc...

    JouyPub 评论0 收藏0
  • PHP面试之一:PHP基础知识点

    摘要:之前,第三方编译是管理器,是解释器之后,官方自带,与模式。又是解释器,又是管理器以模块模式运行常见配置数组排序 PHP引用变量 什么是引用变量?如何定义引用变量? 引用意味着用不同的名字访问同一个内容定义引用变量:使用& 引用变量的工作原理 普通变量的工作原理 $a = range(0,10000); var_dump(memory_get_usage()); //int(7420...

    waterc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<