Les getters magiques sur Varien_Object
(M1) et DataObject
(M2) sont une pratique courante, mais avec Magento 2, il ne convient pas de l'utiliser.
Bien:
- facile à lire / écrire
Mal
- Cela pose des problèmes lors de l'utilisation de chiffres dans les clés (voir: Magento 2: manière différente d'obtenir le champ d'une collection ou d' obtenir un attribut de produit personnalisé à l'aide de la camel case )
- les outils d'analyse de code se plaignent de méthodes inexistantes
Question
Avec Magento 2, nous avons deux nouvelles méthodes:
getDataByKey($key)
getDataByPath($path)
Y a-t-il une bonne raison d'utiliser encore getData($key)
ou des getters magiques?
Éditer:
@Vinai merci. Je n'ai pas mentionné la @method
méthode, car mon approche était assez différente.
Cela n'aide que l'IDE, mais n'a aucun impact sur d'autres choses.
Il existe plusieurs PR fusionnés sur lesquels sont des «micro-optimisations», comme le transtypage en (int)
lieu et place intval()
ou la taille des tableaux en dehors des boucles (même pour les petits tableaux).
D'un autre côté, il y a
des getters magiques, qui ont des "frais généraux" comme Marius l'a décrit ....
strtolower(trim(preg_replace('/([A-Z]|[0-9]+)/', "_$1", $name), '_'));
getData($key)
les mehtods doivent également effectuer 2 à 3 contrôles supplémentaires ...if ('' === $key) {
if (strpos($key, '/')) {
if ($index !== null) {
Pour votre propre code, vous êtes totalement d'accord pour préférer de vraies méthodes, mais dans les mêmes cas ce n'est pas possible ... par exemple, vous avez créé un événement personnalisé ...
$value = $observer->getVar_1();
$value = $observer->getData('var_1');
$value = $observer->getDataByKey('var_1');
Utiliser le 3e avec /** @var some $value */
me semble le mieux. (?)