3

単純な配列ラッパー クラスを作成していて、その__toString()メソッドを Python リストのようにフォーマットする必要があります["foo", "bar", 6, 21.00002351]。文字列オブジェクトは実際にはリスト表現で引用符で囲まれているため、各要素を文字列に変換するだけでは不十分です。

PHP に同等のものはありrepr()ますか? もしそうでない場合、PHP の実装はどのようになりますか?

4

2 に答える 2

9

Pythonのrepr()は、次の場合に出力を返します。

eval(repr(object)) == object

repr()組み込み関数および文字列変換(逆引用符)によって呼び出され、オブジェクトの「公式」文字列表現を計算します。可能であれば、これは、同じ値でオブジェクトを再作成するために使用できる有効なPython式のように見えるはずです(適切な環境が与えられた場合)。

したがって、PHPで最も近いものは

ここでのキーワードは解析可能です。関数print_rvar_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にします。

于 2013-02-14T12:59:13.237 に答える
2

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
于 2013-02-14T12:57:01.913 に答える