第九节--绑定 -- Classes and Objects in PHP5 [9]
第九节--绑定
除了限制访问,访问方式也决定哪个方法将被子类调用或哪个属性将被子类访问. 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定.
在计算机语言中有两种主要的绑定方式—静态绑定和动态绑定. 静态绑定发生于数据结构和数据结构间,程序执行之前. 静态绑定发生于编译期, 因此不能利用任何运行期的信息. 它针对函数调用与函数的主体,或变量与内存中的区块. 因为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 动态绑定
<?php class Father { protected $salutation = "Hello there!"; //问候 public function getSalutation() { print("$this->salutation "); $this->identify(); } protected function identify() { print("I am Father.<br> "); } }; class Son extends Father { protected $salutation = "Hey!"; //父类中的protected $salutation 被覆写 protected function identify() //父类中的protected identify() 被覆写 { print("I am Son.<br> "); } }; $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
<?php class Father { private $salutation = "Hello there!"; public function getSalutation() { print("$this->salutation "); $this->identify(); } private function identify() { print("I am Father.<br> "); } } class Son extends Father { private $salutation = "Hey!"; private function identify() { print("I am Son.<br> "); } } $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 动态绑定的好处
<?php 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.<br> "); return(FALSE); } //delete the user print("User deleted.<br> "); } } 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方法或变量,例如当你确信你不想允许子类改变父类中的某个特定的部份.

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Deux comptes WeChat ne peuvent pas être liés à la même carte bancaire. Lier une carte bancaire à un compte WeChat : 1. Ouvrez l'application WeChat, cliquez sur l'option « Moi », puis sélectionnez l'option « Payer » 2. Sélectionnez l'option « Ajouter une carte bancaire » et saisissez les informations de la carte bancaire comme demandé ; 3. Une fois la carte bancaire liée avec succès, les utilisateurs peuvent utiliser la carte bancaire pour effectuer des paiements et des virements dans WeChat.

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Les tableaux sont un composant essentiel dans de nombreuses applications Web. Les tableaux contiennent généralement de grandes quantités de données. Ils nécessitent donc certaines fonctionnalités spécifiques pour améliorer l'expérience utilisateur. L'une des fonctionnalités importantes est la possibilité de modification. Dans cet article, nous explorerons comment implémenter des tables modifiables à l'aide de Vue.js et fournirons des exemples de code spécifiques. Étape 1 : préparer les données Tout d'abord, nous devons préparer les données pour le tableau. Nous pouvons utiliser un objet JSON pour stocker les données de la table et les stocker dans la propriété data de l'instance Vue. Dans ce cas

Dans iOS17, Apple a plus de contrôle sur ce que les applications peuvent voir sur les photos. Lisez la suite pour savoir comment gérer l'accès aux applications par application. Sous iOS, le sélecteur de photos intégré à l'application d'Apple vous permet de partager des photos spécifiques avec l'application, tandis que le reste de votre photothèque reste privé. Les applications doivent demander l'accès à l'intégralité de votre photothèque et vous pouvez choisir d'accorder l'accès suivant aux applications : Accès restreint – Les applications ne peuvent voir que les images que vous pouvez sélectionner, ce que vous pouvez faire à tout moment dans l'application ou en accédant aux paramètres. > Confidentialité et sécurité > Photos pour afficher les images sélectionnées. Accès complet – L'application peut afficher des photos

Un JsonNode est le modèle d'arborescence JSON de Jackson qui peut lire JSON dans des instances JsonNode et écrire JsonNode dans JSON. Nous pouvons utiliser Jackson pour lire JSON dans un JsonNode en créant une instance ObjectMapper et en appelant la méthode readValue(). Nous pouvons accéder aux champs, tableaux ou objets imbriqués en utilisant la méthode get() de la classe JsonNode. Nous pouvons utiliser la méthode asText() pour renvoyer une représentation sous forme de chaîne valide et convertir la valeur du nœud en Javaint à l'aide de la méthode asInt() de la classe JsonNode. Dans l'exemple ci-dessous nous pouvons accéder à Json

MetaMask (également appelé Little Fox Wallet en chinois) est un logiciel de portefeuille de cryptage gratuit et bien accueilli. Actuellement, BTCC prend en charge la liaison au portefeuille MetaMask. Après la liaison, vous pouvez utiliser le portefeuille MetaMask pour vous connecter rapidement, stocker de la valeur, acheter des pièces, etc., et vous pouvez également obtenir un bonus d'essai de 20 USDT pour la première liaison. Dans le didacticiel du portefeuille BTCCMetaMask, nous présenterons en détail comment enregistrer et utiliser MetaMask, ainsi que comment lier et utiliser le portefeuille Little Fox dans BTCC. Qu'est-ce que le portefeuille MetaMask ? Avec plus de 30 millions d’utilisateurs, MetaMask Little Fox Wallet est aujourd’hui l’un des portefeuilles de crypto-monnaie les plus populaires. Son utilisation est gratuite et peut être installée sur le réseau en tant qu'extension

À l’ère actuelle d’explosion de l’information, la construction d’une marque personnelle et d’une image d’entreprise est devenue de plus en plus importante. En tant que principale plateforme de partage de vie dans le domaine de la mode en Chine, Xiaohongshu a attiré l'attention et la participation d'un grand nombre d'utilisateurs. Pour les utilisateurs qui souhaitent étendre leur influence et améliorer l’efficacité de la diffusion du contenu, les sous-comptes contraignants sont devenus un moyen efficace. Alors, comment Xiaohongshu lie-t-il un sous-compte ? Comment vérifier si le compte est normal ? Cet article répondra à ces questions pour vous en détail. 1. Comment lier un sous-compte sur Xiaohongshu ? 1. Connectez-vous à votre compte principal : Tout d'abord, vous devez vous connecter à votre compte principal Xiaohongshu. 2. Ouvrez le menu des paramètres : cliquez sur « Moi » dans le coin supérieur droit, puis sélectionnez « Paramètres ». 3. Accédez à la gestion du compte : dans le menu des paramètres, recherchez l'option "Gestion du compte" ou "Assistant de compte" et cliquez sur

Avec la popularité des comptes vidéo sur les réseaux sociaux, de plus en plus de personnes commencent à utiliser des comptes vidéo pour partager leur vie quotidienne, leurs idées et leurs histoires. Cependant, certains utilisateurs peuvent constater que les commentaires sont restreints, ce qui peut les laisser confus et insatisfaits. 1. Comment supprimer les restrictions de commentaires sur les comptes vidéo ? Pour lever la restriction relative aux commentaires sur un compte vidéo, vous devez d'abord vous assurer que le compte a été correctement enregistré et que l'authentification par votre nom réel a été effectuée. Les comptes vidéo ont des exigences en matière de commentaires. Seuls les comptes ayant effectué une authentification par nom réel peuvent lever les restrictions de commentaires. S'il y a des anomalies dans le compte, ces problèmes doivent être résolus avant que les restrictions de commentaires puissent être levées. 2. Respectez les normes communautaires du compte vidéo. Les comptes vidéo ont certaines normes concernant le contenu des commentaires. Si le commentaire implique un contenu illégal, il vous sera interdit de parler. Pour lever les restrictions de commentaires, vous devez respecter la communauté du compte vidéo
