Rumah php教程 php手册 PHP面向对象编程中的代理与异常定制(1)

PHP面向对象编程中的代理与异常定制(1)

Jun 13, 2016 am 11:03 AM
php satu dan berlakon tanah dibuat khas objek tidak normal kami meniru Sekarang daripada Mudah pengaturcaraan Untuk

一、 DBQuery对象

现在,我们的DBQuery对象简单地模仿一个存储过程—一旦被执行,即返回一个必须进行保存的结果资源;并且如果你想使用该结果集上的函数(例如num_rows()或fetch_row())的话,你必须传递MySqlDB对象。那么,如果由DBQuery对象来实现MySqlDB对象(其设计目的是对一个执行查询的结果进行操作)实现的函数,效果如何呢?让我们继续使用上一篇示例中的代码;并且让我们假定,现在由DBQuery对象管理我们的结果资源。DBQuery类的源码如列表1所示。

列表1.使用DBQuery类。

<ol class="dp-c">
<li class="alt"><span><span class="keyword">require</span><span> </span><span class="string">'mysql_db.php'</span><span>;   </span></span></li>
<li>
<span class="keyword">require_once</span><span> </span><span class="string">'query.php'</span><span>;   </span>
</li>
<li class="alt">
<span class="vars">$db</span><span> = </span><span class="keyword">new</span><span> MySqlDb;   </span>
</li>
<li>
<span class="vars">$db</span><span>->connect(</span><span class="string">'host'</span><span>, </span><span class="string">'username'</span><span>, </span><span class="string">'pass'</span><span>);   </span>
</li>
<li class="alt">
<span class="vars">$db</span><span>->query(</span><span class="string">'use content_management_system'</span><span>);   </span>
</li>
<li>
<span class="vars">$query</span><span> = </span><span class="keyword">new</span><span> DBQuery(</span><span class="vars">$db</span><span>);   </span>
</li>
<li class="alt">
<span class="vars">$query</span><span>->prepare(</span><span class="string">'SELECT fname,sname FROM users WHERE username=:1S AND pword=:2S AND expire_time<:3i><span>);   </span><li><span>try {   </span></li>
<li class="alt">
<span> </span><span class="keyword">if</span><span>(</span><span class="vars">$query</span><span>->execute(</span><span class="string">"visualad"</span><span>, </span><span class="string">"apron"</span><span>, time()))->num_rows() == 1) {   </span>
</li>
<li>
<span></span><span class="func">echo</span><span>(</span><span class="string">'Correct Credentials'</span><span>);   </span>
</li>
<li class="alt">
<span> } </span><span class="keyword">else</span><span> {   </span>
</li>
<li>
<span></span><span class="func">echo</span><span>(</span><span class="string">'Incorrect Credentials / Session Expired'</span><span>);   </span>
</li>
<li class="alt"><span> }   </span></li>
<li>
<span>} catch (QueryException </span><span class="vars">$e</span><span>) {   </span>
</li>
<li class="alt">
<span> </span><span class="func">echo</span><span>(</span><span class="string">'Error executing query: '</span><span> . </span><span class="vars">$e</span><span>);   </span>
</li>
<li><span>}   </span></li></:3i></span>
</li>
</ol>
Salin selepas log masuk

上面修改后的代码中我们最感兴趣的是,catch语句和execute语句。

◆execute语句不再返回一个结果资源,现在它返回DBQuery对象本身。

◆DBQuery对象现在实现num_rows()函数—我们从DB接口中已经熟悉。

◆如果查询执行失败,它抛出一个QueryException类型的异常。当被转换成一个字符串时,它将返回发生的错误的细节信息。

为此,你需要使用PHP代理。事实上,你在我们的DBQuery对象中已经使用代理了,但是现在将更为深入地使用它来把它与MySqlDB对象紧密绑定。该DBQuery对象已经被使用一个实现DB接口的对象初始化,并且它已经包含一个成员函数execute—由它调用DB对象的query()方法来执行该查询。这个DBQuery对象本身并不实际地查询数据库,它把这项任务交由DB对象来完成。这就是代理,其实是一个进程—借助于这个进程,通过把消息发送给另一个实现相同的或类似行为的对象,一个对象可以实现一个特别的行为。

为此,你需要修改DBQuery对象以便包括所有的函数—它们操作一个来自DB对象的结果资源。当执行查询以调用DB对象的相应函数并且返回它的结果时,你需要使用存储的结果。下列函数将被添加:

列表2:使用代理扩展DBQuery类。

<ol class="dp-c">
<li class="alt"><span><span class="keyword">class</span><span> DBQuery   </span></span></li>
<li><span>{   </span></li>
<li class="alt"><span> .....   </span></li>
<li><span> </span></li>
<li class="alt">
<span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> fetch_array()   </span>
</li>
<li><span> {    </span></li>
<li class="alt">
<span></span><span class="keyword">if</span><span> (! </span><span class="func">is_resource</span><span>(</span><span class="vars">$this</span><span>->result)) {   </span>
</li>
<li>
<span> </span><span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(</span><span class="string">'Query not executed.'</span><span>);   </span>
</li>
<li class="alt"><span>}   </span></li>
<li><span> </span></li>
<li class="alt">
<span></span><span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->db->fetch_array(</span><span class="vars">$this</span><span>->result);   </span>
</li>
<li><span> }   </span></li>
<li class="alt"><span> </span></li>
<li>
<span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> fetch_row()   </span>
</li>
<li class="alt"><span> {   </span></li>
<li>
<span></span><span class="keyword">if</span><span> (! </span><span class="func">is_resource</span><span>(</span><span class="vars">$this</span><span>->result)) {   </span>
</li>
<li class="alt">
<span> </span><span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(</span><span class="string">'Query not executed.'</span><span>);   </span>
</li>
<li><span>}   </span></li>
<li class="alt"><span> </span></li>
<li>
<span></span><span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->db->fetch_row(</span><span class="vars">$this</span><span>->result);   </span>
</li>
<li class="alt"><span> }   </span></li>
<li><span> </span></li>
<li class="alt">
<span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> fetch_assoc()   </span>
</li>
<li><span> {   </span></li>
<li class="alt">
<span></span><span class="keyword">if</span><span> (! </span><span class="func">is_resource</span><span>(</span><span class="vars">$this</span><span>->result)) {   </span>
</li>
<li>
<span> </span><span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(</span><span class="string">'Query not executed.'</span><span>);   </span>
</li>
<li class="alt"><span>}   </span></li>
<li><span> </span></li>
<li class="alt">
<span></span><span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->db->fetch_assoc(</span><span class="vars">$this</span><span>->result);   </span>
</li>
<li><span> }   </span></li>
<li class="alt"><span> </span></li>
<li>
<span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> fetch_object()   </span>
</li>
<li class="alt"><span> {   </span></li>
<li>
<span></span><span class="keyword">if</span><span> (! </span><span class="func">is_resource</span><span>(</span><span class="vars">$this</span><span>->result)) {   </span>
</li>
<li class="alt">
<span> </span><span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(</span><span class="string">'Query not executed.'</span><span>);   </span>
</li>
<li><span>}   </span></li>
<li class="alt"><span> </span></li>
<li>
<span></span><span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->db->fetch_object(</span><span class="vars">$this</span><span>->result);   </span>
</li>
<li class="alt"><span> }   </span></li>
<li><span> </span></li>
<li class="alt">
<span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> num_rows()   </span>
</li>
<li><span> {   </span></li>
<li class="alt">
<span></span><span class="keyword">if</span><span> (! </span><span class="func">is_resource</span><span>(</span><span class="vars">$this</span><span>->result)) {   </span>
</li>
<li>
<span> </span><span class="keyword">throw</span><span> </span><span class="keyword">new</span><span> Exception(</span><span class="string">'Query not executed.'</span><span>);   </span>
</li>
<li class="alt"><span>}   </span></li>
<li><span> </span></li>
<li class="alt">
<span></span><span class="keyword">return</span><span> </span><span class="vars">$this</span><span>->db->num_rows(</span><span class="vars">$this</span><span>->result);   </span>
</li>
<li><span> }   </span></li>
<li class="alt"><span>}  </span></li>
</ol>
Salin selepas log masuk

每个函数的实现相当简单。它首先进行检查,以确保已经执行查询,然后把任务代理到DB对象,返回它的结果就好象它是查询对象本身(称作是基本数据库函数)一样。 1

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Kunci Pengekodan: Membuka Kunci Kuasa Python untuk Pemula Kunci Pengekodan: Membuka Kunci Kuasa Python untuk Pemula Oct 11, 2024 pm 12:17 PM

Python ialah bahasa pengenalan pengaturcaraan yang ideal untuk pemula melalui kemudahan pembelajaran dan ciri yang berkuasa. Asasnya termasuk: Pembolehubah: digunakan untuk menyimpan data (nombor, rentetan, senarai, dll.). Jenis data: Mentakrifkan jenis data dalam pembolehubah (integer, titik terapung, dll.). Operator: digunakan untuk operasi matematik dan perbandingan. Aliran kawalan: Kawal aliran pelaksanaan kod (penyataan bersyarat, gelung).

Java Made Simple: Panduan Pemula untuk Kuasa Pengaturcaraan Java Made Simple: Panduan Pemula untuk Kuasa Pengaturcaraan Oct 11, 2024 pm 06:30 PM

Java Made Simple: Panduan Permulaan untuk Kuasa Pengaturcaraan Pengenalan Java ialah bahasa pengaturcaraan berkuasa yang digunakan dalam segala-galanya daripada aplikasi mudah alih hingga sistem peringkat perusahaan. Untuk pemula, sintaks Java adalah ringkas dan mudah difahami, menjadikannya pilihan ideal untuk pembelajaran pengaturcaraan. Sintaks Asas Java menggunakan paradigma pengaturcaraan berorientasikan objek berasaskan kelas. Kelas ialah templat yang menyusun data dan tingkah laku yang berkaitan bersama-sama. Berikut ialah contoh kelas Java yang mudah: publicclassPerson{privateStringname;privateintage;

Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Oct 13, 2024 pm 01:32 PM

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.

Demystifying C: Laluan Yang Jelas dan Mudah untuk Pengaturcara Baharu Demystifying C: Laluan Yang Jelas dan Mudah untuk Pengaturcara Baharu Oct 11, 2024 pm 10:47 PM

C ialah pilihan ideal untuk pemula untuk mempelajari pengaturcaraan sistem Ia mengandungi komponen berikut: fail pengepala, fungsi dan fungsi utama. Program C mudah yang boleh mencetak "HelloWorld" memerlukan fail pengepala yang mengandungi pengisytiharan fungsi input/output standard dan menggunakan fungsi printf dalam fungsi utama untuk mencetak. Program C boleh disusun dan dijalankan dengan menggunakan pengkompil GCC. Selepas anda menguasai asas, anda boleh beralih kepada topik seperti jenis data, fungsi, tatasusunan dan pengendalian fail untuk menjadi pengaturcara C yang mahir.

See all articles