有些时候我们写php时可能会遇到需要直接输出源代码时候,特别是数组,这个时候我们时候使用php的系统函数即可实现
php将数组输出成php源代码
我们都知道php输出有each、print、print_r、printf、sprintf、var_dump等输出函数和语句;
each()
echo() 实际上不是一个函数,是php语句,因此其后的括号不是必须的,你也不能将它赋值给其他变量,如:
$a=echo('a');
这种写法是错误的,echo不能用来赋值 ,其返回值为void,或者说其并无返回值;
echo 带括号输出时只能接收一个参数,不带括号输出可以接收多个参数,参数用逗号隔开,输出时会忽略字符串中的换行;
echo 输出字符串使用双引号可以解析字符串中的变量,使用单引号时字符串中的变量不会被替换成变量值,而是将变量名作为字符串直接输出。
print()
print() 和 echo() 用法一样,但是echo速度会比print快一点点。实际上它也不是一个函数,因此您无需对其使用括号。不过,如果您希望向print() 传递一个以上的参数,那么使用括号会发生解析错误。注意print总是返回1的,这个和echo不一样,也就是可以使用print来赋值,不过没有实际意义。
print_r()
print_r函数打印关于变量的易于理解的信息。如果变量是string、integer或float , 将会直接输出其值,如果变量是一个数组,则会输出一个格式化后的数组,便于阅读,也就是有key和value对应的那种格式。对于object对象类同。print_r有两个参数,第一个是变量,第二个可设为true,如果设为true,则会返回字符串不再输出结果,否则返回布尔值TRUE。
printf()
printf函数返回一个格式化后的字符串,这函数说白了,它就是C语言的printf,格式输出,就不做介绍了。
sprintf()
sprintf函数使用方法和printf一样,唯一不同的就是该函数把格式化的字符串写写入一个变量中,而不是输出来。
var_dump()
功能: 输出变量的内容、类型或字符串的内容、类型、长度。常用来调试
你会发现以上函数都没涉及到到输出成源代码,print_r输出数组虽然格式正确,但他缺少逗号分隔符,不能直接使用,总不能自己写个自定义函数处理吧,这方法虽然可行但是比较麻烦;别急,php为我们提供了系统函数,它就是var_export,虽然用到的非常少,但还是非常实用的。
var_export
var_export() 函数用于输出或返回一个变量,以字符串形式表示;
var_export()函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的是一个合法的 PHP 代码;
他有两个参数,第一个是要输出的变量,第二个参数默认false 输出合法的 PHP 代码,如果设置为 TRUE,该函数不会执行输出结果,而且将输出结果返回给一个变量;
例:
<?php $a = array (1, 2, array ("a", "b", "c")); var_export ($a); ?> //输出结果 array ( 0 => 1, 1 => 2, 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), )
将php源代码执行并返回给php变量
如果我们获取到上边的源代码怎么把它赋值给一个变量呢?这时我们需要用到一个函数eval
eval()
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
看到函数介绍,可以执行字符串代码,这时我们就可以这样操作了
<?php $a = array (1, 2, array ("a", "b", "c")); $str = var_export ($a,TRUE); $arr = eval("return $str;"); ?>
这样$arr就获取到了代码执行后的结果,实际生产种,转换可执行字符串代码和字符串代码执行赋值给变量肯定是分开的。这里只是演示效果。
注意eval里面的return不能省略,而var_export 返回的字符串没有分号结束符,所以需要后边添加分号。
ok,操作结束。
---
2023-05-30 19:13:04回复