PHP的等价于Python的repr()

Nik*_*s R 2 php python repr

我正在创建一个简单的数组包装类,并希望它的__toString()方法被格式化为Python列表,例如:["foo", "bar", 6, 21.00002351].将每个元素转换为字符串是不够的,因为字符串对象实际上在列表表示中被引用.

repr()PHP中是否有等价物,如果没有,PHP实现会是什么样子?

Gor*_*don 7

Python的repr()返回一个输出

eval(repr(object)) == object
Run Code Online (Sandbox Code Playgroud)

由repr()内置函数和字符串转换(反向引号)调用,以计算对象的"官方"字符串表示形式.如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境).

所以PHP中最接近的是

这里的关键字是可解析的.虽然函数print_rvar_dump将给出传递给它们的数据的某种表示,但它们不易解析,也不像PHP表达式,它们可以被评估.

例:

var_export(['foo', 'bar', 1,2,3]);
Run Code Online (Sandbox Code Playgroud)

会给

array (
  0 => 'foo',
  1 => 'bar',
  2 => 1,
  3 => 2,
  4 => 3,
)
Run Code Online (Sandbox Code Playgroud)

这是完全有效的PHP代码:

$data = ['foo', 'bar', 1, 2, 3];
$repr = var_export($data, true);

// have to use it with return though to eval it back into a var
$evald = eval("return $repr;");

var_dump($evald == $data); // true
Run Code Online (Sandbox Code Playgroud)

另一种选择是用于serialize获得数据类型的规范和可解析表示,例如

$data = ['foo', 'bar', 1, 2, 3];
$repr = serialize($data); 
// -> a:5:{i:0;s:3:"foo";i:1;s:3:"bar";i:2;i:1;i:3;i:2;i:4;i:3;}
var_dump( unserialize($repr) == $data ); // true
Run Code Online (Sandbox Code Playgroud)

var_export与之不同,结果表示不是PHP表达式,而是指示类型及其属性/值(序列化)的压缩字符串.

但你可能正在寻找json_encode其他地方指出的.

将此作为社区Wiki,因为我已经在给定的欺骗中回答了这个问题.