Jadual Kandungan
结论
Rumah pembangunan bahagian belakang tutorial php Artikel yang menerangkan maksud antara muka dan cara menggunakan antara muka untuk menulis kod PHP berkualiti tinggi

Artikel yang menerangkan maksud antara muka dan cara menggunakan antara muka untuk menulis kod PHP berkualiti tinggi

Nov 08, 2021 pm 03:43 PM
interface php

Gambaran Keseluruhan

Dalam pengekodan, terdapat perkara penting untuk memastikan kod anda boleh dibaca, diselenggara, berskala dan mudah diuji. Satu cara kita boleh memperbaiki masalah ini ialah dengan menggunakan antara muka.

Khalayak Sasaran

Artikel ini ditujukan kepada pembangun yang mempunyai pemahaman asas tentang konsep OOP (pengaturcaraan berorientasikan objek) dan warisan dalam PHP Jika anda tahu cara menggunakan warisan dalam PHP, maka ini artikel Ia akan lebih mudah untuk difahami.

Apakah itu antara muka

Pada asasnya, antara muka menerangkan perkara yang perlu dilakukan oleh kelas. Antara muka digunakan untuk memastikan mana-mana kelas yang melaksanakan antara muka mengandungi kaedah awam yang ditentukan oleh antara muka.

Antaramuka

boleh :

    digunakan untuk mentakrifkan kaedah awam dalam kelas.
  • digunakan untuk menentukan pemalar dalam kelas.
Antaramuka

tidak boleh :

    dibuat seketika secara individu.
  • digunakan untuk menentukan kaedah peribadi atau dilindungi dalam kelas.
  • digunakan untuk mentakrifkan atribut dalam kelas.
Antara muka digunakan untuk mentakrifkan kaedah awam yang harus disertakan dalam kelas. Apa yang perlu diingat ialah antara muka hanya mentakrifkan nama kaedah, parameter dan nilai pulangan, tetapi tidak termasuk badan kaedah. Ini kerana antara muka hanya digunakan untuk mentakrifkan komunikasi antara objek, bukan untuk menentukan tingkah laku khusus komunikasi antara kelas. Untuk memberikan sedikit konteks, contoh ini menunjukkan contoh antara muka yang mentakrifkan beberapa kaedah awam:

interface DownloadableReport
{
    public function getName(): string;

    public function getHeaders(): array;

    public function getData(): array;
}
Salin selepas log masuk
Salin selepas log masuk
Menurut php.net, antara muka mempunyai dua tujuan utama:

    Membenarkan pembangun untuk mencipta objek kelas berbeza yang boleh digunakan secara bergantian kerana mereka melaksanakan antara muka yang sama. Contoh biasa ialah perkhidmatan capaian pangkalan data berbilang, gerbang pembayaran berbilang atau strategi caching yang berbeza. Pelaksanaan yang berbeza boleh diganti tanpa sebarang perubahan pada kod yang menggunakannya.
  1. Membenarkan fungsi atau kaedah menerima parameter yang mematuhi antara muka dan beroperasi padanya, tanpa mempedulikan perkara lain yang boleh dilakukan oleh objek atau cara ia dilaksanakan. Antara muka ini selalunya dinamakan Iterable, Cacheable, Renderable, dsb. untuk menerangkan maksud tingkah laku. [Pembelajaran yang disyorkan: "
  2. Tutorial Video PHP"]
Menggunakan antara muka dalam PHP

Antaramuka ialah bahagian yang sangat penting dalam kod OOP (Pengaturcaraan Berorientasikan Objek) . Mereka membenarkan kami memisahkan kod kami dan meningkatkan kebolehskalaan. Sebagai contoh, mari kita lihat kelas berikut:

class BlogReport
{
    public function getName(): string
    {
        return 'Blog report';
    }
}
Salin selepas log masuk
Seperti yang anda lihat, kami telah menentukan kelas dengan kaedah yang mengembalikan rentetan. Dengan melakukan ini, kami telah menentukan gelagat kaedah, jadi kami dapat melihat cara

membina rentetan yang dikembalikan. Walau bagaimanapun, katakan kita memanggil kaedah ini daripada kod dalam kelas lain. Kelas lain tidak peduli bagaimana rentetan itu dibina, ia hanya peduli sama ada ia dikembalikan. Sebagai contoh, mari lihat cara memanggil kaedah ini dalam kelas lain: getName()

class ReportDownloadService
{
    public function downloadPDF(BlogReport $report)
    {
        $name = $report->getName();

        // 在这里下载文件...
    }
}
Salin selepas log masuk
Walaupun kod di atas sudah berfungsi, mari bayangkan bagaimana jika kita sekarang mahu memanggilnya dalam kelas

Tambah kaedah ke muat turun laporan pengguna. Sudah tentu, kami tidak boleh menggunakan kaedah yang sudah ada dalam UserReport kerana kami telah dipaksa untuk lulus dalam satu kelas ReportDownloadService sahaja. Oleh itu, kita perlu menamakan semula kaedah sedia ada dan menambah yang baru. Seperti ini: BlogReport

class ReportDownloadService
{
    public function downloadBlogReportPDF(BlogReport $report)
    {
        $name = $report->getName();

        // 在这下载文件...
    }

    public function downloadUsersReportPDF(UsersReport $report)
    {
        $name = $report->getName();

        // 在这下载文件...
    }
}
Salin selepas log masuk
Walaupun anda sebenarnya tidak dapat melihatnya, kami menganggap bahawa kaedah lain dalam kelas di atas menggunakan kod yang sama untuk membina muat turun. Kami boleh mempromosikan kod awam kepada kaedah, tetapi kami masih akan mempunyai beberapa kod awam. Di samping itu, kami mempunyai berbilang entri ke dalam kelas ini dengan kod yang hampir sama. Ini boleh mengakibatkan kerja tambahan apabila cuba melanjutkan kod atau menambah fungsi ujian pada masa hadapan.

Sebagai contoh, kami mencipta

baharu; kami kini perlu menambah kaedah AnalyticsReport baharu pada kelas ini. Pada ketika ini, anda mungkin melihat bahawa fail berkembang pesat. Ini adalah masa yang sesuai untuk menggunakan antara muka. downloadAnalyticsReportPDF()

Kami bermula dengan mencipta antara muka. Kami akan mencipta antara muka yang dipanggil

dan mentakrifkannya seperti ini: DownloadableReport

interface DownloadableReport
{
    public function getName(): string;

    public function getHeaders(): array;

    public function getData(): array;
}
Salin selepas log masuk
Salin selepas log masuk
Kami kini akan menukar

dan BlogReport untuk melaksanakan antara muka UsersReport seperti yang ditunjukkan di bawah. Saya sengaja menulis kod DownloadableReport yang salah untuk menunjukkan sesuatu. UsersReport

class BlogReport implements DownloadableReport
{
    public function getName(): string
    {
        return '博客报告';
    }

    public function getHeaders(): array
    {
        return ['头在这'];
    }

    public function getData(): array
    {
        return ['报告的数据在这里'];
    }
}
Salin selepas log masuk
class UsersReport implements DownloadableReport
{
    public function getName()
    {
        return ['用户报告'];
    }

    public function getData(): string
    {
        return '报告的数据在这里';
    }
}
Salin selepas log masuk
Jika kami cuba menjalankan kod ini, kami akan mendapat ralat kerana:

  1. 找不到 getHeaders() 方法。
  2. getName() 方法返回类型在接口中定义的方法返回值类型中。
  3. getData() 方法定义了返回类型,但和接口中定义的返回类型不同。

因此,要让 UsersReport 正确地实现 DownloadableReport 接口,我们需要作如下变动:

class UsersReport implements DownloadableReport
{
    public function getName(): string
    {
        return '用户报告';
    }

    public function getHeaders(): array
    {
       return [];
    }

    public function getData(): array
    {
        return ['报告的数据在这里'];
    }
}
Salin selepas log masuk

现在我们两个报告类都实现了相同的接口,我们可以像这样更新我们的 ReportDownloadService

class ReportDownloadService
{
    public function downloadReportPDF(DownloadableReport $report)
    {
        $name = $report->getName();

        // 在这下载文件
    }

}
Salin selepas log masuk

现在我们向 downloadReportPDF() 方法传入了 UsersReport 或 BlogReport 对象,没有任何错误出现。这是因为我们现在知道了报告类所需要的必要方法,并且报告类会按照我们预期的类型返回数据。

向方法传入接口,而不是向类传入接口,这样的结果使得 ReportDownloadService 和报告类产生松散耦合,这根据的是方法做什么,而不是如何做

如果我们想要创建一个新的 AnalyticsReport,我们需要让它实现相同的接口,然后它就会允许我们将报告类实例传入相同的 downloadReportPDF() 方法中,而不用添加其他新的方法。如果你正在构建自己的应用或框架,想要让其他开发人员有创建给他们自己的类的功能,这将非常有用。举个例子,在 Laravel 中,你可以通过实现 Illuminate\Contracts\Cache\Store 接口来创建自定义的缓存类。

除了使用接口来改进代码外,我更倾向于喜欢接口的「代码即文档」特性。举个例子,如果我想要知道一个类能做什么和不能做什么,我更喜欢在查看类之前先查看接口。它会告诉我所有可调用的方法,而不需要关心这些方法具体是怎么运行的。

对于像我这样的 Laravel 开发者来说,值得注意的一件事是,你会经常看到 接口 interface契约 contract 交替使用。根据 Laravel 文档,「Laravel 的契约是一组定义了框架提供的核心服务的接口」。因此,契约是一个接口,但接口不一定是契约。通常来说,契约只是框架提供的一个接口。有关契约的更多内容,我建议阅读一下 文档,因为我认为它在契约的理解和使用途径上有很好的见解。

结论

阅读本文后,我们希望你能简要地了解到了什么是接口,如何在 PHP 中使用接口,以及使用接口的好处。

对于我的 Laravel 开发者读者们,我下周会更新一篇新的博文,讲解如何在 Laravel 中使用接口实现桥接模式。如果你感兴趣,可以订阅我的网站更新通知,这样当我更新时,你就会收到通知。

如果这篇文章有助于你理解 PHP 接口,我期待在评论区听到你的声音。继续去创造令人惊叹的作品吧!

非常感谢  Aditya Kadam 、 Jae Toole 和 Hannah Tinkler 帮助我校对和改进这篇文章。

原文地址:https://dev.to/ashallendesign/using-interfaces-to-write-better-php-code-391f

译文地址:https://learnku.com/php/t/62228

Atas ialah kandungan terperinci Artikel yang menerangkan maksud antara muka dan cara menggunakan antara muka untuk menulis kod PHP berkualiti tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
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

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

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

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

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

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

See all articles