PHP équivalent d'un ami ou d'interne
Est-il un équivalent de "ami" ou "interne" en php? Si non, est-il un modèle à suivre pour obtenir ce comportement?
Edit:
Désolé, mais standard de Php n'est pas ce que je cherche. Je suis à la recherche de quelque chose le long des lignes de ce monsieur loyal n'.
J'ai des cours qui sont en train de faire C-style appels système sur le back-end et le jonglage a commencé à devenir lourd. J'ai des fonctions dans Un objet qui prennent dans l'objet B en tant que paramètre et appeler une méthode dans l'objet B de passage en lui-même comme un argument. L'utilisateur final pourrait appeler la méthode B et le système s'effondrerait.
Vous devez vous connecter pour publier un commentaire.
PHP ne supporte pas n'importe quel ami-comme des déclarations. Il est possible de simuler cette aide de l'PHP5 __get et __set méthodes et inspection d'un backtrace pour uniquement autorisés ami classes, bien que le code pour le faire est un peu maladroit.
Il y a quelques exemple de code et de discussion sur le sujet sur le PHP du site:
(Code prouvé par tsteiner à nerdclub dot net sur bugs.php.net)
Il est également possible d'élever les privilèges, aka les fuites de données de manière sélective, à l'aide d'une poignée de main et fermetures en php >=5.3.3.
Fondamentalement, l'interaction se passe: Une classe a une méthode publique qui accepte un objet de la classe B, et appelle B->grantAccess (ou quel que soit votre interface définit), passant d'une fermeture. La fermeture
use($that,$anythingelseyouneed)
où $qui=$this, et quelque chose que vous devez déterminer quelles propriétés sont autorisés à y accéder. La fermeture a un argument - la propriété de retour; si c'est une propriété $et que tout est cool, la fermeture renvoie à la propriété. Sinon, elle renvoie la valeur ", ou lève une exception, ou peut-être une valeur par défaut.Classe B->grantAccess accepte un callable et magasins, de son utilisation dans d'autres méthodes pour arracher les propriétés privées de la fermeture permet de fuite. Faire de la classe B par défaut du constructeur privé. La construction d'un B à l'aide d'un statique usine méthode qui prend une Classe d'Un argument, d'assurer la poignée de main qui se passe.
Gist ici: https://gist.github.com/mcamiano/00592fb400e5043d8acd
Je suis assez sûr de ce que vous cherchez est "protégé" ou "privé", selon votre cas d'utilisation.
Si vous êtes à la définition d'une fonction dans une classe, et que vous souhaitez seulement à la disposition, vous pourrez définir de cette façon:
Si vous êtes à la définition d'une fonction dans une classe que vous voulez être à la disposition des classes qui héritent de cette classe, mais pas à la disposition du public, défini de cette façon:
Je suis assez sûr que, par défaut, en PHP5, les fonctions sont publiques, ce qui signifie que vous n'avez pas à utiliser la syntaxe suivante, mais il est en option:
Vous aurez toujours besoin d'instancier l'objet avant d'utiliser une fonction publique. Donc je vais juste être minutieux et de vous laisser savoir que pour utiliser une fonction dans une classe sans l'instanciation d'un objet, assurez-vous d'utiliser la syntaxe suivante:
Qui vous permettra d'utiliser la fonction par uniquement référence à la classe, comme suit:
Sinon, vous devez effectuer les opérations suivantes:
friend
mot-clé en C++, c'est à dire à la prise de certains privé/protégé de données/méthodes disponibles pour certaines classes qui n'avait pas hérité d'elle.