Si
Scope 1 {
return $truc;
}
Alors du code externe à Scope1 peut altérer $truc sans que Scope 1 ne le sache.
Si
Scope 1 {
return clone $truc;
}
Alors rien ne peut altérer $truc à part Scope 1.
Effets:
• Limiter les altérations d'un Scope par les autres
• Considère que $truc "appartient" au Scope 1
• $truc n'est pas un objet externe autonome, c'est un objet embarqué dans la boite noire Scope 1
• Performances réduites
• Reproduit pour les objets le comportement de copie (lors d'un return) que subissent les données string/int/float
• Pas d'accès à $truc hors de Scope 1, sauf si $truc vient de l'extérieur (il faudrait cloner $truc quand on le reçoit dans le constructeur pour éviter cela)
Pour ma part, l'effet le moins désirable de cette méthode est que $truc n'est pas accessible de l'extérieur, mais il est pourtant "connu": on sait que Scope 1 a une relation avec un objet du même type que $truc, mais sans pouvoir accéder à cet objet.
[PS] J'ai zappé le coté $this, c'était juste pour le return d'un clone d'un objet quelconque (qui n'est pas forcément une mauvaise chose).
De ce que j'en ai retenu, pour $this, retourner une copie est une émulation d'objets "immutable", pour éviter des soucis en cas de parallélisme (donc, totalement inutile en PHP). Cela permet aussi de considérer que l'objet se "connait" à sa création et ne change plus (donc, ça "émule" le mot clef "final" de Java). Mais je me trompe peut-être (puisque je trouve cela totalement inutile et mal placé à mesure que je l'ai écrit...)
Scope 1 {
return $truc;
}
Alors du code externe à Scope1 peut altérer $truc sans que Scope 1 ne le sache.
Si
Scope 1 {
return clone $truc;
}
Alors rien ne peut altérer $truc à part Scope 1.
Effets:
• Limiter les altérations d'un Scope par les autres
• Considère que $truc "appartient" au Scope 1
• $truc n'est pas un objet externe autonome, c'est un objet embarqué dans la boite noire Scope 1
• Performances réduites
• Reproduit pour les objets le comportement de copie (lors d'un return) que subissent les données string/int/float
• Pas d'accès à $truc hors de Scope 1, sauf si $truc vient de l'extérieur (il faudrait cloner $truc quand on le reçoit dans le constructeur pour éviter cela)
Pour ma part, l'effet le moins désirable de cette méthode est que $truc n'est pas accessible de l'extérieur, mais il est pourtant "connu": on sait que Scope 1 a une relation avec un objet du même type que $truc, mais sans pouvoir accéder à cet objet.
[PS] J'ai zappé le coté $this, c'était juste pour le return d'un clone d'un objet quelconque (qui n'est pas forcément une mauvaise chose).
De ce que j'en ai retenu, pour $this, retourner une copie est une émulation d'objets "immutable", pour éviter des soucis en cas de parallélisme (donc, totalement inutile en PHP). Cela permet aussi de considérer que l'objet se "connait" à sa création et ne change plus (donc, ça "émule" le mot clef "final" de Java). Mais je me trompe peut-être (puisque je trouve cela totalement inutile et mal placé à mesure que je l'ai écrit...)