Abstrak: Pada artikel ini, penulis menunjukkan kepada kita berbagai teknologi OOP canggih di PHP melalui contoh berdasarkan pemahamannya tentang konsep OOP
, maka saya Anda akan diperlihatkan teknik yang lebih maju.
Serialisasi (Serializing)
PHP tidak mendukung objek persisten. Dalam OOP, objek persisten adalah objek yang dapat mempertahankan status dan fungsionalitas di antara referensi dalam beberapa aplikasi keberatan nanti. Inilah yang disebut mekanisme serialisasi. PHP memiliki metode serialisasi yang dapat dipanggil pada suatu objek, dan metode serialisasi dapat mengembalikan representasi string dari objek tersebut. Namun, serialisasi hanya menyimpan data anggota objek dan bukan metodenya.
Di PHP4, jika Anda membuat serial objek menjadi string $s, lalu melepaskan objek, lalu melakukan deserialisasi objek menjadi $obj, Anda dapat terus menggunakan metode objek! Saya tidak menyarankan melakukan ini karena (a) tidak ada jaminan dalam dokumentasi bahwa perilaku ini akan tetap berfungsi di versi mendatang. (b) Hal ini dapat menyebabkan kesalahpahaman ketika Anda menyimpan versi serial ke disk dan keluar dari skrip. Ketika Anda menjalankan skrip ini nanti, Anda tidak dapat berharap bahwa ketika Anda melakukan deserialisasi suatu objek, metode objek tersebut akan ada di sana, karena representasi string tidak menyertakan metode sama sekali.
Secara keseluruhan, serialisasi di PHP sangat berguna untuk menyimpan variabel anggota suatu objek. (Anda juga dapat membuat serial array dan array terkait ke dalam file).
Contoh:
<?php
$obj=new Classfoo();
$str=serialize($obj);
//Simpan $str ke disk
//Beberapa bulan kemudian
//Muat str dari disk
$obj2=batalkan serialisasi($str)
Anda memulihkan data anggota, tetapi bukan metodenya (menurut dokumentasi). Ini menghasilkan satu-satunya cara untuk mengakses variabel anggota (Anda tidak punya cara lain!) dengan sesuatu seperti menggunakan $obj2->x, jadi jangan mencobanya di rumah.
Ada beberapa cara untuk mengatasi masalah ini, saya mengabaikannya karena terlalu buruk untuk artikel singkat ini. Saya dengan senang hati akan menyambut fitur-fitur yang sepenuhnya berseri di versi PHP berikutnya.
Menggunakan Kelas untuk Penyimpanan Data Salah satu hal hebat tentang PHP dan OOP adalah Anda dapat dengan mudah mendefinisikan kelas untuk melakukan sesuatu dan memanggil kelas terkait kapan pun Anda ingin menggunakannya. Misalkan Anda memiliki formulir HTML yang memungkinkan pengguna memilih produk dengan memilih nomor ID produk. Ada informasi produk di database, dan Anda ingin menampilkan produk, harganya, dll. Anda memiliki jenis produk yang berbeda, dan tindakan yang sama dapat memiliki arti yang berbeda bagi produk yang berbeda. Misalnya, menampilkan suara mungkin berarti memutarnya, namun untuk jenis produk lain, hal ini mungkin berarti menampilkan gambar yang disimpan dalam database. Anda dapat menggunakan OOP atau PHP untuk mengurangi pengkodean dan meningkatkan kualitas.
Tentukan kelas produk, tentukan metode yang seharusnya dimilikinya (misalnya: tampilan), lalu tentukan kelas untuk setiap jenis produk, yang diturunkan dari kelas produk (kelas SoundItem, kelas ViewableItem, dll.), yang mencakup metode produk dalam kelas untuk membuat mereka berperilaku seperti yang Anda inginkan.
Beri nama kelas sesuai dengan bidang jenis setiap produk dalam database. Tabel produk tipikal mungkin memiliki (bidang id, jenis, harga, deskripsi, dll.)... Kemudian dalam skrip pemrosesan, Anda dapat mengambilnya dari database Dapatkan nilai tipe dari , lalu buat instance objek bernama type:
<?php
$obj=new $type()
;
Ini adalah fitur PHP yang sangat bagus. Anda dapat memanggil metode tampilan atau metode lain dari $obj tanpa mempertimbangkan jenis objeknya. Dengan menggunakan teknik ini, Anda tidak perlu memodifikasi skrip untuk menambahkan tipe objek baru, cukup kelas untuk menanganinya.
Fungsi ini sangat kuat. Cukup definisikan metode tanpa mempertimbangkan tipe semua objek, implementasikan di kelas berbeda dengan metode berbeda, lalu gunakan dalam skrip utama untuk objek apa pun, tidak ada if...else, tidak Membutuhkan dua pemrogram, hanya bahagia.
Sekarang Anda setuju bahwa pemrograman itu mudah, perawatannya murah, dan dapat digunakan kembali itu benar?
Jika Anda mengelola sekelompok pemrogram, menugaskan pekerjaan menjadi sederhana; setiap orang mungkin bertanggung jawab atas jenis objek dan kelas yang menanganinya.
Internasionalisasi dapat dicapai melalui teknologi ini, cukup menerapkan kelas yang sesuai dengan bidang bahasa yang dipilih pengguna, dan seterusnya.
Menyalin dan Mengkloning
Saat Anda membuat objek $obj, Anda dapat menyalin objek tersebut dengan $obj2=$obj. Objek baru tersebut adalah salinan (bukan referensi) dari $obj, sehingga memiliki status $obj pada saat itu . Terkadang, Anda tidak ingin melakukan ini. Anda hanya ingin membuat objek baru seperti kelas obj. Hal ini juga dapat dicapai dalam PHP melalui serialisasi dan kelas dasar, namun semua kelas lainnya harus diturunkan dari kelas dasar.
Memasuki Zona Bahaya
Saat Anda membuat serial suatu objek, Anda mendapatkan string dalam beberapa format, yang dapat Anda interogasi jika Anda tertarik, di mana, di dalam string tersebut, terdapat nama kelas (hebat!) dan Anda dapat memasukkannya dikeluarkan seperti:
<?php
$herring=serialize($obj);
$vec=explode(':',$herring);
$nam=str_replace(""",'',$vec[2]) ;
Jadi dengan asumsi Anda membuat kelas "Semesta" dan memaksa semua kelas untuk diperluas dari alam semesta, Anda dapat mendefinisikan metode klon di alam semesta, sebagai berikut:
<?php
function clone() {
$herring=serialize($
$vec= meledak(':',$herring);
$nam=str_replace(""",'',$vec[2]);
$ret=baru $nam;
kembalikan $ret;
}
}
/ /Lalu
$obj=baru Something();
//Perluas dari Universe
$other=$obj->clone();
Yang Anda dapatkan adalah objek kelas Something baru, yang sama dengan objek yang dibuat dengan menggunakan metode baru dan memanggil konstruktor. Saya tidak tahu apakah ini akan berhasil untuk Anda, tetapi aturan praktisnya adalah kelas semesta mengetahui nama kelas turunannya. Imajinasi adalah satu-satunya batasan.
Pernyataan ini menulis waktu saat ini.