Apa yang sebenarnya ingin Anda capai? Tentunya jika Anda menjelaskan masalah Anda yang sebenarnya, seseorang di sini dapat membantu Anda menemukan solusi yang elegan.
Mike Daniels
3
Pertanyaan tidak membedakan antara salah satu atau satu dari dua nilai, baik dua dari dua nilai, atau evaluasi malas konsep baru satu maka mungkin dua dari dua nilai. Yang pertama sepele dengan segala jenis aliran bersyarat. Yang kedua diizinkan dengan python: q, r = divmod (x, y); serta Lisp; PHP membutuhkan daftar ($ q, $ r) = twovals (); hack, di mana function twovals () {return array ($ a, $ b); }. Evaluasi malas agak maju dan belum tertangkap di PHP. Karena pertanyaannya tidak tepat, sarankan untuk tidak menggunakan entri ini sebagai referensi definitif untuk topik ini.
DragonLord
5
Jika Anda membutuhkan kedua nilai tersebut, kembalikan dalam array.
Ada pertanyaan duplikat, tetapi dengan jawaban yang lebih ringkas sehingga akan membuat Anda lebih cepat ke titik: Mengembalikan 2 nilai dari suatu fungsi .
Gras Double
Jawaban:
162
Tidak ada cara mengembalikan 2 variabel. Meskipun, Anda dapat menyebarkan array dan mengembalikannya; buat persyaratan untuk mengembalikan variabel dinamis, dll.
Misalnya, fungsi ini akan kembali $var2
function wtf($blahblah =true){
$var1 ="ONe";
$var2 ="tWo";if($blahblah ===true){return $var2;}return $var1;}
Dalam aplikasi:
echo wtf();//would echo: tWo
echo wtf("not true, this is false");//would echo: ONe
Jika Anda menginginkan keduanya, Anda dapat memodifikasi fungsinya sedikit
function wtf($blahblah =true){
$var1 ="ONe";
$var2 ="tWo";if($blahblah ===true){return $var2;}if($blahblah =="both"){return array($var1, $var2);}return $var1;}
echo wtf("both")[0]//would echo: ONe
echo wtf("both")[1]//would echo: tWo
list($first, $second)= wtf("both")// value of $first would be $var1, value of $second would be $var2
IMHO jawaban ini akan ditingkatkan jika dihilangkan bagian pertama, yang membahas cara mengembalikan satu atau nilai yang berbeda, tergantung pada beberapa kondisi. Saya yakin bahwa 99,999 +% orang yang datang ke diskusi ini ingin tahu cara mengembalikan kedua nilai sekaligus. Lihat jawaban terpilih tertinggi.
ToolmakerSteve
401
Secara teknis, Anda tidak dapat mengembalikan lebih dari satu nilai. Namun, ada beberapa cara untuk mengatasi keterbatasan itu. Cara yang paling bertindak seperti mengembalikan beberapa nilai, adalah dengan listkata kunci:
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 teknis, Anda mengembalikan array dan menggunakan listuntuk menyimpan elemen-elemen array itu dalam nilai yang berbeda daripada menyimpan array yang sebenarnya. Menggunakan teknik ini akan membuatnya merasa seperti mengembalikan beberapa nilai.
The listsolusi adalah satu agak php-spesifik. Ada beberapa bahasa dengan struktur yang serupa, tetapi lebih banyak bahasa yang tidak. Ada cara lain yang biasanya digunakan untuk "mengembalikan" beberapa nilai dan tersedia dalam hampir setiap bahasa (dengan satu atau lain cara). Namun, metode ini akan terlihat sangat berbeda sehingga mungkin perlu dibiasakan.
// note that I named the arguments $a, $b and $c to show that// they don't need to be named $x, $y and $zfunction getXYZ(&$a,&$b,&$c){
$a =4;
$b =5;
$c =6;}
getXYZ($x, $y, $z);
Teknik ini juga digunakan dalam beberapa fungsi yang didefinisikan oleh php itu sendiri (misalnya $countdalam str_replace , $matchesdalam preg_match ). Ini mungkin terasa sangat berbeda dari mengembalikan beberapa nilai, tetapi layak setidaknya diketahui.
Metode ketiga adalah menggunakan objek untuk menyimpan nilai-nilai berbeda yang Anda butuhkan. Ini lebih banyak mengetik, jadi ini tidak digunakan sesering dua metode di atas. Mungkin masuk akal untuk menggunakan ini, ketika menggunakan serangkaian variabel yang sama di sejumlah tempat (atau tentu saja, bekerja dalam bahasa yang tidak mendukung metode di atas atau memungkinkan Anda melakukan ini tanpa mengetik tambahan).
Metode di atas meringkas cara utama untuk mengembalikan beberapa nilai dari suatu fungsi. Namun, ada variasi pada metode ini. Variasi yang paling menarik untuk dilihat, adalah di mana Anda benar-benar mengembalikan array, hanya karena ada begitu banyak yang dapat Anda lakukan dengan array di PHP.
Pertama, kita bisa mengembalikan array dan tidak memperlakukannya sebagai array selain array:
Bagian yang paling menarik tentang kode di atas adalah bahwa kode di dalam fungsinya sama dengan contoh pertama yang saya berikan; hanya kode yang memanggil fungsi yang berubah. Ini berarti terserah orang yang memanggil fungsi bagaimana memperlakukan hasil yang dikembalikan fungsi.
Atau, seseorang dapat menggunakan array asosiatif:
Php memang memiliki compactfungsi yang memungkinkan Anda melakukan hal yang sama seperti di atas tetapi saat menulis kode lebih sedikit. (Yah, sampel tidak akan memiliki kode lebih sedikit, tetapi aplikasi dunia nyata mungkin akan.) Namun, saya pikir jumlah penghematan mengetik minimal dan itu membuat kode lebih sulit dibaca, jadi saya tidak akan melakukannya sendiri. Namun demikian, inilah contohnya:
Perlu dicatat bahwa walaupun compactmemiliki mitra dalam extractyang dapat digunakan dalam kode panggilan di sini, tetapi karena itu ide yang buruk untuk menggunakannya (terutama untuk sesuatu yang sederhana seperti ini) saya bahkan tidak akan memberikan sampel untuk itu. Masalahnya adalah ia akan melakukan "sihir" dan membuat variabel untuk Anda, sementara Anda tidak dapat melihat variabel mana yang dibuat tanpa pergi ke bagian lain dari kode.
Akhirnya, saya ingin menyebutkan bahwa listtidak benar - benar bermain dengan baik dengan array asosiatif. Berikut ini akan melakukan apa yang Anda harapkan:
function getXYZ(){return array('x'=>4,'y'=>5,'z'=>6);}
$array = getXYZ();
list($x, $y, $z)= getXYZ();
Namun, berikut ini akan melakukan sesuatu yang berbeda:
Jika Anda menggunakan listarray asosiatif, dan orang lain harus mengubah kode dalam fungsi yang disebut di masa mendatang (yang mungkin terjadi pada situasi apa pun) mungkin tiba-tiba rusak, jadi saya akan merekomendasikan untuk tidak menggabungkan listdengan array asosiatif.
Itu adalah pilihan lain, tetapi bagi saya rasanya tidak mengembalikan banyak nilai, sama seperti mengembalikan array. Itu mungkin hanya aku. Secara pribadi, saya akan menemukan return array('x' => $x, 'y' => $y, 'z' => $z)pembersih, tetapi ke titik di mana saya akan menulis sendiri, bukan ke titik di mana saya akan meminta orang lain untuk menggunakan format itu.
Jasper
2
Menggunakan List () adalah jawaban yang bagus untuk masalah simular yang saya miliki. ini adalah cara terbaik untuk memvalidasi dan mengembalikan beberapa variabel kembali ke fungsi. cepat melihat php docs akan memberi lebih banyak cahaya pada fungsi ini dan mungkin membuatnya lebih jelas. php.net/manual/en/function.list.php .. terima kasih Jasper!
JustinP
2
+1 untuk jawaban yang begitu luas, terutama untuk pertanyaan umum yang luas. Meskipun begitu, jawaban ini sangat membantu saya.
Lee Blake
2
@Mikey Alasan historis. Jawaban ini awalnya diposting pada pertanyaan yang berbeda, yang dihapus karena duplikat yang persis sama dengan yang satu ini (meskipun faktanya sebenarnya lebih tua). Jawabannya dipindahkan ke pertanyaan ini lebih lambat dari kunjungan terakhir orang yang menanyakan pertanyaan ini.
Jasper
73
Dalam contoh Anda, pengembalian kedua tidak akan pernah terjadi - pengembalian pertama adalah hal terakhir yang dijalankan PHP. Jika Anda perlu mengembalikan beberapa nilai, kembalikan array:
function multiple_return(){return['this','is','a','test'];}[$first, $second, $third, $fourth]= multiple_return();
echo($first);>this
echo($fourth);> test
Destrukturisasi adalah alat yang sangat kuat. Itu mampu merusak kunci => pasangan nilai juga:
Saya berharap StackOverflow akan memiliki fitur seperti 'fitur jawaban' bahkan ketika tidak diterima pada saat penciptaan pertanyaan karena jawaban ini di sini sangat berguna dan diperbarui, tetapi tentunya di luar topik, tentu saja.
Jonatas CD
3
@ JonatasCD - tidak yakin mengapa Anda mengatakan jawaban ini "di luar topik". Dalam php 7.1 ini adalah cara yang paling nyaman untuk membuat dan menangani beberapa nilai pengembalian dari suatu fungsi. Jadi untuk versi php yang lebih baru, ini merupakan jawaban unggul untuk jawaban yang diterima asli.
ToolmakerSteve
@ToolmakerSteve Saya pikir Anda salah paham. "di luar topik" untuk pertanyaan itu adalah saran saya untuk dapat mengubah apa pertanyaan yang diterima berdasarkan implementasi di masa depan. Itu tidak ada hubungannya dengan jawaban Anda;)
Jonatas CD
@ JonatasCD - Ahh yang menjelaskannya. (Bukan jawaban saya, saya hanya bingung.) Setidaknya sebuah tag yang mengatakan "ini lebih up-to-date daripada jawaban yang diterima" Mungkin tiga orang harus setuju dengan tag itu, dan kemudian menjadi ditampilkan. :)
ToolmakerSteve
26
Di PHP 5.5 ada juga konsep baru:, di generatorsmana Anda dapat menghasilkan beberapa nilai dari suatu fungsi:
function hasMultipleValues(){yield"value1";yield"value2";}
$values = hasMultipleValues();foreach($values as $val){// $val will first be "value1" then "value2"}
Saya tahu bahwa saya sangat terlambat, tetapi ada solusi yang bagus dan sederhana untuk masalah ini.
Dimungkinkan untuk mengembalikan beberapa nilai sekaligus menggunakan penghancuran.
function test(){return['model'=>'someValue','data'=>'someothervalue'];}
Sekarang Anda bisa menggunakan ini
$result = test();
extract($result);
extractmembuat variabel untuk setiap anggota dalam array, dinamai setelah anggota itu. Karenanya sekarang Anda dapat mengakses $modeldan$data
Tidak mungkin memiliki dua pernyataan kembali. Namun itu tidak membuang kesalahan tetapi ketika fungsi dipanggil Anda hanya akan menerima nilai pernyataan pengembalian pertama. Kita dapat menggunakan pengembalian array untuk mendapatkan beberapa nilai sebagai balasannya. Sebagai contoh:
function test($testvar){// do something//just assigning a string for example, we can assign any operation result
$var1 ="result1";
$var2 ="result2";return array('value1'=> $var1,'value2'=> $var2);}
Fungsi, menurut definisi, hanya mengembalikan satu nilai.
Namun, seperti yang Anda asumsikan, nilai itu bisa berupa array.
Jadi Anda tentu dapat melakukan sesuatu seperti:
<?PHP
function myfunc($a,$b){return array('foo'=>$a,'bar'=>$b);}
print_r(myfunc('baz','bork'));
Yang mengatakan, ada baiknya luangkan waktu sejenak dan pikirkan apa pun yang Anda coba pecahkan. Sementara mengembalikan nilai hasil yang kompleks (seperti array, atau objek) sangat valid, jika Anda berpikir bahwa "Saya ingin mengembalikan dua nilai", Anda mungkin mendesain dengan buruk. Tanpa lebih detail dalam pertanyaan Anda, sulit untuk mengatakannya, tetapi tidak ada salahnya untuk berhenti dan berpikir dua kali.
Jawaban yang diberi tanda centang hijau di atas sebenarnya salah. Anda bisa mengembalikan beberapa nilai dalam PHP, jika Anda mengembalikan array. Lihat kode berikut untuk contoh:
<?php
function small_numbers(){return array (0,1,2);}
list ($zero, $one, $two)= small_numbers();
Kode ini sebenarnya disalin dari halaman berikut di situs web PHP: http://php.net/manual/en/functions.returning-values.php
Saya juga pernah menggunakan jenis kode yang sama berkali-kali, jadi dapat mengkonfirmasi bahwa itu bagus dan berhasil.
Jawaban itu merujuk pada contoh kode dalam pertanyaan, sehingga tidak sepenuhnya salah. Tapi pertanyaannya ambigu. Maksud adalah mungkin untuk kembali dua nilai dari satu fungsi panggilan.
Peter Mortensen
3
Fungsi dalam PHP hanya dapat mengembalikan satu variabel. Anda bisa menggunakan variabel dengan cakupan global, Anda bisa mengembalikan array, atau Anda bisa meneruskan variabel dengan merujuk ke fungsi dan daripada mengubah nilai, .. tetapi semua itu akan mengurangi keterbacaan kode Anda. Saya menyarankan agar Anda melihat ke kelas.
Kupikir aku akan memperluas beberapa tanggapan dari atas ....
class nameCheck{public $name;publicfunction __construct(){
$this->name = $name;}function firstName(){// If a name has been entered..if(!empty($this->name)){
$name = $this->name;
$errflag =false;// Return a array with both the name and errflagreturn array($name, $errflag);// If its empty..}elseif(empty($this->name)){
$errmsg ='Please enter a name.';
$errflag =true;// Return both the Error message and Flagreturn array($errmsg, $errflag);}}}if($_POST['submit']){
$a =new nameCheck;
$a->name = $_POST['name'];// Assign a list of variables from the firstName function
list($name, $err)= $a->firstName();// Display the values..
echo 'Name: '. $name;
echo 'Errflag: '. $err;}?><form method="post" action="<?php $_SERVER['PHP_SELF']; ?>"><input name="name"/><input type="submit" name="submit"value="submit"/></form>
Ini akan memberi Anda bidang input dan tombol kirim sekali dikirim, jika bidang input nama kosong itu akan mengembalikan bendera kesalahan dan pesan. Jika bidang nama memiliki nilai maka akan mengembalikan nilai / nama dan bendera kesalahan 0 untuk false = tidak ada kesalahan. Semoga ini membantu!
Iya dan tidak. Anda tidak bisa mengembalikan lebih dari satu variabel / objek, tetapi seperti yang Anda sarankan, Anda bisa memasukkannya ke dalam array dan mengembalikannya.
Tidak ada batasan untuk bersarang dari array, jadi Anda bisa mengemasnya sedemikian rupa untuk kembali.
Anda selalu dapat hanya mengembalikan satu variabel yang mungkin berupa array. Tetapi Anda dapat mengubah variabel global dari dalam fungsi. Itu sebagian besar waktu bukan gaya yang sangat baik, tetapi itu berhasil. Di kelas Anda biasanya mengubah varbiables kelas dari dalam fungsi tanpa mengembalikannya.
Jawabannya adalah tidak. Ketika parser mencapai pernyataan pengembalian pertama, itu akan mengarahkan kontrol kembali ke fungsi panggilan - pernyataan kembali kedua Anda tidak akan pernah dieksekusi.
Apakah Anda sadar ketika menulis ini? Sekilas saya bisa melihat 2 kesalahan. 1) Anda menggunakan $thiskata kunci namun tidak ada kelas atau objek yang disebutkan. 2) Jika Anda mengembalikan nilai ke variabel Anda $returned_values, maka Anda harus menggema dari variabel itu:echo $returned_values['var1'];
dading84
memperbaiki masalah ini.
Gihan De Silva
0
<?php
function foo(){
$you =5;
$me =10;return $you;return $me;}
echo foo();//output is just 5 alone so we cant get second one it only retuns first one so better go with arrayfunction goo(){
$you =5;
$me =10;return $you_and_me = array($you,$me);}
var_dump(goo());// var_dump result is array(2) { [0]=> int(5) [1]=> int(10) } i think thats fine enough?>
Re "dapatkan nilai dua atau lebih variabel" : Maksud Anda "mengembalikan nilai dua atau lebih variabel" ?
Peter Mortensen
0
Apakah PHP masih menggunakan "parameter keluar"? Jika demikian, Anda dapat menggunakan sintaks untuk memodifikasi satu atau lebih parameter yang masuk ke fungsi Anda. Anda kemudian akan bebas untuk menggunakan variabel yang dimodifikasi setelah fungsi Anda kembali.
publicfunction selectAllUsersByRole($userRole, $selector){
$this->userRole = $userLevel;
$this->selector = $selector;
$sql ="SELECT * FROM users WHERE role <= ? AND del_stat = 0";
$stm = $this->connect()->prepare($sql);// Connect function in Dbh connect to database file
$stm->execute([$this->userRole]);// This is PHP 7. Use array($this->userRole) for PHP 5
$usersIdArray = array();
$usersFNameArray = array();
$usersLNameArray = array();if($stm->rowCount()){while($row = $stm->fetch()){
array_push($usersIdArray, $row['id']);
array_push($usersFNameArray, $row['f_name']);
array_push($usersLNameArray, $row['l_name']);// You can return only $row['id'] or f_name or ...// I used the array because it's most used.}}if($this->selector ==1){return $usersIdArray;}elseif($this->selector ==2){return $usersFNameArray;}elseif($this->selector ==3){return $usersLNameArray;}}
Saya memiliki masalah yang sama - jadi saya mencoba dan sedikit googled (menemukan utas ini). Setelah 5 menit mencoba dan kesalahan saya menemukan bahwa Anda dapat menggunakan "DAN" untuk mengembalikan dua (mungkin lebih - belum diuji) dalam satu baris pengembalian.
Kode saya:
function get_id(){global $b_id, $f_id;// stuff happensreturn $b_id AND $f_id;}//later in the code:
get_id();
var_dump($b_id);
var_dump($f_id);// tested output by var_dump
berhasil. Saya mendapatkan kedua nilai yang saya harapkan / dapatkan. Saya harap saya bisa membantu siapa saja membaca utas ini :)
Ini tidak benar. 'DAN' hanyalah operator boolean, sehingga fungsi Anda sebenarnya mengembalikan nilai boolean tunggal. Satu-satunya alasan tampaknya berfungsi adalah karena Anda mendeklarasikan $ b_id dan $ f_id sebagai variabel global. Hapus 'DAN' serta pernyataan pengembalian sama sekali dan Anda akan melihat bahwa hasil Anda tetap sama.
Matt Styles
ini sangat menyesatkan, karena Anda menyatakan $ b_id, dan $ f_id global, karena itu tersedia dari konteks apa pun.
Jawaban:
Tidak ada cara mengembalikan 2 variabel. Meskipun, Anda dapat menyebarkan array dan mengembalikannya; buat persyaratan untuk mengembalikan variabel dinamis, dll.
Misalnya, fungsi ini akan kembali
$var2
Dalam aplikasi:
Jika Anda menginginkan keduanya, Anda dapat memodifikasi fungsinya sedikit
sumber
wantarray()
Secara teknis, Anda tidak dapat mengembalikan lebih dari satu nilai. Namun, ada beberapa cara untuk mengatasi keterbatasan itu. Cara yang paling bertindak seperti mengembalikan beberapa nilai, adalah dengan
list
kata kunci:Secara teknis, Anda mengembalikan array dan menggunakan
list
untuk menyimpan elemen-elemen array itu dalam nilai yang berbeda daripada menyimpan array yang sebenarnya. Menggunakan teknik ini akan membuatnya merasa seperti mengembalikan beberapa nilai.The
list
solusi adalah satu agak php-spesifik. Ada beberapa bahasa dengan struktur yang serupa, tetapi lebih banyak bahasa yang tidak. Ada cara lain yang biasanya digunakan untuk "mengembalikan" beberapa nilai dan tersedia dalam hampir setiap bahasa (dengan satu atau lain cara). Namun, metode ini akan terlihat sangat berbeda sehingga mungkin perlu dibiasakan.Teknik ini juga digunakan dalam beberapa fungsi yang didefinisikan oleh php itu sendiri (misalnya
$count
dalam str_replace ,$matches
dalam preg_match ). Ini mungkin terasa sangat berbeda dari mengembalikan beberapa nilai, tetapi layak setidaknya diketahui.Metode ketiga adalah menggunakan objek untuk menyimpan nilai-nilai berbeda yang Anda butuhkan. Ini lebih banyak mengetik, jadi ini tidak digunakan sesering dua metode di atas. Mungkin masuk akal untuk menggunakan ini, ketika menggunakan serangkaian variabel yang sama di sejumlah tempat (atau tentu saja, bekerja dalam bahasa yang tidak mendukung metode di atas atau memungkinkan Anda melakukan ini tanpa mengetik tambahan).
Metode di atas meringkas cara utama untuk mengembalikan beberapa nilai dari suatu fungsi. Namun, ada variasi pada metode ini. Variasi yang paling menarik untuk dilihat, adalah di mana Anda benar-benar mengembalikan array, hanya karena ada begitu banyak yang dapat Anda lakukan dengan array di PHP.
Pertama, kita bisa mengembalikan array dan tidak memperlakukannya sebagai array selain array:
Bagian yang paling menarik tentang kode di atas adalah bahwa kode di dalam fungsinya sama dengan contoh pertama yang saya berikan; hanya kode yang memanggil fungsi yang berubah. Ini berarti terserah orang yang memanggil fungsi bagaimana memperlakukan hasil yang dikembalikan fungsi.
Atau, seseorang dapat menggunakan array asosiatif:
Php memang memiliki
compact
fungsi yang memungkinkan Anda melakukan hal yang sama seperti di atas tetapi saat menulis kode lebih sedikit. (Yah, sampel tidak akan memiliki kode lebih sedikit, tetapi aplikasi dunia nyata mungkin akan.) Namun, saya pikir jumlah penghematan mengetik minimal dan itu membuat kode lebih sulit dibaca, jadi saya tidak akan melakukannya sendiri. Namun demikian, inilah contohnya:Perlu dicatat bahwa walaupun
compact
memiliki mitra dalamextract
yang dapat digunakan dalam kode panggilan di sini, tetapi karena itu ide yang buruk untuk menggunakannya (terutama untuk sesuatu yang sederhana seperti ini) saya bahkan tidak akan memberikan sampel untuk itu. Masalahnya adalah ia akan melakukan "sihir" dan membuat variabel untuk Anda, sementara Anda tidak dapat melihat variabel mana yang dibuat tanpa pergi ke bagian lain dari kode.Akhirnya, saya ingin menyebutkan bahwa
list
tidak benar - benar bermain dengan baik dengan array asosiatif. Berikut ini akan melakukan apa yang Anda harapkan:Namun, berikut ini akan melakukan sesuatu yang berbeda:
Jika Anda menggunakan
list
array asosiatif, dan orang lain harus mengubah kode dalam fungsi yang disebut di masa mendatang (yang mungkin terjadi pada situasi apa pun) mungkin tiba-tiba rusak, jadi saya akan merekomendasikan untuk tidak menggabungkanlist
dengan array asosiatif.sumber
return array('x' => $x, 'y' => $y, 'z' => $z)
pembersih, tetapi ke titik di mana saya akan menulis sendiri, bukan ke titik di mana saya akan meminta orang lain untuk menggunakan format itu.Dalam contoh Anda, pengembalian kedua tidak akan pernah terjadi - pengembalian pertama adalah hal terakhir yang dijalankan PHP. Jika Anda perlu mengembalikan beberapa nilai, kembalikan array:
sumber
list($result_1, result_2) = test($testvar);
result_2
atau$result_2
?$result_2
Sejak PHP 7.1 kita harus tepat destructuring untuk daftar. Dengan demikian Anda dapat melakukan hal-hal seperti ini:
Dalam fungsi ini akan terlihat seperti ini:
Destrukturisasi adalah alat yang sangat kuat. Itu mampu merusak kunci => pasangan nilai juga:
Lihatlah halaman fitur baru untuk PHP 7.1:
Fitur baru
sumber
Di PHP 5.5 ada juga konsep baru:, di
generators
mana Anda dapat menghasilkan beberapa nilai dari suatu fungsi:sumber
Atau Anda dapat melewati referensi:
Ini akan menghasilkan
sumber
Saya tahu bahwa saya sangat terlambat, tetapi ada solusi yang bagus dan sederhana untuk masalah ini.
Dimungkinkan untuk mengembalikan beberapa nilai sekaligus menggunakan penghancuran.
Sekarang Anda bisa menggunakan ini
extract
membuat variabel untuk setiap anggota dalam array, dinamai setelah anggota itu. Karenanya sekarang Anda dapat mengakses$model
dan$data
sumber
model
dandata
) belum ada sebagai variabel. Jika ya, gunakanprefix
parameterextract
untuk menghindari konflik.Anda dapat mengembalikan banyak array dan skalar dari suatu fungsi
sumber
Tidak mungkin memiliki dua pernyataan kembali. Namun itu tidak membuang kesalahan tetapi ketika fungsi dipanggil Anda hanya akan menerima nilai pernyataan pengembalian pertama. Kita dapat menggunakan pengembalian array untuk mendapatkan beberapa nilai sebagai balasannya. Sebagai contoh:
sumber
Fungsi, menurut definisi, hanya mengembalikan satu nilai.
Namun, seperti yang Anda asumsikan, nilai itu bisa berupa array.
Jadi Anda tentu dapat melakukan sesuatu seperti:
Yang mengatakan, ada baiknya luangkan waktu sejenak dan pikirkan apa pun yang Anda coba pecahkan. Sementara mengembalikan nilai hasil yang kompleks (seperti array, atau objek) sangat valid, jika Anda berpikir bahwa "Saya ingin mengembalikan dua nilai", Anda mungkin mendesain dengan buruk. Tanpa lebih detail dalam pertanyaan Anda, sulit untuk mengatakannya, tetapi tidak ada salahnya untuk berhenti dan berpikir dua kali.
sumber
Praktik terbaik adalah untuk meletakkan variabel Anda kembali ke dalam array dan kemudian gunakan
list()
untuk menetapkan nilai array ke variabel.sumber
Ya, Anda dapat menggunakan objek :-)
Tetapi cara paling sederhana adalah mengembalikan array:
sumber
Untuk PHP 7.1 <= Anda dapat menggunakan sintaks baru (alih-alih fungsi daftar ):
Tidak masalah bagi saya jika Anda ingin mengembalikan 2-3 variabel, jika tidak, Anda harus menggunakan objek dengan properti yang diinginkan.
sumber
Saya telah menerapkan seperti ini untuk beberapa fungsi nilai PHP nilai kembali. bersikap baiklah dengan kode Anda. Terima kasih.
sumber
Jawaban yang diberi tanda centang hijau di atas sebenarnya salah. Anda bisa mengembalikan beberapa nilai dalam PHP, jika Anda mengembalikan array. Lihat kode berikut untuk contoh:
Kode ini sebenarnya disalin dari halaman berikut di situs web PHP: http://php.net/manual/en/functions.returning-values.php Saya juga pernah menggunakan jenis kode yang sama berkali-kali, jadi dapat mengkonfirmasi bahwa itu bagus dan berhasil.
sumber
Fungsi dalam PHP hanya dapat mengembalikan satu variabel. Anda bisa menggunakan variabel dengan cakupan global, Anda bisa mengembalikan array, atau Anda bisa meneruskan variabel dengan merujuk ke fungsi dan daripada mengubah nilai, .. tetapi semua itu akan mengurangi keterbacaan kode Anda. Saya menyarankan agar Anda melihat ke kelas.
sumber
Kupikir aku akan memperluas beberapa tanggapan dari atas ....
Ini akan memberi Anda bidang input dan tombol kirim sekali dikirim, jika bidang input nama kosong itu akan mengembalikan bendera kesalahan dan pesan. Jika bidang nama memiliki nilai maka akan mengembalikan nilai / nama dan bendera kesalahan 0 untuk false = tidak ada kesalahan. Semoga ini membantu!
sumber
Beberapa mungkin lebih suka mengembalikan beberapa nilai sebagai objek:
Dan menyebutnya seperti ini:
Atau:
sumber
Iya dan tidak. Anda tidak bisa mengembalikan lebih dari satu variabel / objek, tetapi seperti yang Anda sarankan, Anda bisa memasukkannya ke dalam array dan mengembalikannya.
Tidak ada batasan untuk bersarang dari array, jadi Anda bisa mengemasnya sedemikian rupa untuk kembali.
sumber
Anda selalu dapat hanya mengembalikan satu variabel yang mungkin berupa array. Tetapi Anda dapat mengubah variabel global dari dalam fungsi. Itu sebagian besar waktu bukan gaya yang sangat baik, tetapi itu berhasil. Di kelas Anda biasanya mengubah varbiables kelas dari dalam fungsi tanpa mengembalikannya.
sumber
Jawabannya adalah tidak. Ketika parser mencapai pernyataan pengembalian pertama, itu akan mengarahkan kontrol kembali ke fungsi panggilan - pernyataan kembali kedua Anda tidak akan pernah dieksekusi.
sumber
Tambahkan semua variabel dalam array dan akhirnya kembalikan
array
.Lalu
sumber
Saya pikir eliego telah menjelaskan jawabannya dengan jelas. Tetapi jika Anda ingin mengembalikan kedua nilai, masukkan ke dalam array dan kembalikan.
// untuk mengakses nilai kembali
sumber
$this
kata kunci namun tidak ada kelas atau objek yang disebutkan. 2) Jika Anda mengembalikan nilai ke variabel Anda$returned_values
, maka Anda harus menggema dari variabel itu:echo $returned_values['var1'];
sumber
Bahasa yang memungkinkan pengembalian banyak biasanya hanya mengonversi beberapa nilai menjadi struktur data.
Misalnya, dalam Python Anda dapat mengembalikan beberapa nilai. Namun, mereka sebenarnya dikembalikan sebagai satu tuple.
Jadi, Anda dapat mengembalikan beberapa nilai dalam PHP hanya dengan membuat array sederhana dan mengembalikannya.
sumber
Anda bisa mendapatkan nilai dua atau lebih variabel dengan menyetelnya dengan referensi:
Keluaran:
sumber
Apakah PHP masih menggunakan "parameter keluar"? Jika demikian, Anda dapat menggunakan sintaks untuk memodifikasi satu atau lebih parameter yang masuk ke fungsi Anda. Anda kemudian akan bebas untuk menggunakan variabel yang dimodifikasi setelah fungsi Anda kembali.
sumber
Ini adalah cara termudah untuk melakukannya:
Bagaimana kita memanggil fungsi ini?
Itu dia. Sangat mudah.
sumber
Ini bukan cara yang baik, tapi saya pikir kita dapat mengatur dua variabel dalam suatu fungsi pada saat yang bersamaan.
sumber
Saya memiliki masalah yang sama - jadi saya mencoba dan sedikit googled (menemukan utas ini). Setelah 5 menit mencoba dan kesalahan saya menemukan bahwa Anda dapat menggunakan "DAN" untuk mengembalikan dua (mungkin lebih - belum diuji) dalam satu baris pengembalian.
Kode saya:
berhasil. Saya mendapatkan kedua nilai yang saya harapkan / dapatkan. Saya harap saya bisa membantu siapa saja membaca utas ini :)
sumber