Pemrograman berorientasi objek dirancang untuk memberikan solusi untuk proyek perangkat lunak besar, terutama proyek yang melibatkan banyak orang. Ketika kode sumber bertambah hingga 10.000 baris atau lebih, setiap perubahan dapat menyebabkan efek samping yang tidak diinginkan. Hal ini terjadi ketika modul membentuk aliansi rahasia, seperti pada Eropa sebelum Perang Dunia I.
//haohappy Catatan: Artinya korelasi antar modul terlalu tinggi dan saling ketergantungan terlalu kuat. Mengubah satu modul akan menyebabkan modul lain juga ikut berubah.
Bayangkan jika modul yang menangani login memungkinkan modul pemrosesan kartu kredit untuk berbagi koneksi database-nya. Tentu saja tujuannya baik, menghemat biaya pembuatan koneksi database lain. Namun terkadang, modul pemrosesan login mengubah salah satu koneksi database. Nama variabel dapat memutuskan kesepakatan antara keduanya, menyebabkan kesalahan dalam pemrosesan modul kartu kredit, yang pada gilirannya menyebabkan kesalahan dalam modul yang memproses faktur. Semua modul yang tidak relevan dalam sistem akan segera membuat kesalahan karena itu
, saya merasa sedikit dramatis, sebagian besar programmer bersyukur atas kopling dan enkapsulasi. Kopling adalah ukuran tingkat ketergantungan antara dua modul. Semakin sedikit kopling, semakin baik dari proyek yang sudah ada dan menggunakannya di proyek lain. Digunakan dalam proyek baru.
Kami juga berharap dapat membuat perubahan skala besar dalam modul tertentu tanpa mengkhawatirkan dampaknya pada modul lain relatif independen, dan komunikasi data antar modul Lakukan melalui antarmuka. Modul tidak mengintip nama variabel satu sama lain, mereka dengan sopan mengirimkan permintaan melalui fungsi.
Enkapsulasi adalah prinsip yang dapat Anda gunakan dalam bahasa pemrograman apa pun bahasa Sangat menggoda untuk bermalas-malasan. Tidak ada yang menghentikan Anda untuk membangun WEB hipotetis melalui modul. Pemrograman berorientasi objek adalah cara bagi pemrogram untuk tidak melanggar prinsip enkapsulasi.
Dalam pemrograman berorientasi objek, modul disusun menjadi Objek-objek ini memiliki metode dan properti. Dari sudut pandang abstrak, metode adalah tindakan suatu objek, dan properti adalah karakteristik objek. Dari sudut pandang pemrograman, metode adalah fungsi dan properti adalah variabel. sistem berorientasi, setiap bagian adalah objek. Sistem terdiri dari objek dan hubungan antar objek melalui metode.
Sebuah kelas mendefinisikan properti objek. Jika Anda membuat sekumpulan objek cookie, maka kelas tersebut akan menjadi mesin cookie. Properti dan metode kelas disebut anggota. Seseorang dapat mengekspresikannya dengan mengatakan anggota data atau anggota metode.
Setiap bahasa menyediakan cara berbeda untuk mengakses objek. PHP berasal dari konsep Peminjaman C++, menyediakan tipe data untuk memuat fungsi dan variabel di bawah pengidentifikasi. Ketika PHP pertama kali dirancang, dan bahkan ketika PHP3 dikembangkan, PHP tidak dimaksudkan untuk memberikan kemampuan untuk mengembangkan proyek berskala besar yang melebihi 100.000 baris kode. Dengan pengembangan mesin PHP dan Zend, pengembangan proyek besar menjadi mungkin, tetapi tidak peduli seberapa besar proyek Anda, menulis skrip di kelas akan memungkinkan penggunaan kembali kode. Ini adalah ide yang bagus, terutama jika Anda ingin membagikan kode Anda kepada orang lain.
Ide tentang objek adalah salah satu konsep paling menarik dalam ilmu komputer. Sulit untuk menguasainya pada awalnya, tapi saya jamin begitu Anda menguasainya, berpikir dengan pikirannya akan terasa sangat alami.
Model objek PHP5
PHP5 memiliki pewarisan tunggal, akses terbatas, dan model objek yang dapat di-overload. "Pewarisan", yang akan dibahas secara rinci nanti di bab ini, mencakup hubungan induk-anak antar kelas metode. Anda dapat mendeklarasikan anggota sebagai pribadi, tidak mengizinkan akses dari kelas luar. Terakhir, PHP mengizinkan subkelas untuk membebani anggota dari kelas induknya.
Model objek PHP5 memperlakukan objek secara berbeda dari tipe data lainnya, diteruskan dengan referensi untuk secara eksplisit meneruskan dan mengembalikan objek dengan referensi. Model objek berbasis referensi akan dijelaskan secara rinci di akhir bab ini. Ini adalah fitur baru yang paling penting di PHP5.
Model objek ini lebih langsung memiliki keunggulan tambahan: peningkatan efisiensi , penggunaan memori lebih sedikit, dan fleksibilitas lebih besar.
Pada versi PHP sebelumnya, skrip menyalin objek secara default. Sekarang PHP5 hanya memindahkan pegangan, membutuhkan lebih sedikit Waktu. Peningkatan efisiensi eksekusi skrip disebabkan oleh penghindaran penyalinan yang tidak perlu pada sistem objek menghadirkan kompleksitas, juga memberikan manfaat dalam efisiensi eksekusi. Pada saat yang sama, mengurangi penyalinan berarti lebih sedikit memori yang digunakan, yang dapat dicadangkan. Hal ini membebaskan lebih banyak memori untuk operasi lain, yang juga meningkatkan efisiensi
. Perkembangan yang menggembirakan adalah dengan memungkinkan penghancuran-mengeksekusi metode kelas sebelum objek dihancurkan. Ini juga baik untuk memanfaatkan memori. Ini sangat bermanfaat, memungkinkan PHP mengetahui dengan jelas ketika tidak ada referensi ke objek, dan mengalokasikan memori bebas untuk kegunaan lain.
Transfer objek
manajemen memori PHP5
PHP5 menggunakan Zend Engine II, dan objek disimpan dalam struktur Object Store yang terpisah. Itu tidak disimpan di Zval seperti variabel umum lainnya (di PHP4, objek disimpan di Zval seperti variabel umum ). Hanya penunjuk objek yang disimpan di Zval, bukan konten (nilai). Saat kita menyalin objek atau meneruskan objek sebagai parameter ke suatu fungsi, kita tidak perlu menyalin datanya. Simpan saja penunjuk objek yang sama dan beri tahu Penyimpanan Objek bahwa objek khusus ini sekarang menunjuk melalui zval lain. Karena objek itu sendiri terletak di Object Store, perubahan apa pun yang kita lakukan terhadapnya akan memengaruhi semua struktur zval yang menyimpan penunjuk ke objek - yang diwujudkan dalam program karena perubahan apa pun pada objek target akan memengaruhi objek sumber. .Hal ini membuat objek PHP terlihat seperti selalu diteruskan dengan referensi, sehingga objek dalam PHP diteruskan dengan "referensi" secara default dan Anda tidak perlu lagi menggunakan & untuk mendeklarasikannya seperti di PHP4.
Mekanisme pengumpulan sampah
dalam beberapa bahasa, biasanya C, mengharuskan Anda untuk secara eksplisit meminta alokasi memori saat Anda membuat struktur data. Setelah Anda mengalokasikan memori, Anda dapat menyimpan informasi dalam variabel. Pada saat yang sama, Anda juga perlu melepaskan memori setelah selesai menggunakan variabel, sehingga mesin dapat mengosongkan memori untuk variabel lain dan menghindari kehabisan memori.
PHP dapat secara otomatis mengelola memori dan menghapus objek yang tidak diperlukan lagi. PHP menggunakan mekanisme pengumpulan sampah sederhana yang disebut penghitungan referensi. Setiap objek berisi penghitung referensi, dan setiap referensi yang terhubung ke objek menambah penghitung satu per satu. Ketika referensi meninggalkan ruang hidup atau diatur ke NULL, penghitung dikurangi sebesar 1. Ketika penghitung referensi suatu objek mencapai nol, PHP mengetahui bahwa Anda tidak perlu lagi menggunakan objek tersebut dan melepaskan ruang memori yang ditempatinya.
Misalnya:
<?php
Orang kelas{}
fungsi sendEmailTo(){}
$haohappy = Orang baru();
// Buat objek baru: Jumlah referensi Jumlah referensi = 1
$haohappy2 = $haohappy;
// Salin dengan referensi: Jumlah referensi = 2
tidak disetel($haohappy);
// Hapus referensi: Jumlah referensi = 1
sendEmailTo($haohappy2);
// Melewati objek dengan referensi:
// Selama eksekusi fungsi:
// Jumlah referensi = 2
//Setelah eksekusi:
// Jumlah referensi = 1
unset($haohappy2);
// Hapus referensi: Jumlah referensi = 0 Secara otomatis melepaskan ruang memori
?>