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 :: p>
est auto-self :: amorti et / ou y a-t-il des mises en garde ou des contrefataires à utiliser ce style? P>
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. p>
merci. P>
a ajouté un Exemple:
En supposant que cette application enregistre des forums de plusieurs sites Web ... p> Cet exemples fonctionne à Kohana avec la déclaration d'erreur définie sur:
error_rporting (e_all & ~ e_strict); p> $ Ceci-> Site_ID est défini dans la classe Controller_core principale (une bibliothèque à Kohana). P> 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. p> 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. P> P>
6 Réponses :
Je pense que moi-même :: est généralement utilisé pour des fonctions et des propriétés statiques. P>
J'utilise Kohana et peut-être que les contrôleurs sont fabriqués statiques. P>
Il y a une différence. P>
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. P> $ CU code> fait référence à une instance d'un objet. p>
Parent code> et
auto code> sont utilisés pour appeler des méthodes statiquement. p>
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.
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(){}
}
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.
Je n'ai pas pu ajouter un commentaire (apparemment, je n'ai pas le représentant requis!) } p> Comme je l'ai dit, vous devez utiliser ERROR_REPORTING (E_ALL | E_strict); (Changez-le dans le fichier Kohana) p> 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 :) P> P>
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);
J'utilise strictement auto :: uniquement pour les variables statiques et la fonction de membre statique p>
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.