Apakah Anda memerlukan sakelar pemutus saat pengembalian digunakan?

110

Saya bertanya-tanya apakah saya perlu menggunakan "break" dalam fungsi "switch" ketika "return" digunakan.

function test($string)
{
  switch($string)
  {
    case 'test1':
      return 'Test 1: ' . $string;
    case 'test2':
      return 'Test 2: ' . $string;
  }
}

Saya sudah mencobanya, dan bekerja dengan baik tanpa "putus". Tapi saya perlu tahu apakah ini aman. Terima kasih.

EMC
sumber
1
apa yang akan terjadi jika $ string = 'testx';
Jagadeesan

Jawaban:

132

Ya, Anda dapat menggunakan returnalih-alih break...

breakbersifat opsional dan digunakan untuk mencegah " jatuh " melalui semua casepernyataan lainnya . Jadi returnbisa digunakan dengan cara yang sama, sebagai returnakhir dari eksekusi fungsi.

Juga, jika semua casepernyataan Anda seperti ini:

case 'foo':
   $result = find_result(...);
   break;

Dan setelah switchpernyataan yang baru saja Anda miliki return $result, menggunakan return find_result(...);masing case- masing akan membuat kode Anda lebih mudah dibaca.

Terakhir, jangan lupa tambahkan defaultcasingnya. Jika Anda berpikir kode Anda tidak akan pernah mencapai defaultcase maka Anda dapat menggunakan assertfungsinya, karena Anda tidak pernah bisa yakin.

insumity
sumber
Terima kasih Luzhin, itu yang saya pikirkan.
EMC
16

Anda tidak perlu istirahat, kembali menghentikan eksekusi fungsi.

(untuk referensi: http://php.net/manual/en/function.return.php mengatakan:

Jika dipanggil dari dalam suatu fungsi, pernyataan return () segera mengakhiri eksekusi fungsi saat ini

)

Nanne
sumber
4

Tidak itu tidak perlu, karena ketika kata kunci kembali dipanggil itu akan menunjukkan bahwa fungsi tertentu yang dipanggil oleh sakelar / case telah berakhir.

Gayan Hewa
sumber
3

Tidak, Anda tidak perlu breakdalam switch casepernyataan. Ini breaksebenarnya opsional, tetapi gunakan dengan hati-hati.

Tenang
sumber
2

Anda tidak membutuhkannya, tetapi saya sangat menyarankan untuk menggunakannya dalam hal apa pun sebagai praktik yang baik.

Martin Bean
sumber
6
tidak ada gunanya, karena pengembalian jelas ada dengan sendirinya saat eksekusi =) Lebih sedikit kode lebih baik.
EMC
7
Lebih sedikit kode! = Lebih baik. Pergi bermain golf kode. Saya lebih suka memiliki kode yang dapat dibaca dan eksplisit daripada kode yang dioptimalkan secara berlebihan hanya agar dapat berada dalam satu baris dengan mengorbankan keterbacaan dan pemahaman.
Martin Bean
3
Anda bisa membantahnya dengan dua cara. Beberapa kompiler memperingatkan tentang kode yang tidak dapat dieksekusi setelah kembali ke sakelar, beberapa tidak. Ini preferensi pribadi, dan bagi saya setidaknya itu diwarnai oleh berapa kali saya digigit dengan jatuh melalui sakelar, saya suka melihat jeda.
Harry
2

Istirahat hanyalah pernyataan peringatan yang digunakan untuk membatasi kontrol struktur sakelar agar tidak masuk ke kasus lain ... misalnya jika Anda memiliki tiga pernyataan kasus dan nilai untuk kasus pertama dan Anda telah menggunakan kasus tanpa struktur pemutusan apa pun maka semua kasus berikut akan dieksekusi meskipun kondisi terpenuhi hanya untuk kasus pertama ... Return dapat menjalankan fungsi asme sehingga tidak akan menjadi masalah jika Anda menggunakan return sebagai ganti break karena return akan mengambil kendali dari pernyataan switch case yang merupakan kebutuhan saat itu ...... semoga dapat membantu ....

Abimanyu Srivastava
sumber
1

return memberikan kontrol kembali ke metode pemanggilan, dimana break melompat ke instruksi pertama setelah blok saklar.

Nishant Baranwal
sumber