de sorte que la classe finale ait toutes les variables / méthodes membres de la classe p>
Y a-t-il un moyen facile d'aller? p>
3 Réponses :
Vous devez encapsuler les deux classes dans une classe contenant et fournir une interface pertinente (telle que des setters / getters pour des variables privées recherche (Google): "Composition sur héritage" < / p> Note de bas de page: Désolé pour les noms variables non créatifs. p> p>
@ user198729: Considérant votre exigence "à l'exécution", voulez-vous vraiment fusionner deux classes i> ou voulez-vous dire deux objets i>?
demandez-vous de le faire au moment de l'exécution ou au temps de programmation?
Je supposerai le temps d'exécution, auquel cas ce qui ne va pas avec la classe héritage < / a>?
Créez une nouvelle classe qui hérite des deux que vous souhaitez fusionner. P>
Ne pas descendre, mais PHP ne supporte pas (AFAIK) supportant de multiples héritage.
Cela ne vous donnera pas accès aux membres privés des classes héritées.
Oui, désolé, PHP ne prend pas en charge de multiples héritage. Cependant, en empilant les classes à hériter d'une ou d'une autre, vous pouvez imiter plusieurs héritages. Les membres privés ne seront pas hérités, oui. Mais s'il s'agit d'un problème, il n'est pas particulièrement difficile de changer leur protection au public (nous ne nous engagerons pas sur un débat sur la question de savoir si le privé est vraiment nécessaire).
# Merge only properties that are shared between the two classes into this object.
public function conservativeMerge($objectToMerge)
{
# Makes sure the argument is an object.
if(!is_object($objectToMerge))
return FALSE;
# Used $this to make sure that only known properties in this class are shared.
# Note: You can only iterate over an object as of 5.3.0 or greater.
foreach ($this as $property => $value)
{
# Makes sure that the mering object has this property.
if (isset($objectToMerge->$property))
{
$objectToMerge->$property = $value;
}
}
}
# Merge all $objectToMerge's properties to this object.
public function liberalMerge($objectToMerge)
{
# Makes sure the argument is an object.
if(!is_object($objectToMerge))
return FALSE;
# Note: You can only iterate over an object as of 5.3.0 or greater.
foreach ($objectToMerge as $property => $value)
{
$objectToMerge->$property = $value;
}
}
You should consider the first method as if it where the object counterpart of array_combine(). Then consider the second method as if it where the object counterpart for array_merge().