php将数组输出成php源代码将php源代码执行并返回给php变量

by 少年2021-08-18
  • 0 赞
  • 0 收藏
  • 技术
  • 1027 评论
  • 12821 阅读
© 本文 by 少年 版权所有,作者未对本笔记声明转载限制,转载时请注明本文标题和链接。
笔记

有些时候我们写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,操作结束。

---

TAG: php
评论
Nmuitoink
can you take nyquil with fluoxetine can i take tylenol with fluoxetine can you get high from fluoxetine

2023-05-22 15:46:39回复

Gusovu
azipro canada cheap omnacortil generic order neurontin 100mg online cheap

2023-05-22 14:49:18回复

Haaryded
Truly tons of helpful info! pay for paper pay for an essay pay for an essay buy college essays

2023-05-22 11:12:04回复

Ccmlbz
cialis price costco tadalafil ca buy tadalafil 40mg sale

2023-05-21 19:31:18回复

Nmuitoink
prozac and bipolar fluoxetine for adhd fluoxetine washout period

2023-05-21 01:10:44回复

12345678 ... 206(有 1027 条评论)