PHP では .NET/Java の toString() に相当します。
質問
PHP 変数の値を文字列に変換するにはどうすればよいですか?
空の文字列を連結するよりも良いものを探していました。
$myText = $myVar . '';
以下のような ToString()
Java または .NET のメソッド。
解決
使用できます キャスト演算子:
$myText = (string)$myVar;
文字列のキャストと変換の詳細については、 ストリングスセクション ブール値と null の特別な処理を含む、PHP マニュアルの説明を参照してください。
他のヒント
これは型キャストで行われます。
$strvar = (string) $var; // Casts to string
echo $var; // Will cast to string implicitly
var_dump($var); // Will show the true type of the variable
クラスでは、魔法のメソッドを使用して出力内容を定義できます。 __toString
. 。例を以下に示します。
class Bottles {
public function __toString()
{
return 'Ninety nine green bottles';
}
}
$ex = new Bottles;
var_dump($ex, (string) $ex);
// Returns: instance of Bottles and "Ninety nine green bottles"
さらにいくつかの型キャストの例:
$i = 1;
// int 1
var_dump((int) $i);
// bool true
var_dump((bool) $i);
// string "1"
var_dump((string) 1);
使用 プリント_r:
$myText = print_r($myVar,true);
のように使うこともできます
$myText = print_r($myVar,true)."foo bar";
これで設定されます $myText
のような文字列に変換します。
array (
0 => '11',
)foo bar
使用 var_export もう少し詳しい情報(変数の種類など)を取得するには:
$myText = var_export($myVar,true);
型キャストを使用することもできます。
$var = (string)$varname;
または文字列値:
$var = strval($varname);
または SetType:
$success = settype($varname, 'string');
// $varname itself becomes a string
タイプジャグリングという点では、それらはすべて同じように機能します。
PHP変数の値を文字列に変換するにはどうすればよいですか?
値は、次のコマンドを使用して文字列に変換できます。 (文字列) キャスト または strval() 関数。(編集:として トーマス とも述べられている)。
また、文字列として使用する場合は、自動的にキャストされる必要があります。
あなたは探している ストラヴァル:
string strval ( mixed $var )
変数の文字列値を取得します。文字列への変換の詳細については、文字列のドキュメントを参照してください。
この関数は、返された値に対してフォーマットを実行しません。数値を文字列としてフォーマットする方法を探している場合は、sprintf()またはnumber_format()を参照してください。
プリミティブの場合は使用してください (string)$var
または、この変数をすぐに出力します。PHP は動的型付け言語であり、変数はオンザフライで文字列にキャストされます。
オブジェクトを文字列に変換したい場合は、次のように定義する必要があります。 __toString()
文字列を返すメソッド。このメソッドは例外をスローすることを禁止されています。
二重引用符で囲むと機能するはずです。
$myText = "$myVar";
あらゆる出力をキャッチできることは言及する価値があると思います(たとえば、 print_r
, var_dump
) 出力バッファリングを使用して変数に追加します。
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
別のオプションは、組み込みのものを使用することです セットタイプ 関数:
<?php
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo is now 5 (integer)
settype($bar, "string"); // $bar is now "1" (string)
?>
これにより、型キャストとは異なり、実際に変数の変換が実行され、複数の型に変換する一般的な方法が得られます。
Thomas G による回答に加えて、メイフィールド:
文字列キャスト マニュアルへのリンクをたどると、理解することが非常に重要な特殊なケースがあります。
(文字列) キャストは、特に変数の場合に推奨されます。 $a PHP はキャストに従うため、これはオブジェクトです。 プロトコル 呼び出しによるオブジェクト モデルに従って __toString() マジック メソッド ($a のインスタンス化元のクラスでそのようなメソッドが定義されている場合)。
PHP は次のようなことを行います
function castToString($instance)
{
if (is_object($instance) && method_exists($instance, '__toString')) {
return call_user_func_array(array($instance, '__toString'));
}
}
の (弦) キャスト操作は、コードをよりオブジェクト指向にする PHP5+ プログラミングで推奨される手法です。IMO これは、Java/C# などの他の OOP 言語との設計の類似性 (相違点) を示す良い例です。独自の特別な PHP 方法で (それが良いことや価値がある場合は常に)。
他の人が述べたように、オブジェクトには __toString
文字列にキャストされるメソッド。そのメソッドを定義していないオブジェクトでも、次のメソッドを使用して文字列表現を生成できます。 spl_object_hash 関数。
この関数は、オブジェクトの一意の識別子を返します。この ID は、オブジェクトが破壊されない限り、オブジェクトを保存するためのハッシュ キーとして、またはオブジェクトを識別するために使用できます。オブジェクトが破棄されると、そのハッシュは他のオブジェクトに再利用できます。
私は基本オブジェクトクラスを持っています __toString
デフォルトで呼び出すメソッド md5(spl_object_hash($this))
spl_object_hash からの出力はオブジェクト間で非常に似ている可能性があるため、出力を明確に一意にするためです。
これは、変数がオブジェクトとして初期化され、コードの後半で別のオブジェクトに変更されたと思われるコードのデバッグに特に役立ちます。var をログにエコーするだけで、オブジェクト ハッシュからの変更 (またはそうでない) を明らかにできます。
対象の文字列変数の先頭にゼロがある場合、上記のメソッドのすべてではないにしても一部は失敗します。 つまり077543このような変数を変換しようとすると、変数は次のように変換されるため、意図した文字列を取得できません。 基数 8 (8 進数).
これらすべてが実現します $str
の値があります 32611
$no = 077543
$str = (string)$no;
$str = "$no";
$str = print_r($no,true);
$str = strval($no);
$str = settype($no, "integer");
JavaのtoString()が文字列に何かを投げる方法だけではないので、この質問は少し誤解を招くと思います。 鋳造 via (string) または String.valueOf() は実行し、PHP でも同様に機能します。
//Java
String myText = (string) myVar;
//PHP
$myText = (string) $myVar;
Java は typesave であるため、これには問題が生じる可能性があることに注意してください。 詳細はこちらをご覧ください
しかし、先ほども述べたように、これはキャストであるため、Java の toString() に相当するものではありません。JavaのtoString オブジェクトを文字列にキャストするだけでなく、文字列表現を提供します。. 。そしてそれが何ですか __toString() PHPではそうします
//Java
class SomeClass{
public String toString(){
return 'some string representation';
}
}
//php
class SomeClass{
public function __toString()
{
return 'some string representation';
}
}
そして反対側から:
//Java
new SomeClass().toString();//'some string representation'
//PHP
strval(new SomeClass);//'some string representation'
「文字列表現を与える」とはどういう意味ですか?何百万冊もの本がある図書館のクラスを想像してみてください。
- そのクラスを String にキャストすると、(デフォルトで) データ (ここではすべての書籍) が文字列に変換されるため、String は非常に長くなり、ほとんどの場合あまり役に立ちません。
- To String insted は、文字列表現を提供します。つまり、図書館の名前だけ。これは短いため、情報は少なくなりますが、より重要な情報が得られます。
これらは両方とも有効なアプローチですが、目的が非常に異なります。どちらの方法もあらゆるケースに最適なソリューションであり、どちらが自分のニーズに適しているかを賢明に選択する必要があります。
確かにさらに多くのオプションがあります。
$no = 421337 //a number in php
$str = "$no"; //in PHP stuff inside "" is calculated and variables are replaced
$str = print_r($no,true); //same as String.format();
$str = settype($no, 'string'); // sets $no to the String Type
$str = strval($no); //get the string value of $no
$str = $no . ''; //as you said concat an empty string works too
これらのメソッドはすべて String を返しますが、内部で __toString を使用するものと、オブジェクトで失敗するものがあります。 PHP ドキュメント 詳細については。
二重引用符も機能するはずです...文字列を作成してから、2 つの空の文字列の間に $myVar のキャストされた STRING 値を APPEND/INSERT する必要があります。
を返す .ToString($in) という名前のメソッドをいつでも作成できます。
$in . '';
整数やブール値などの単純な型以外のものを変換する場合は、変換しようとしている型に独自の関数/メソッドを記述する必要があります。そうしないと、PHP は型 (配列、GoogleSniffer など) を出力するだけです。 、またはビデ)。
PHP は動的に型付けされるため、Chris Fournier が言ったように、「文字列のように使用すると文字列になります」。文字列の形式をより詳細に制御したい場合は、 プリントフ があなたの答えです。
また、 var_export php関数。
$parent_category_name = "new clothes & shoes" ;
//TO make it to string option one
$parent_category = strval($parent_category_name);
//Or make it string my concatenating it with 'new clothes & shoes'
//useful for database queries
$parent_category = "'".strval($parent_category_name)."'";
オブジェクトの場合は、キャスト演算子を使用できない場合があります。代わりに、私は json_encode()
方法。
たとえば、次のようにするとエラー ログに内容が出力されます。
error_log(json_encode($args));
stdClass のテキスト部分を文字列型に変換するには、この少し奇妙ですが有効なアプローチを試してください。
$my_std_obj_result = $SomeResponse->return->data; //specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result); //do conversion
私はvariableToStringを使用します
https://github.com/lingtalfi/VariableToString
すべての php タイプを処理し、柔軟性があります (必要に応じて拡張できます)