我正在創建一個簡單的數組包裝類,並希望它的__toString()
方法被格式化爲一個Python列表,例如:["foo", "bar", 6, 21.00002351]
。將每個元素轉換爲字符串是不夠的,因爲字符串對象實際上在列表表示中被引用。PHP等效於Python的repr()
在PHP中是否有repr()
等效,如果不是,PHP實現將是什麼樣子?
我正在創建一個簡單的數組包裝類,並希望它的__toString()
方法被格式化爲一個Python列表,例如:["foo", "bar", 6, 21.00002351]
。將每個元素轉換爲字符串是不夠的,因爲字符串對象實際上在列表表示中被引用。PHP等效於Python的repr()
在PHP中是否有repr()
等效,如果不是,PHP實現將是什麼樣子?
Python's repr()返回一個輸出,其中
eval(repr(object)) == object
由再版調用()內置函數和字符串轉換(反向引號)來計算對象的「官方」字符串表示形式。如果可能的話,這應該看起來像一個有效的Python表達式,可用於重新創建具有相同值的對象(給定適當的環境)。
所以在PHP中最接近的事情將是
這裏的關鍵詞是解析的。雖然函數print_r
和var_dump
將給出傳遞給它們的數據的某種表示形式,但它們不容易解析,也不像PHP表達式那樣可以被評估。
例子:
var_export(['foo', 'bar', 1,2,3]);
會給
array (
0 => 'foo',
1 => 'bar',
2 => 1,
3 => 2,
4 => 3,
)
,這是完全合法的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
另一種選擇是使用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
不同於var_export
,所得到的表示是不是一個PHP表達式,但壓實字符串指示的類型和它的屬性/值(串行化)。
但是您可能只是在尋找其他地方指出的json_encode
。
將其設爲社區Wiki,因爲我已經在給出的答案中回答了這個問題。
我不知道Python,但PHP數組可以包含任何數據類型和嵌套級別。我不知道這是如何轉換成你的格式。
有很多種功能,打印數組:
print_r()
var_dump()
var_export()
...但你的格式讓我想起了JSON的,所以你可以簡單地做這個:
<?php
$foo = array (
'foo',
'bar',
6,
21.00002351,
);
echo json_encode($foo); // ["foo","bar",6,21.00002351]
當然,這決不是自動的,即,這不會觸發任何toString()
方法在所有:
echo $foo; // "Array" + PHP Notice: Array to string conversion
http://php.net/manual/en/function.print-r.php – 2013-02-14 12:53:43
@DietrichEpp:這需要封裝在'ob_start()'和'ob_end_clean()'中,但我會用現在。 – 2013-02-14 12:55:38
無論如何,您應該使用調試器。 – KingCrunch 2013-02-14 12:56:45