var_export 与 var_dump的不同

本文详细解析了PHP中var_export与var_dump两个函数的差异,重点在于var_export能返回合法的PHP代码字符串,适用于变量的字符串表示,而var_dump仅用于输出变量信息。文章通过实例说明了两者在处理不同类型变量时的行为,特别是资源类型变量。

var_export & var_dump 不同

  • var_dump – 输出

  • var_export – 输出或返回一个变量的字符串表示

此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。

比较

比较:var_dump 直接输出,如果 var_export,不设置第2个参数为true的话,也是直接输出,输出和var_dump差不多;

但是如果 var_export 第2个参数设置为true的话,就不会输出了,而是返回字符串的变量的表示。如果要输出的话,用echo
如:

$arr = [1,2,3];
$var = var_export($arr, true);
echo $var;

var_dump 只输出,var_export 不仅可以输出,还可以把变量字符串的表示

问题发现

在跟踪yratings_get_targets的时候,

error_log(var_export(yblog_mspconfiginit("ratings"),true));

老是打印出yblog_mspconfiginit(“ratings”)的返回是NULL

导致我以为是无法建立和DB的连接,走错路了一天。

最后才发现,这是var_export和var_dump的区别之一

这就是:

问题原因
var_export必须返回合法的php代码, 也就是说,var_export返回的代码,可以直接当作php代码赋值个一个变量。 而这个变量就会取得和被var_export一样的类型的值

但是, 当变量类型为resource的时候, 是无法简单copy复制的,所以, 当var_export的变量是resource类型时, var_export会返回NULL
实例

$res = yblog_mspconfiginit("ratings");
var_dump($res);
var_export($res);

结果:


resource(1) of type (yahoo_yblog)
NULL

再比如:

$res = fopen('status.html', 'r');
var_dump($res);
var_export($res);

结果:


resource(2) of type (stream)
NULL

var_export,函数的第二个参数设置为 TRUE,从而返回变量的表示, 不设置第2个参数,效果则和var_dump()一样,纯是输出.

应用:把数组写入文件

//将整个文件读入一个字符串
$xmldata = file_get_contents("php://input");
$xmldata = (array)simplexml_load_string($xmldata);

//var_export,函数的第二个参数设置为 TRUE,从而返回变量的表示
$arr = var_export($xmldata,TRUE);

//file_get_contents: 将一个字符串写入文件。该函数将返回写入到文件内数据的字节数,失败时返回FALSE
$ret = file_put_contents('output.log', $arr);
if (false == $ret) {
	exit("写入失败");
}

echo $data;

output.log 内容如下

array (
  'sha1' => '111',
  'user_id' => '222',
  'album_id' => '333',
  'album_name' => '444',
  'tags' => '555',
  'title' => '666',
  'content' => '777',
  'type' => '8888',
  'copyright' => '9999',
)

file_put_content 不能直接将数组写入文件,而是先把数组变成字符串,再写入。var_export,第2个参数设置为true,就是

<think> 根据用户的问题,用户想了解PHPvar_dump和scandir函数的功能。我们需要从引用中提取相关信息并组织成清晰的回答。 引用[1]中提到: - var_dump():输出变量的信息。 - 还提到了print_r()和error_log(),但用户只关心var_dump和scandir。 引用[2]中详细介绍了scandir()的使用: - scandir()用于扫描目录,返回目录中的文件和子目录的数组。 - 示例:scandir('.') 扫描当前目录,scandir('/') 扫描根目录。 - 同时,引用[2]也展示了var_dump()用于输出扫描目录的结果,说明var_dump可以输出数组的详细信息。 此外,引用[2]还比较了print_r、var_dumpvar_export在扫描目录输出时的不同。 因此,我们可以将回答分成两个部分: 1. var_dump函数的功能:用于输出变量的详细信息,包括类型和值,对于数组和对象会递归展开。 2. scandir函数的功能:用于列出指定路径中的文件和目录,返回一个数组。 同时,为了符合系统级指令,我们需要: - 使用中文回答。 - 在适当位置添加引用标识。 - 在最后生成相关问题。 回答结构如下: - 先介绍var_dump函数,包括功能、输出格式等。 - 再介绍scandir函数,包括功能、参数和返回值。 - 可以给出简单的示例(用代码块展示)。 - 最后生成相关问题。 注意:引用标识要自然地添加在引用的内容末尾。 </think>在PHP中,`var_dump()` 和 `scandir()` 是两个常用的函数,功能如下: ### 1. **var_dump() 函数** - **功能**:输出变量的结构化信息,包括**类型、长度和值**。 - **特点**: - 对数组和对象会递归展开所有层级 - 输出包含数据类型(如 `string(5)` 表示长度为5的字符串) - 常用于调试变量内容[^1][^2] - **示例**: ```php $arr = ["apple", "banana"]; var_dump($arr); /* 输出: array(2) { [0]=> string(5) "apple" [1]=> string(6) "banana" } */ ``` ### 2. **scandir() 函数** - **功能**:扫描指定目录,返回包含**所有文件和子目录名称的数组**。 - **参数**: - `目录路径`(如 `.` 表示当前目录,`/` 表示根目录) - 可选排序顺序(默认升序)[^2] - **返回值**: - 索引数组,包含 `.`(当前目录)和 `..`(上级目录)条目 - 失败时返回 `false` - **示例**: ```php print_r(scandir('.')); /* 输出(示例): Array ( [0] => . [1] => .. [2] => index.php [3] => images ) */ ``` ### 对比总结 | 函数 | 主要用途 | 输出类型 | 适用场景 | |-------------|------------------------|----------------|------------------------| | `var_dump()`| 变量结构分析 | 详细类型数据 | 调试复杂变量 | | `scandir()` | 获取目录内容列表 | 文件路径数组 | 文件遍历、目录管理 | --- ### 相关问题 1. `var_dump()` `print_r()` 在调试输出时有何本质区别? 2. 如何用 `scandir()` 实现递归遍历所有子目录? 3. 为什么 `scandir()` 返回的数组会包含 `.` 和 `..` 条目? 4. 在安全场景中,使用 `scandir()` 扫描目录需要注意哪些风险? [^1]: 引用自调试函数说明。 [^2]: 引用自目录扫描函数示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值