Secara teknikal, anda tidak boleh mengembalikan berbilang nilai. Walau bagaimanapun, terdapat cara untuk mengatasi had ini. Cara paling serupa untuk mengembalikan berbilang nilai adalah dengan menggunakan kata kunci list:
function getXYZ()
{
return array(4,5,6);
}
list($x,$y,$z) = getXYZ();
// Afterwards: $x == 4 && $y == 5 && $z == 6
// (This will hold for all samples unless otherwise noted)
Secara teknikal, anda mengembalikan tatasusunan dan menggunakan list untuk menyimpan elemen tatasusunan itu dengan nilai yang berbeza, dan bukannya menyimpan tatasusunan sebenar. Menggunakan teknik ini akan menjadikannya terasapaling seperti mengembalikan berbilang nilai.
list Penyelesaiannya adalah khusus php. Sesetengah bahasa mempunyai struktur yang serupa, tetapi banyak lagi yang tidak. Terdapat kaedah lain yang biasa digunakan untuk "mengembalikan" berbilang nilai, dan tersedia dalam hampir setiap bahasa (dalam satu cara atau yang lain). Walau bagaimanapun, pendekatan ini kelihatan berbeza sama sekali, jadi ia mungkin memerlukan sedikit masa untuk membiasakan diri.
// note that I named the arguments $a, $b and $c to show that
// they don't need to be named $x, $y and $z
function getXYZ(&$a, &$b, &$c)
{
$a = 4;
$b = 5;
$c = 6;
}
getXYZ($x, $y, $z);
Teknik ini juga digunakan dalam beberapa fungsi yang ditakrifkan oleh PHP itu sendiri (cth. str_replace, $matches dalam preg_match$matches). Ini mungkin terasa sangat berbeza daripada mengembalikan berbilang nilai , tetapi ia berbaloi pada paling tidak mengetahuinya
.
Kaedah ketiga ialah menggunakan objek untuk memegang nilai berbeza yang anda perlukan. Ini memerlukan lebih banyak input, jadi ia digunakan kurang kerap daripada dua kaedah di atas. Namun, mungkin masuk akal untuk menggunakan ciri ini apabila set pembolehubah yang sama digunakan di berbilang tempat (atau, sudah tentu, dalam bahasa yang tidak menyokong kaedah di atas atau membenarkan anda melakukannya tanpa menaip tambahan).
class MyXYZ
{
public $x;
public $y;
public $z;
}
function getXYZ()
{
$out = new MyXYZ();
$out->x = 4;
$out->y = 5;
$out->z = 6;
return $out;
}
$xyz = getXYZ();
$x = $xyz->x;
$y = $xyz->y;
$z = $xyz->z;
Kaedah di atas meringkaskan cara utama untuk fungsi mengembalikan berbilang nilai. Walau bagaimanapun, terdapat beberapa variasi pada kaedah ini. Varian yang paling menarik ialah yang sebenarnya mengembalikan tatasusunan, kerana anda boleh melakukan banyak perkara dengan tatasusunan dalam PHP.
Pertama, kita hanya boleh mengembalikan tatasusunan tanpa menganggapnya sebagai sesuatu selain tatasusunan:
Bahagian yang paling menarik dari kod di atas ialah kod di dalam fungsi adalah sama seperti dalam contoh pertama yang saya berikan hanya kod yang memanggil fungsi itu telah berubah. Ini bermakna bahawa apa yang dilakukan oleh pemanggil fungsi dengan hasil yang dikembalikan oleh fungsi adalah terpulang kepada orang yang memanggil fungsi itu.
Sebagai alternatif, anda boleh menggunakan tatasusunan bersekutu:
Php mempunyai fungsi compactcompact yang membolehkan anda melakukan perkara yang sama seperti di atas tetapi kurang menulis kod. (Nah, contoh tidak akan mempunyai kurang kod, tetapi aplikasi dunia nyata mungkin akan melakukannya.) Walau bagaimanapun, saya fikir penjimatan menaip adalah minimum, dan ia menjadikan kod lebih sukar untuk dibaca, jadi saya tidak akan melakukannya sendiri. Walau bagaimanapun, berikut adalah contoh:
Perlu diambil perhatian bahawa walaupun compactcompact 在 extract mempunyai rakan sejawat dalam extract
yang boleh digunakan dalam kod panggilan di sini, kerana menggunakannya adalah idea yang tidak baik (terutamanya untuk sesuatu yang semudah perkara ini), Saya tidak akan memberikan sampelnya. Masalahnya ialah, ia "secara ajaib" mencipta pembolehubah untuk anda, dan anda tidak dapat melihat pembolehubah yang dibuat tanpa melihat bahagian lain kod. 🎜
Akhir sekali, saya ingin menyatakan bahawa list tidak berfungsi dengan baik dengan tatasusunan bersekutu. Kandungan berikut akan memenuhi jangkaan anda:
Jika anda menggunakan list 与关联数组一起使用,并且其他人将来必须更改被调用函数中的代码(这可能发生在任何情况下),它可能会突然中断,所以我建议不要将 list dengan tatasusunan bersekutu, dan orang lain perlu menukar kod dalam fungsi yang dipanggil pada masa hadapan (ini boleh berlaku dalam apa jua keadaan), ia mungkin pecah secara tiba-tiba, jadi saya syorkan untuk tidak menggunakan
Secara teknikal, anda tidak boleh mengembalikan berbilang nilai. Walau bagaimanapun, terdapat cara untuk mengatasi had ini. Cara paling serupa untuk mengembalikan berbilang nilai adalah dengan menggunakan kata kunci
list
:Secara teknikal, anda mengembalikan tatasusunan dan menggunakan
list
untuk menyimpan elemen tatasusunan itu dengan nilai yang berbeza, dan bukannya menyimpan tatasusunan sebenar. Menggunakan teknik ini akan menjadikannya terasapaling seperti mengembalikan berbilang nilai.list
Penyelesaiannya adalah khusus php. Sesetengah bahasa mempunyai struktur yang serupa, tetapi banyak lagi yang tidak. Terdapat kaedah lain yang biasa digunakan untuk "mengembalikan" berbilang nilai, dan tersedia dalam hampir setiap bahasa (dalam satu cara atau yang lain). Walau bagaimanapun, pendekatan ini kelihatan berbeza sama sekali, jadi ia mungkin memerlukan sedikit masa untuk membiasakan diri.Teknik ini juga digunakan dalam beberapa fungsi yang ditakrifkan oleh PHP itu sendiri (cth. str_replace,
.$matches dalam preg_match
$matches
). Ini mungkin terasa sangat berbeza daripada mengembalikan berbilang nilai , tetapi ia berbaloi pada paling tidak mengetahuinyaKaedah ketiga ialah menggunakan objek untuk memegang nilai berbeza yang anda perlukan. Ini memerlukan lebih banyak input, jadi ia digunakan kurang kerap daripada dua kaedah di atas. Namun, mungkin masuk akal untuk menggunakan ciri ini apabila set pembolehubah yang sama digunakan di berbilang tempat (atau, sudah tentu, dalam bahasa yang tidak menyokong kaedah di atas atau membenarkan anda melakukannya tanpa menaip tambahan).
Kaedah di atas meringkaskan cara utama untuk fungsi mengembalikan berbilang nilai. Walau bagaimanapun, terdapat beberapa variasi pada kaedah ini. Varian yang paling menarik ialah yang sebenarnya mengembalikan tatasusunan, kerana anda boleh melakukan banyak perkara dengan tatasusunan dalam PHP.
Pertama, kita hanya boleh mengembalikan tatasusunan tanpa menganggapnya sebagai sesuatu selain tatasusunan:
Bahagian yang paling menarik dari kod di atas ialah kod di dalam fungsi adalah sama seperti dalam contoh pertama yang saya berikan hanya kod yang memanggil fungsi itu telah berubah. Ini bermakna bahawa apa yang dilakukan oleh pemanggil fungsi dengan hasil yang dikembalikan oleh fungsi adalah terpulang kepada orang yang memanggil fungsi itu.
Sebagai alternatif, anda boleh menggunakan tatasusunan bersekutu:
Php mempunyai fungsi
compact
compact
yang membolehkan anda melakukan perkara yang sama seperti di atas tetapi kurang menulis kod. (Nah, contoh tidak akan mempunyai kurang kod, tetapi aplikasi dunia nyata mungkin akan melakukannya.) Walau bagaimanapun, saya fikir penjimatan menaip adalah minimum, dan ia menjadikan kod lebih sukar untuk dibaca, jadi saya tidak akan melakukannya sendiri. Walau bagaimanapun, berikut adalah contoh:Perlu diambil perhatian bahawa walaupun
yang boleh digunakan dalam kod panggilan di sini, kerana menggunakannya adalah idea yang tidak baik (terutamanya untuk sesuatu yang semudah perkara ini), Saya tidak akan memberikan sampelnya. Masalahnya ialah, ia "secara ajaib" mencipta pembolehubah untuk anda, dan anda tidak dapat melihat pembolehubah yang dibuat tanpa melihat bahagian lain kod. 🎜compact
compact
在extract
mempunyai rakan sejawat dalamextract
Akhir sekali, saya ingin menyatakan bahawa
list
tidak berfungsi dengan baik dengan tatasusunan bersekutu. Kandungan berikut akan memenuhi jangkaan anda:Walau bagaimanapun, perkara berikut akan melakukan sesuatu yang berbeza:
Jika anda menggunakan
dengan tatasusunan tatasusunan bersekutu . 🎜list
与关联数组一起使用,并且其他人将来必须更改被调用函数中的代码(这可能发生在任何情况下),它可能会突然中断,所以我建议不要将list
dengan tatasusunan bersekutu, dan orang lain perlu menukar kod dalam fungsi yang dipanggil pada masa hadapan (ini boleh berlaku dalam apa jua keadaan), ia mungkin pecah secara tiba-tiba, jadi saya syorkan untuk tidak menggunakanTidak boleh mengembalikan 2 pembolehubah. Walau bagaimanapun, anda boleh menyebarkan tatasusunan dan mengembalikannya;
Sebagai contoh, fungsi ini akan kembali
$var2
Dalam apl:
Kalau nak kedua-duanya boleh ubah suai fungsi sikit