Bagaimana cara meneruskan data dengan cara berorientasi objek di PHP?

11

Saya menemukan bahwa bahkan ketika bekerja dengan kerangka kerja MVC (misalnya CodeIgniter), saya secara teratur menggunakan nested array daripada objek.

Ini tidak mengikuti pemahaman saya tentang berorientasi objek dengan baik. Sebagai contoh, jika saya akan mem-port kode ke Java maka saya tidak akan bermimpi melewati array (atau Vektor, atau apa pun) sekitar seperti itu.

Saya bertanya-tanya apakah ini cara yang tepat untuk menangani data. Apakah ada alasan mengapa array dilewatkan seperti ini di PHP, atau mengapa objek tidak digunakan? Apa cara terbaik untuk menyampaikan data?

Matius
sumber

Jawaban:

8

Jangan bingung Java OO dengan PHP. Java adalah bahasa paradigma tunggal yang artinya hanya OO. PHP di sisi lain adalah bahasa multi-paradigma, Anda dapat melakukan pemrograman fungsional atau OO atau keduanya.

Sekarang tidak ada implementasi OO yang "buruk". OO Java bukan implementasi definitif yang harus atau harus diikuti oleh setiap bahasa lainnya. Ada beberapa konsep definitif, dan kedua bahasa sepenuhnya mengimplementasikannya dengan caranya sendiri (Java sejak awal, PHP sejak versi 5).

Jadi, untuk menjawab pertanyaan Anda: Apa yang CI lakukan dan apa yang Anda lakukan dengannya benar di dunia PHP. Array PHP adalah salah satu struktur yang paling fleksibel dan berguna dan sebenarnya adalah hal yang baik untuk menggunakan array pada objek ketika data Anda hanya informasi (jangan membawa logika dengannya). Kode OO sepenuhnya tidak sama dengan "hanya kode OO".

Jika Anda memulai dengan PHP, gunakan Java sebagai referensi untuk praktik OO yang baik tetapi jangan membatasi pemahaman Anda tentang PHP karena hal "Java melakukannya secara berbeda". Anda dapat benar-benar mengacaukan keduanya, paradigma tidak akan menyelamatkan Anda jika Anda tidak mendapatkan konsep.

Jika bagaimanapun Anda menemukan Java lebih sesuai dengan keinginan Anda (sebagai preferensi pribadi) jangan memeriksa Ruby untuk pengembangan web, mereka sedikit lebih dekat terkait.

yannis
sumber
Mengapa kita tidak perlu membingungkan Java OO dengan PHP OO? Mereka hampir sama, kecuali bahwa PHP memiliki array asli / hash datatype.
Martin Wickman
Implementasinya sangat mirip. Saya merujuk pada bagaimana mereka digunakan dalam kedua bahasa.
yannis
Saya memiliki masalah di OOP. Saya ingin membuat desain OOP untuk aplikasi (basis PHP), di mana satu objek akan tergantung pada objek lain. Bagaimana saya menangani ini di PHP? tolong bantu saya ...
Imran Khan
Skenario Contoh: Objek hotel memiliki objek Kamar, di mana objek kamar harus objek Tanggal ... dan objek Tanggal memiliki harga untuk tipe orang. Sekarang bagaimana menangani skenario jenis ini dalam PHP dengan basis OOP (karena ada data besar yang perlu diproses pada setiap level).
Imran Khan
@Walter saya menunggu tanggapan Anda .... tolong bantu saya.
Imran Khan
2

Menggunakan objek bukan array hanya karena objek bukan paradigma OO, itu hanya preferensi pribadi :)

Objek memberikan penyelesaian kode praktis dalam IDE, antarmuka (tipe hinting) dan pewarisan dapat digunakan.

Jika Anda ingin menggunakan objek bukan array karena Anda melihat manfaatnya - gunakan itu, tetapi jika Anda ingin menggunakannya hanya karena objek - jangan buang waktu Anda ke refactoring ini :)

ONS_
sumber
" penggunaan objek seperti halnya array akan mengambil lebih banyak memori dan CPU. " Ini tidak (selalu) benar. Objek yang memegang jumlah data yang sama dengan array akan menempati jumlah memori yang hampir sama persis.
yannis
@Yannis Rizos, ya, objek bahkan dapat menggunakan lebih sedikit memori, diedit.
OZ_
Ini bukan hanya karena mereka dapat menggunakan lebih sedikit memori, tetapi bahwa penggunaan memori mereka tidak relevan karena itu sepele dibandingkan dengan aspek kinerja memori lain dari sistem dan untuk manfaat menggunakan objek. Jika kita sangat memperhatikan penggunaan memori, kita tidak akan pernah menggunakan objek. Apa yang kita pedulikan adalah bahwa objek memberi kita alat yang lebih baik untuk alasan dan membangun sistem.
Rein Henrichs
@Rein Henrichs, saya tahu itu, terima kasih. Itu sebabnya semua kata tentang 'memori' dihapus dari jawaban saya. Saya tidak mencoba melakukan optimasi konyol, tapi saya yakin objects just because they are objectsbukan alasan untuk refactoring :) Baca jawaban saya, bukan hanya komentar.
OZ_
cukup adil, saya berkomentar sebelum suntingan.
Rein Henrichs
1

Anda tidak benar-benar melewatkan data di dalam sistem OO - Anda melewatkan benda di sekitar. Perbedaannya adalah bahwa objek berisi perilaku serta data. Itulah sebabnya mereka menyebutnya berorientasi objek dan bukan berorientasi data.

Selama Anda tidak memerlukan perilaku dengan data Anda, maka array php biasa adalah sama baiknya (atau buruk, tergantung pada sudut pandang Anda) sebagai objek nilai.

Martin Wickman
sumber
0

Saya pikir ini hanya masalah penyesuaian - ada banyak implementasi "objek" dalam pemrograman - Python dan Javascript memiliki sifat yang sangat berbeda. PHP OO bisa dibilang hack - array PHP bukan "objek" dalam arti tradisional - tetapi mereka melayani tujuan yang jelas. Kecuali jika Anda ingin data memiliki PERILAKU kustom lalu mengapa menggunakan objek?

EDIT:

re: objek nilai yang tidak berubah

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/

sunwukung
sumber
Untuk memberikan data struktur yang andal. Yap, saya dapat membangun fungsi yang menghasilkan format / nesting array tertentu, tetapi siapa bilang saya tidak menulis fungsi lain yang sedikit memodifikasinya lalu meneruskannya.
Matius
1
yakin - maka Anda akan memerlukan objek untuk melindungi akses variabel - karena tidak ada padanan PHP dari Python tuple misalnya. Tapi begitulah - Anda telah menentukan masalahnya, Anda hanya harus menggunakan konstruksi yang tersedia untuk bahasa ... atau hanya belajar untuk hidup dengan "kebiasaan" itu. Saya telah menambahkan tautan ke posting awal saya yang memiliki diskusi menarik tentang masalah tersebut.
sunwukung