Rumah php教程 php手册 第九节--绑定

第九节--绑定

Jun 13, 2016 pm 12:36 PM
mengikat

*
+-------------------------------------------------------------------------------+
| = 本文为Haohappy读> 
| = 中Classes and Objects一章的笔记 
| = 翻译为主+个人心得 
| = 为避免可能发生的不必要的麻烦请勿转载,谢谢 
| = 欢迎批评指正,希望和所有PHP爱好者共同进步! 
| = PHP5研究中心: http://blog.csdn.net/haohappy2004
+-------------------------------------------------------------------------------+
*/
第九节--绑定
除了限制访问,访问方式也决定哪个方法将被子类调用或哪个属性将被子类访问. 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定. 
在计算机语言中有两种主要的绑定方式—静态绑定和动态绑定. 静态绑定发生于数据结构和数据结构间,程序执行之前. 静态绑定发生于编译期, 因此不能利用任何运行期的信息. 它针对函数调用与函数的主体,或变量与内存中的区块. 因为PHP是一种动态语言,它不使用静态绑定. 但是可以模拟静态绑定.
动态绑定则针对运行期产生的访问请求,只用到运行期的可用信息. 在面向对象的代码中,动态绑定意味着决定哪个方法被调用或哪个属性被访问,将基于这个类本身而不基于访问范围.
Public和protected成员的动作类似于PHP的前几个版本中函数的动作,使用动态绑定. 这意味着如果一个方法访问一个在子类中被覆写的类成员,并是一个子类的实例,子类的成员将被访问(而不是访问父类中的成员).
看例子6.10. 这段代码输出” Hey! I am Son.” 因为当PHP调用getSalutation, 是一个Son的实例,是将Father中的salutation覆写而来. 如果salutation是public的,PHP将产生相同的结果. 覆写方法的操作很类似.在Son中,对于identify的调用绑定到那个方法.
即使在子类中访问方式被从protected削弱成public, 动态绑定仍然会发生. 按照访问方式使用的原则,增强对于类成员的访问限制是不可能的. 所以把访问方式从public改变成protected不可能进行.
Listing 6.10 Dynamic binding 动态绑定

复制代码 代码如下:

   class Father  
   {  
       protected $salutation = "Hello there!"; //问候  
       public function getSalutation()  
       {  
           print("$this->salutation\n");  
           $this->identify();  
       }  
       protected function identify()  
       {  
           print("I am Father.
\n");  
       }  
   };  
   class Son extends Father  
   {  
       protected $salutation = "Hey!";  //父类中的protected $salutation 被覆写  
       protected function identify()    //父类中的protected identify() 被覆写  
       {  
           print("I am Son.
\n");  
       }  
   };  
   $obj = new Son();  
   $obj->getSalutation();  //输出Hey! I am Son.  
?>  

//注: 在子类中没有覆写getSalutation(),但实际上仍然存在一个getSalutation().这个类中的$salutation和identify()
//与Son子类的实例中的getSalutation()方法动态绑定,所以调用Son的实例的getSalutation()方法,
//将调用Son类中的成员salutation及identify(),而不是父类中的成员salutation及identify().
Private成员只存在于它们所在的类内部. 不像public和protected成员那样,PHP模拟静态绑定. 看例子6.11. 它输出”Hello there! I am Father.”,尽管子类覆写了salutation的值. 脚本将this->salutation和当前类Father绑定. 类似的原则应用于private方法identify().
Listing 6.11 Binding and private members

复制代码 代码如下:

   class Father  
   {  
       private $salutation = "Hello there!";  
       public function getSalutation()  
       {  
           print("$this->salutation\n");  
           $this->identify();  
       }  
       private function identify()  
       {  
           print("I am Father.
\n");  
       }  
   }  
   class Son extends Father  
   {  
       private $salutation = "Hey!";  
       private function identify()  
       {  
           print("I am Son.
\n");  
       }  
   }  
   $obj = new Son();  
   $obj->getSalutation(); //输出Hello there! I am Father.  
?> 

动态绑定的好处是允许继承类来改变父类的行为,同时可以保持父类的接口和功能. 看例子6.12. 由于使用了动态绑定,在deleteUser中被调用的isAuthorized的version 可以由对象的类型来确定. 如果是一个普通的user,PHP调用User::isAuthorized会返回FALSE.如果是一个AuthorizedUser的实例,PHP调用AuthorizedUser::isAuthorized,将允许deleteUser顺利执行.
//haohappy注:用一句话说清楚,就是对象类型与方法,属性绑定. 调用一个父类与子类中都存在的方法或访问一个属性时,会先判断实例属于哪种对象类型,再调用相应的类中的方法和属性.
Listing 6.12 动态绑定的好处 

复制代码 代码如下:

   class User //用户  
   {  
       protected function isAuthorized()  //是否是验证用户  
       {  
           return(FALSE);  
       }  
       public function getName()  //获得名字  
       {  
           return($this->name);  
       }  
       public function deleteUser($username) //删除用户  
       {  
           if(!$this->isAuthorized())  
           {  
               print("You are not authorized.
\n");  
               return(FALSE);  
           }  
           //delete the user  
           print("User deleted.
\n");  
       }  
   }  
   class AuthorizedUser extends User //认证用户  
   {  
       protected function isAuthorized() //覆写isAuthorized()  
       {  
           return(TRUE);  
       }  
   }  
   $user = new User;  
   $admin = new AuthorizedUser;  
   //not authorized  
   $user->deleteUser("Zeev");  
   //authorized  
   $admin->deleteUser("Zeev");  
?>  

为什么private的类成员模拟静态绑定? 为了回答这个问题, 你需要回忆一下为什么需要有private成员.什么时候用它们来代替protected成员是有意义的?
private成员只有当你不想让子类继承改变或特殊化父类的行为时才用到. 这种情况比你想像的要少. 通常来说,一个好的对象分层结构应当允许绝大多数功能被子类特殊化,改进,或改变—这是面向对象编程的基础之一. 一定的情况下需要private方法或变量,例如当你确信你不想允许子类改变父类中的某个特定的部份. 
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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 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)

Bolehkah dua akaun WeChat diikat pada kad bank yang sama? Bolehkah dua akaun WeChat diikat pada kad bank yang sama? Aug 25, 2023 pm 03:13 PM

Dua akaun WeChat tidak boleh terikat pada kad bank yang sama. Ikat kad bank ke akaun WeChat: 1. Buka aplikasi WeChat, klik pilihan "Saya", dan kemudian pilih pilihan "Bayar" 2. Pilih pilihan "Tambah Kad Bank" dan masukkan maklumat kad bank seperti yang digesa ; 3. Setelah kad bank berjaya diikat, pengguna boleh menggunakan kad bank untuk membuat pembayaran dan pemindahan dalam WeChat.

Bagaimana untuk melaksanakan jadual boleh diedit dalam Vue Bagaimana untuk melaksanakan jadual boleh diedit dalam Vue Nov 08, 2023 pm 12:51 PM

Jadual adalah komponen penting dalam banyak aplikasi web. Jadual biasanya mempunyai jumlah data yang besar, jadi jadual memerlukan beberapa ciri khusus untuk meningkatkan pengalaman pengguna. Salah satu ciri penting ialah keboleheditan. Dalam artikel ini, kami akan meneroka cara melaksanakan jadual boleh diedit menggunakan Vue.js dan memberikan contoh kod khusus. Langkah 1: Sediakan data Mula-mula, kita perlu menyediakan data untuk jadual. Kita boleh menggunakan objek JSON untuk menyimpan data jadual dan menyimpannya dalam sifat data bagi contoh Vue. Dalam kes ini

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Apr 26, 2024 am 09:40 AM

MetaMask (juga dipanggil Little Fox Wallet dalam bahasa Cina) ialah perisian dompet penyulitan percuma dan diterima baik. Pada masa ini, BTCC menyokong pengikatan pada dompet MetaMask Selepas mengikat, anda boleh menggunakan dompet MetaMask untuk log masuk dengan cepat, menyimpan nilai, membeli syiling, dsb., dan anda juga boleh mendapatkan bonus percubaan 20 USDT untuk pengikatan pertama. Dalam tutorial dompet BTCCMetaMask, kami akan memperkenalkan secara terperinci cara mendaftar dan menggunakan MetaMask, dan cara mengikat dan menggunakan dompet Little Fox dalam BTCC. Apakah dompet MetaMask? Dengan lebih 30 juta pengguna, MetaMask Little Fox Wallet ialah salah satu dompet mata wang kripto yang paling popular hari ini. Ia percuma untuk digunakan dan boleh dipasang pada rangkaian sebagai sambungan

Bagaimana untuk mengikat sub-akaun pada Xiaohongshu? Bagaimanakah ia menyemak sama ada akaun itu normal? Bagaimana untuk mengikat sub-akaun pada Xiaohongshu? Bagaimanakah ia menyemak sama ada akaun itu normal? Mar 21, 2024 pm 10:11 PM

Dalam era ledakan maklumat hari ini, pembinaan jenama peribadi dan imej korporat telah menjadi semakin penting. Sebagai platform perkongsian kehidupan fesyen terkemuka di China, Xiaohongshu telah menarik sejumlah besar perhatian dan penyertaan pengguna. Bagi pengguna yang ingin mengembangkan pengaruh mereka dan meningkatkan kecekapan penyebaran kandungan, sub-akaun yang mengikat telah menjadi cara yang berkesan. Jadi, bagaimanakah Xiaohongshu mengikat sub-akaun? Bagaimana untuk menyemak sama ada akaun itu normal? Artikel ini akan menjawab soalan-soalan ini untuk anda secara terperinci. 1. Bagaimana untuk mengikat sub-akaun pada Xiaohongshu? 1. Log masuk ke akaun utama anda: Pertama, anda perlu log masuk ke akaun utama Xiaohongshu anda. 2. Buka menu tetapan: klik "Saya" di penjuru kanan sebelah atas, dan kemudian pilih "Tetapan". 3. Masukkan pengurusan akaun: Dalam menu tetapan, cari pilihan "Pengurusan Akaun" atau "Pembantu Akaun" dan klik

Langkah dan kaedah untuk mengikat Douyin dalam Toutiao Langkah dan kaedah untuk mengikat Douyin dalam Toutiao Mar 22, 2024 pm 05:56 PM

1. Buka Toutiao. 2. Klik Saya di penjuru kanan sebelah bawah. 3. Klik [System Settings]. 4. Klik [Tetapan Akaun dan Privasi]. 5. Klik butang di sebelah kanan [Douyin] untuk mengikat Douyin.

Bagaimana untuk mengikat apl Cainiao ke Pinduoduo? Bagaimana untuk menambah Cainiao Wrap ke platform Pinduoduo? Bagaimana untuk mengikat apl Cainiao ke Pinduoduo? Bagaimana untuk menambah Cainiao Wrap ke platform Pinduoduo? Mar 19, 2024 pm 02:30 PM

Aplikasi Cainiao ialah platform yang boleh memberikan anda pelbagai maklumat logistik Fungsi di sini sangat berkuasa dan mudah digunakan Jika anda mempunyai sebarang masalah berkaitan logistik, ia boleh diselesaikan di sini -perkhidmatan berhenti boleh menyelesaikan segala-galanya dalam masa Menyemak penghantaran ekspres, mengambil penghantaran ekspres, dan lain-lain semuanya tanpa sebarang masalah. Kami telah bekerjasama dengan pelbagai platform dan semua maklumat boleh ditanya Mungkin berlaku bahawa barang yang dibeli di Pinduoduo tidak dapat memaparkan maklumat logistik Sebenarnya, anda perlu mengikat Pinduoduo secara manual untuk mencapai ini. Cara mengikat Cainiao ke akaun Pinduoduo: 1. Buka APP Cainiao dan pergi ke halaman utama

Bagaimana untuk mengikat APP Cainiao kepada Pinduoduo Bagaimana untuk mengikat APP Cainiao kepada Pinduoduo Bagaimana untuk mengikat APP Cainiao kepada Pinduoduo Bagaimana untuk mengikat APP Cainiao kepada Pinduoduo Mar 19, 2024 pm 05:16 PM

Adakah anda tahu cara mengikat Pinduoduo apabila menggunakan Cainiao Wrap App versi rasmi Cainiao Wrap tidak menyegerakkan beberapa maklumat logistik Pinduoduo pada platform ini. Apa yang perlu kami lakukan ialah Anda boleh menyalin nombor pesanan atau menyemak telefon bimbit anda untuk melihat jika ada sebarang maklumat penghantaran ekspres. Sudah tentu, ini semua perlu diselesaikan secara manual Jika anda ingin mengetahui lebih lanjut, datang dan lihat dengan editor. Cara mengikat APP Cainiao ke Pinduoduo 1. Buka APP Cainiao dan klik "Panduan Pakej" di penjuru kiri sebelah atas halaman utama. 2. Dalam antara muka, terdapat banyak laman web membeli-belah, dan akaun boleh diikat. 3. Klik untuk mengimport platform e-dagang lain. 4. Keizinan pengguna: Klik Pinduoduo untuk pergi ke antara muka

Bagaimana untuk mengikat aplikasi kereta Xiaomi pada peranti longgokan pengecasan Bagaimana untuk mengikat aplikasi kereta Xiaomi pada peranti longgokan pengecasan Apr 01, 2024 pm 06:52 PM

Kereta model Mi su7 terbaru yang dilancarkan oleh Xiaomi telah mendominasi pelbagai senarai carian hangat Ramai pengguna yang kebetulan ingin membeli kereta telah memilih kereta model Xiaomi su7 untuk pembelian Jadi bagaimana anda menggunakan aplikasi kereta Xiaomi anda untuk mengikat kereta selepas memilih Jika anda memutuskan untuk menggunakan longgokan pengecasan rumah untuk mengecas, panduan tutorial ini akan memberi anda pengenalan terperinci, saya harap ia dapat membantu anda. Mula-mula, kami membuka aplikasi mudah alih Xiaomi, klik butang Saya di sudut kanan bawah, dan kemudian dalam antara muka Saya, anda boleh melihat pilihan longgokan pengecasan rumah Selepas memasuki halaman yang mengikat longgokan pengecasan, klik kod imbasan butang di bawah dan imbas kod QR pada longgokan pengecasan Kod QR boleh digunakan untuk mengikat longgokan pengecasan pada apl.

See all articles