Saya akan menggunakan json_encode($myText). Saya telah menemukan bahwa solusi yang disarankan print_rdan (string)varbekerja dengan baik untuk nilai skalar dan objek sederhana. Untuk variabel kompleks, kelas atau objek jika lengkap __toString()tidak didefinisikan, saya lebih suka yang tersebut di atas json_encode.
Catatan: ini akan memberikan pemberitahuan PHP saat digunakan pada array.
dave1010
29
@MarkAmery Dia memberikan jawaban yang secara implisit menyebut __toString()"Metode Sihir", tetapi tidak menyebutkannya sama sekali. Pengguna meminta jawaban yang seperti toString()metode Java , dan dalam PHP, itulah __toString()fungsinya.
Supuhstar
2
@Supuhstar Ah benar, saya akhirnya mengerti dari mana Anda berasal. Maaf jika saya tumpul sebelumnya. Saya setuju bahwa ini adalah detail yang relevan dan akan sangat berharga untuk menambahkannya, mungkin memisahkan jawaban menjadi bagian 'Konversi Primitif' dan 'Konversi Objek' dengan header.
Mark Amery
309
Ini dilakukan dengan typecasting:
$strvar =(string) $var;// Casts to string
echo $var;// Will cast to string implicitly
var_dump($var);// Will show the true type of the variable
Di kelas Anda dapat menentukan apa yang dihasilkan dengan menggunakan metode magis __toString. Contohnya di bawah ini:
classBottles{publicfunction __toString(){return'Ninety nine green bottles';}}
$ex =newBottles;
var_dump($ex,(string) $ex);// Returns: instance of Bottles and "Ninety nine green bottles"
"ketika parameter kembali BENAR, [print_r] akan mengembalikan sebuah string." Karena print_r adalah cara yang bagus untuk mencetak objek, array (dan juga angka / string), ini adalah cara yang baik untuk mengubah objek menjadi string yang dapat dibaca manusia.
Cedric
1
Pendatang baru FYI, truebagian itu penting! Saya mencoba beberapa metode konversi string termasuk print_rdan kecewa dari semuanya, dan kemudian saya menemukan trueparameter (baca dokumentasi mengapa itu bekerja).
ripper234
57
Anda bisa menggunakan typecasting:
$var =(string)$varname;
atau StringValue:
$var = strval($varname);
atau SetType:
$success = settype($varname,'string');// $varname itself becomes a string
Mereka semua bekerja untuk hal yang sama dalam hal Jenis-Juggling.
strval ($ varname) melakukan trik untuk saya, terutama ketika nilai dikembalikan sebagai tipe "varian" dan perlu dikonversi menjadi string atau int.
Milan
strval()adalah apa yang saya cari karena saya ingin menggunakannya dengan array_walk. Misalnya$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Buttle Butkus
33
Bagaimana cara mengubah nilai variabel PHP ke string?
Nilai dapat dikonversi ke string menggunakan fungsi (string) atau fungsi strval () . (Sunting: Seperti Thomas juga nyatakan).
Itu juga harus secara otomatis dicor untuk Anda ketika Anda menggunakannya sebagai string.
Dapatkan nilai string suatu variabel. Lihat dokumentasi pada string untuk informasi lebih lanjut tentang konversi ke string.
Fungsi ini tidak melakukan pemformatan pada nilai yang dikembalikan. Jika Anda mencari cara untuk memformat nilai numerik sebagai string, silakan lihat sprintf () atau number_format ().
Ini sebenarnya sangat membantu karena saya ingin mengubah semua angka menjadi string tanpa menggunakan panggilan balik khusus. $strings = array_map('strval', $my_numbers);
peterchaula
Ini adalah satu-satunya jawaban yang bekerja dengan array_mapdan string callable pada umumnya.
Danon
18
Untuk primitif cukup gunakan (string)$varatau cetak variabel ini segera. PHP adalah bahasa yang diketik secara dinamis dan variabel akan dimasukkan ke string dengan cepat.
Jika Anda ingin mengonversi objek menjadi string, Anda harus menentukan __toString()metode yang mengembalikan string. Metode ini dilarang untuk melempar pengecualian.
perlu disebutkan bahwa Anda tidak memerlukannya dengan print_r . Cukup gunakan override untuk kembali sebagai string.
ars265
1
Cara yang lebih baik adalah menggunakan $result = var_export($someVar, true)tanpa ob.
Danon
8
Opsi lain adalah menggunakan bawaan fungsi settype bawaan :
<?php
$foo ="5bar";// string
$bar =true;// boolean
settype($foo,"integer");// $foo is now 5 (integer)
settype($bar,"string");// $bar is now "1" (string)?>
Ini sebenarnya melakukan konversi pada variabel tidak seperti typecasting dan memungkinkan Anda memiliki cara umum untuk mengkonversi ke beberapa jenis.
Selain jawaban yang diberikan oleh Thomas G. Mayfield:
Jika Anda mengikuti tautan ke manual casting string, ada kasus khusus yang cukup penting untuk dipahami:
(string) cast lebih disukai terutama jika variabel Anda $ a adalah objek, karena PHP akan mengikuti protokol casting sesuai dengan model objeknya dengan memanggil __toString () metode ajaib (jika seperti itu didefinisikan dalam kelas di mana $ a dipakai dari ).
PHP melakukan sesuatu yang mirip
function castToString($instance){if(is_object($instance)&& method_exists($instance,'__toString')){return call_user_func_array(array($instance,'__toString'));}}
Operasi (string) casting adalah teknik yang direkomendasikan untuk pemrograman PHP5 + membuat kode lebih Berorientasi Objek. IMO ini adalah contoh bagus dari kesamaan desain (perbedaan) dengan bahasa OOP lainnya seperti Java / C # / etc., Yaitu dengan cara PHP khusus (kapan saja untuk kebaikan atau untuk nilai).
Seperti yang telah disebutkan orang lain, objek membutuhkan __toStringmetode untuk dilemparkan ke string. Objek yang tidak mendefinisikan metode itu masih dapat menghasilkan representasi string menggunakan fungsi spl_object_hash .
Fungsi ini mengembalikan pengidentifikasi unik untuk objek. Id ini dapat digunakan sebagai kunci hash untuk menyimpan objek, atau untuk mengidentifikasi objek, selama objek tidak dihancurkan. Setelah objek dihancurkan, hashnya dapat digunakan kembali untuk objek lain.
Saya memiliki kelas Object dasar dengan __toStringmetode yang secara default memanggil md5(spl_object_hash($this))untuk membuat output jelas unik, karena output dari spl_object_hash dapat terlihat sangat mirip antara objek.
Ini sangat membantu untuk kode debugging di mana variabel menginisialisasi sebagai Objek dan kemudian dalam kode itu diduga telah berubah menjadi Obyek yang berbeda. Cukup dengan menggemakan variabel ke log dapat mengungkapkan perubahan dari hash objek (atau tidak).
Ini PICNIC (masalah di kursi, bukan di komputer) karena tidak ada yang gagal di sini ! print 077543;output 32611, jadi ini adalah nilai string yang benar dari $no. Tidak ada yang mengharapkan yang (string)+1mengembalikan string +1(itu kembali dengan benar 1) atau yang $no = 1+1; print (string)$no;keluar 1+1. Catatan: (1) Sama untuk hex ( $no=0xff;) juga. (2) Anda bisa mendapatkan kembali nilai oktal dengan '0'.decoct($no);(3) $no="077543";tetap memimpin 0, "077543" memberi +1 77544sementara 077543+1(benar) memberi 32612. (PS: tidak diturunkan, karena kesalahan ini biasa terjadi)
Tino
4
Saya pikir pertanyaan ini agak menyesatkan karena, toString () di Jawa bukan hanya cara untuk melemparkan sesuatu ke String. Itulah yang melakukan casting via (string) atau String.valueOf (), dan berfungsi juga di PHP.
Tapi seperti yang saya katakan, ini casting dan karena itu tidak setara dengan toString Java ().
toString di Jawa tidak hanya melemparkan objek ke sebuah String. Ini justru akan memberi Anda representasi String . Dan itulah yang dilakukan __toString () di PHP.
Apa yang saya maksud dengan "memberikan representasi String"? Bayangkan kelas untuk perpustakaan dengan jutaan buku.
Membuat kelas itu menjadi String akan (secara default) mengubah data, di sini semua buku, menjadi string sehingga String akan sangat panjang dan sebagian besar waktu juga tidak terlalu berguna.
To String sebagai gantinya akan memberi Anda representasi String, yaitu, hanya nama perpustakaan. Ini lebih pendek dan karena itu memberi Anda lebih sedikit, tetapi informasi yang lebih penting.
Keduanya merupakan pendekatan yang valid tetapi dengan tujuan yang sangat berbeda, tidak ada solusi yang sempurna untuk setiap kasus dan Anda harus memilih dengan bijak yang cocok dengan kebutuhan Anda.
Tentu, ada lebih banyak opsi:
$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 concatenate an empty string works too
Semua metode ini akan mengembalikan sebuah String, beberapa dari mereka menggunakan __toString secara internal dan beberapa yang lain akan gagal pada Objects. Lihatlah dokumentasi PHP untuk lebih jelasnya.
Kutipan ganda juga bisa digunakan ... ia harus membuat string, lalu harus LAMPIRAN / Sisipkan nilai STRING yang dicor $ myVar di antara 2 string kosong.
Jika Anda mengonversi apa pun selain jenis sederhana seperti bilangan bulat atau boolean, Anda harus menulis fungsi / metode Anda sendiri untuk jenis yang Anda coba konversi, jika tidak, PHP hanya akan mencetak jenisnya (seperti array, GoogleSniffer , atau Bidet).
PHP diketik secara dinamis, jadi seperti kata Chris Fournier, "Jika Anda menggunakannya seperti string, ia menjadi string". Jika Anda mencari kontrol lebih besar atas format string maka printf adalah jawaban Anda.
$parent_category_name ="new clothes & shoes";// To make it to string option one
$parent_category = strval($parent_category_name);// Or make it a string by concatenating it with 'new clothes & shoes'// It is useful for database queries
$parent_category ="'". strval($parent_category_name)."'";
Tunduk, karena saya benar-benar tidak tahu apa yang ingin Anda sampaikan kepada kami. Menggunakan strval()string hanya membuang-buang waktu saja.
Tino
dude masalahnya adalah anggap Anda menerima nilai string = ketika itu bertolak itu akan menjadi "string". Tetapi, ketika Anda ingin menampilkannya dalam javascript, Anda harus membuatnya 'stringx' '
Daniel Adenew
Ini sangat berbahaya (tidak untuk mengatakan: salah jelas). Silakan lihat stackoverflow.com/q/168214 atau stackoverflow.com/q/23740548 untuk memahami cara meneruskan sesuatu dengan aman dari PHP ke JS! (Maaf karena sedikit offtopic: Melewati var PHP ke JS bukan bagian dari pertanyaan.)
Tino
0
Untuk objek, Anda mungkin tidak dapat menggunakan operator transmisi. Sebaliknya, saya menggunakan json_encode()metode ini.
Misalnya, berikut ini akan menampilkan konten ke log kesalahan:
Coba ini sedikit aneh, tetapi bekerja, pendekatan untuk mengubah bagian tekstual stdClass ke tipe string:
$my_std_obj_result = $SomeResponse->return->data;// Specific to object/implementation
$my_string_result = implode ((array)$my_std_obj_result);// Do conversion
print_r(foo, true)
)!json_encode($myText)
. Saya telah menemukan bahwa solusi yang disarankanprint_r
dan(string)var
bekerja dengan baik untuk nilai skalar dan objek sederhana. Untuk variabel kompleks, kelas atau objek jika lengkap__toString()
tidak didefinisikan, saya lebih suka yang tersebut di atasjson_encode
.Jawaban:
Anda dapat menggunakan operator casting :
Ada lebih banyak detail untuk casting string dan konversi di bagian Strings manual PHP, termasuk penanganan khusus untuk boolean dan null.
sumber
Object of class Foo could not be converted to string
. Apakah ada solusi umum yang dapat mengubah apa pun (array + objek + apa pun) menjadi string?__toString()
"Metode Sihir", tetapi tidak menyebutkannya sama sekali. Pengguna meminta jawaban yang sepertitoString()
metode Java , dan dalam PHP, itulah__toString()
fungsinya.Ini dilakukan dengan typecasting:
Di kelas Anda dapat menentukan apa yang dihasilkan dengan menggunakan metode magis
__toString
. Contohnya di bawah ini:Beberapa contoh lain jenis casting:
sumber
Gunakan print_r :
Anda juga dapat menggunakannya seperti:
Ini akan diatur
$myText
ke string, seperti:Gunakan var_export untuk mendapatkan sedikit lebih banyak info (dengan jenis variabel, ...):
sumber
true
bagian itu penting! Saya mencoba beberapa metode konversi string termasukprint_r
dan kecewa dari semuanya, dan kemudian saya menemukantrue
parameter (baca dokumentasi mengapa itu bekerja).Anda bisa menggunakan typecasting:
atau StringValue:
atau SetType:
Mereka semua bekerja untuk hal yang sama dalam hal Jenis-Juggling.
sumber
strval()
adalah apa yang saya cari karena saya ingin menggunakannya denganarray_walk
. Misalnya$array = array('cat',$object); array_walk($array,'strval'); // $array = array('cat',$object->__toString)
Nilai dapat dikonversi ke string menggunakan fungsi (string) atau fungsi strval () . (Sunting: Seperti Thomas juga nyatakan).
Itu juga harus secara otomatis dicor untuk Anda ketika Anda menggunakannya sebagai string.
sumber
Anda mencari strval :
sumber
$strings = array_map('strval', $my_numbers);
array_map
dan string callable pada umumnya.Untuk primitif cukup gunakan
(string)$var
atau cetak variabel ini segera. PHP adalah bahasa yang diketik secara dinamis dan variabel akan dimasukkan ke string dengan cepat.Jika Anda ingin mengonversi objek menjadi string, Anda harus menentukan
__toString()
metode yang mengembalikan string. Metode ini dilarang untuk melempar pengecualian.sumber
Menempatkannya dalam tanda kutip ganda harus bekerja:
sumber
Saya pikir perlu disebutkan bahwa Anda dapat menangkap output (seperti
print_r
,var_dump
) dalam variabel dengan menggunakan buffering output:Terima kasih kepada: Bagaimana saya bisa menangkap hasil var_dump ke sebuah string?
sumber
$result = var_export($someVar, true)
tanpa ob.Opsi lain adalah menggunakan bawaan fungsi settype bawaan :
Ini sebenarnya melakukan konversi pada variabel tidak seperti typecasting dan memungkinkan Anda memiliki cara umum untuk mengkonversi ke beberapa jenis.
sumber
Selain jawaban yang diberikan oleh Thomas G. Mayfield:
Jika Anda mengikuti tautan ke manual casting string, ada kasus khusus yang cukup penting untuk dipahami:
(string) cast lebih disukai terutama jika variabel Anda $ a adalah objek, karena PHP akan mengikuti protokol casting sesuai dengan model objeknya dengan memanggil __toString () metode ajaib (jika seperti itu didefinisikan dalam kelas di mana $ a dipakai dari ).
PHP melakukan sesuatu yang mirip
Operasi (string) casting adalah teknik yang direkomendasikan untuk pemrograman PHP5 + membuat kode lebih Berorientasi Objek. IMO ini adalah contoh bagus dari kesamaan desain (perbedaan) dengan bahasa OOP lainnya seperti Java / C # / etc., Yaitu dengan cara PHP khusus (kapan saja untuk kebaikan atau untuk nilai).
sumber
Seperti yang telah disebutkan orang lain, objek membutuhkan
__toString
metode untuk dilemparkan ke string. Objek yang tidak mendefinisikan metode itu masih dapat menghasilkan representasi string menggunakan fungsi spl_object_hash .Saya memiliki kelas Object dasar dengan
__toString
metode yang secara default memanggilmd5(spl_object_hash($this))
untuk membuat output jelas unik, karena output dari spl_object_hash dapat terlihat sangat mirip antara objek.Ini sangat membantu untuk kode debugging di mana variabel menginisialisasi sebagai Objek dan kemudian dalam kode itu diduga telah berubah menjadi Obyek yang berbeda. Cukup dengan menggemakan variabel ke log dapat mengungkapkan perubahan dari hash objek (atau tidak).
sumber
Beberapa, jika tidak semua, metode dalam jawaban sebelumnya gagal ketika variabel string yang dimaksud memiliki nol di depan , misalnya, 077543 .
Upaya untuk mengkonversi variabel seperti itu gagal mendapatkan string yang dimaksudkan, karena variabel tersebut dikonversi ke basis 8 (oktal) .
Semua ini akan
$str
memiliki nilai 32611 :sumber
print 077543;
output32611
, jadi ini adalah nilai string yang benar dari$no
. Tidak ada yang mengharapkan yang(string)+1
mengembalikan string+1
(itu kembali dengan benar1
) atau yang$no = 1+1; print (string)$no;
keluar1+1
. Catatan: (1) Sama untuk hex ($no=0xff;
) juga. (2) Anda bisa mendapatkan kembali nilai oktal dengan'0'.decoct($no);
(3)$no="077543";
tetap memimpin0
, "077543" memberi +177544
sementara077543+1
(benar) memberi32612
. (PS: tidak diturunkan, karena kesalahan ini biasa terjadi)Saya pikir pertanyaan ini agak menyesatkan karena, toString () di Jawa bukan hanya cara untuk melemparkan sesuatu ke String. Itulah yang melakukan casting via (string) atau String.valueOf (), dan berfungsi juga di PHP.
Perhatikan bahwa ini bisa bermasalah karena Java adalah tipe-aman ( lihat di sini untuk detail lebih lanjut ).
Tapi seperti yang saya katakan, ini casting dan karena itu tidak setara dengan toString Java ().
toString di Jawa tidak hanya melemparkan objek ke sebuah String. Ini justru akan memberi Anda representasi String . Dan itulah yang dilakukan __toString () di PHP.
Dan dari sisi lain:
Apa yang saya maksud dengan "memberikan representasi String"? Bayangkan kelas untuk perpustakaan dengan jutaan buku.
Keduanya merupakan pendekatan yang valid tetapi dengan tujuan yang sangat berbeda, tidak ada solusi yang sempurna untuk setiap kasus dan Anda harus memilih dengan bijak yang cocok dengan kebutuhan Anda.
Tentu, ada lebih banyak opsi:
Semua metode ini akan mengembalikan sebuah String, beberapa dari mereka menggunakan __toString secara internal dan beberapa yang lain akan gagal pada Objects. Lihatlah dokumentasi PHP untuk lebih jelasnya.
sumber
Dokumentasi mengatakan bahwa Anda juga dapat melakukan:
Itu sama dengan pemain, tapi saya pikir itu terlihat lebih cantik.
Sumber:
sumber
Kutipan ganda juga bisa digunakan ... ia harus membuat string, lalu harus LAMPIRAN / Sisipkan nilai STRING yang dicor $ myVar di antara 2 string kosong.
sumber
Anda selalu dapat membuat metode bernama .ToString ($ in) yang mengembalikan
sumber
Jika Anda mengonversi apa pun selain jenis sederhana seperti bilangan bulat atau boolean, Anda harus menulis fungsi / metode Anda sendiri untuk jenis yang Anda coba konversi, jika tidak, PHP hanya akan mencetak jenisnya (seperti array, GoogleSniffer , atau Bidet).
sumber
PHP diketik secara dinamis, jadi seperti kata Chris Fournier, "Jika Anda menggunakannya seperti string, ia menjadi string". Jika Anda mencari kontrol lebih besar atas format string maka printf adalah jawaban Anda.
sumber
Anda juga dapat menggunakan fungsi PHP var_export .
sumber
sumber
strval()
string hanya membuang-buang waktu saja.Untuk objek, Anda mungkin tidak dapat menggunakan operator transmisi. Sebaliknya, saya menggunakan
json_encode()
metode ini.Misalnya, berikut ini akan menampilkan konten ke log kesalahan:
sumber
Coba ini sedikit aneh, tetapi bekerja, pendekatan untuk mengubah bagian tekstual stdClass ke tipe string:
sumber
Saya menggunakan variableToString . Ini menangani setiap jenis PHP dan fleksibel (Anda dapat memperluasnya jika Anda mau).
sumber