8
votes

Comment fusionner deux cours en PHP?

de sorte que la classe finale ait toutes les variables / méthodes membres de la classe

Y a-t-il un moyen facile d'aller?


0 commentaires

3 Réponses :


12
votes

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 xxx

recherche (Google): "Composition sur héritage" < / p>

Note de bas de page: Désolé pour les noms variables non créatifs.


1 commentaires

@ user198729: Considérant votre exigence "à l'exécution", voulez-vous vraiment fusionner deux classes ou voulez-vous dire deux objets ?




0
votes
# 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().

0 commentaires