2017-08-18 5 views
2

Je suis nouveau au monde de PHP et l'ai appris de php.net. Je sais que lorsque vous convertissez un objet en tableau, l'octet nul est ajouté autour des noms de propriété privée et protégée lorsque NomClasse ou La touche astérisque (*) est ajoutée aux noms de propriété privée et protégée dans les clés de tableau.Pourquoi php ajoute des octets nuls aux noms de propriété privés et protégés?

Mais ma question est que Pourquoi php ajouter octets NULL QU'EST-CE QUE est la raison?

Quelqu'un peut-il dire dans des mots simples et faciles.

Les exemples aideront beaucoup.

Merci

Répondre

4

Le point de private/protected propriétés est que vous n'êtes pas censé y avoir accès à l'extérieur de la classe elle-même. Ce n'est pas une mesure de sécurité ou quelque chose comme ça, c'est de faire respecter les contrats entre les différentes parties de votre code. Lorsque vous marquez quelque chose comme private/protected, vous déclarez explicitement que cette chose n'est pas destinée à la consommation publique générale et qu'aucun code externe ne doit y être associé. Ceci est surtout un rappel pour vous-même et d'autres développeurs et vous donnera au pire une claque légère au poignet si vous désobéissez à ce marqueur; ce n'est pas une protection à toute épreuve. Il y a plusieurs façons de contourner cela, par ex. en utilisant la réflexion. Mais, si elle a été faite trop facile pour accéder à ces parties intimes, les développeurs le feraient probablement à gauche et à droite et annuler tout le point. Étant donné que ces propriétés sont incluses dans le tableau lors de la conversion d'un objet en tableau, il n'est pas immédiatement évident de savoir comment y accéder directement en raison des octets NUL supplémentaires ajoutés. Si vous prenez le temps de trouver comment y accéder, vous savez vraiment ce que vous faites. TL; DR: (je crois) c'est une tentative minimale d'essayer de faire respecter certaines normes de codage minimales et de ne pas laisser les débutants violer tous les principes de la POO une fois qu'ils ont compris ce qu'est une distribution matricielle.

+1

La raison réelle est l'homonymie des propriétés nommées de manière identique déclarées dans différentes classes. Si des propriétés privées sont impliquées, vous pouvez avoir plusieurs propriétés portant le même nom sur un même objet. – NikiC

+0

@NikiC Pourquoi spécifiquement les octets NUL alors, n'est-ce pas déjà adressé par des astérisques ajoutés? – deceze

+1

Les octets null principaux sont un moyen facile de distinguer entre les propriétés publiques et non publiques. L'octet null après le nom de la classe s'assure que le nom de la classe est utilisable en tant que chaîne terminée par un caractère nul sans nécessiter de copie explicite. Par convention, PHP utilise généralement des octets nuls pour désigner divers noms spéciaux et réservés, y compris les noms de classes anonymes, les fonctions create_function, etc. – NikiC