10
votes

En utilisant $ ceci, auto ::, parent :: pour la lisibilité du code

J'aimerais savoir s'il est acceptable / préféré utiliser Self :: Méthode () et parent :: Méthode () Lorsque vous travaillez dans des classes PHP.

Vous pouvez utiliser $ ceci-> Méthode () mais $ Ceci-> peut également faire référence à une variable de classe, une variable de classe mère ou une méthode de la classe mère. Il n'y a pas d'ambiguïté en soi ::

est auto-self :: amorti et / ou y a-t-il des mises en garde ou des contrefataires à utiliser ce style?

Je comprends ce moi-même :: et parent: : reportez-vous à une instance statique de la classe, mais à Kohana, sauf si vous définissez spécifiquement une méthode de statique, il ne semble pas y avoir une différence.

merci.

a ajouté un Exemple: En supposant que cette application enregistre des forums de plusieurs sites Web ... xxx

Cet exemples fonctionne à Kohana avec la déclaration d'erreur définie sur: error_rporting (e_all & ~ e_strict);

$ Ceci-> Site_ID est défini dans la classe Controller_core principale (une bibliothèque à Kohana).

Autant que je sache, $ Ceci est pas censé être disponible depuis que je m'appelle Self :: Catégories () de manière statique, mais ce n'est que lorsque je définis des catégories () comme statique qu'il jette une erreur.

mais comme je l'ai dit que je Beaucoup préférez-vous utiliser Self :: Parce qu'à partir d'une perspective de lisibilité, je sais exactement où cette fonction devrait être, plutôt que d'utiliser $ Celui-ci provoque une ambiguïté, c'est-à-dire.


1 commentaires

La raison pour laquelle ce code fonctionne est que vous ne parlez jamais à une instance $ de l'objet dans la méthode des catégories statique.


6 Réponses :


0
votes

Je pense que moi-même :: est généralement utilisé pour des fonctions et des propriétés statiques.

J'utilise Kohana et peut-être que les contrôleurs sont fabriqués statiques.


0 commentaires

16
votes

Il y a une différence.

$ CU fait référence à une instance d'un objet.

Parent et auto sont utilisés pour appeler des méthodes statiquement.

Cette page du manuel de PHP l'explique en détail meilleur que j'ai le temps d'écrire pour le moment. Le premier exemple en particulier devrait aider à mettre en évidence certaines des différences. Je vous encourage à copier coller le premier exemple et je pense que c'est un concept important pour vous entendre si vous ne connaissez pas déjà la différence.


2 commentaires

Merci d'avoir répondu. Le lien de documentation est très utile. Je n'ai pas pu venir avec les bons mots pour le trouver, sinon.


Le parent n'est pas (seulement) utilisé pour la méthode d'appel de manière statique. S'il est appelé à partir d'un contexte d'objet, il appellera la fonction de la classe mère avec un contexte d'objet.



6
votes

Les contrôleurs ne sont pas statiques à Kohana, bien qu'ils puissent contenir des variables / méthodes d'éléments statiques.

auto :: code> est une manière sténographique d'écriture classname :: code > IE P>

//MY_Controller.php
class Controller extends Controller_Core
{
      // overloads Controller_Core::someMethod without us having to change the core file
      public function someMethod(){}
}


1 commentaires

Merci d'avoir pris le temps d'expliquer cela. C'est très utile. Je comprends maintenant ce que vous entendez par "Les fonctions statiques sont par classe non par objet". Je vais lire la documentation fournie par Benlumley, mais je suis toujours perplexe par le fait que mon code fonctionne toujours: j'ai ajouté un code d'exemple à ma question, veuillez jeter un oeil. Merci encore.



0
votes

Je n'ai pas pu ajouter un commentaire (apparemment, je n'ai pas le représentant requis!) xxx

}

Comme je l'ai dit, vous devez utiliser ERROR_REPORTING (E_ALL | E_strict); (Changez-le dans le fichier Kohana)

appeler des catégories de fonctions privées () Statiquement des œuvres dues à un bogue en PHP, vous ne devriez pas être capable de le faire :)


0 commentaires

0
votes

Une autre chose à noter en passant, c'est que ce n'est pas une très bonne conception MVC pour faire des fonctions de contrôleur statiques qui renvoient des listes de catégories.

Les contrôleurs sont destinés à traiter avec les demandes, les modèles sont destinés à traiter des données (qui est ce que c'est) et les vues sont à l'affichage. p>

Fabriquez un modèle! P>

$cat = new Category_Model;

echo $cat->categories(1);


0 commentaires

0
votes

J'utilise strictement auto :: uniquement pour les variables statiques et la fonction de membre statique


0 commentaires