Explication détaillée des exemples polymorphes orientés objet en PHP

小云云
Libérer: 2023-03-21 16:34:01
original
1251 Les gens l'ont consulté

Cet article partage principalement avec vous une explication détaillée des exemples de polymorphisme orienté objet en PHP. Le polymorphisme fait référence à la possibilité de redéfinir ou de modifier la nature et le comportement d'une classe en fonction du contexte d'utilisation de la classe en mode orienté objet. PHP ne prend pas en charge la surcharge pour obtenir le polymorphisme, mais PHP peut obtenir des effets polymorphes dans différentes directions.

est la suivante :

class a{    function test($i){ // $i可以是任何类型的变量
        print_r $i;
    }
}
Copier après la connexion

À partir de l'exemple ci-dessus, on peut voir que puisque PHP est un langage faiblement typé, $i peut être n'importe quel type de variable de cette façon, une fonction peut implémenter des fonctions puissantes telles que Java. Une forme de polymorphisme dans les langages de types qui surcharge les méthodes en modifiant les types de paramètres.

Ce formulaire est plus pratique et efficace que la surcharge de types de paramètres de JAVA, mais il présente également des problèmes, comme suit :

<?php/**
教师类有一个drawPolygon()方法需要一个Polygon类,用来画多边形,此方法内部调用多边形的draw()方法,但由于弱类型,我们可以传入Circle类,就会调用Circle类的draw方法,这就事与愿违了。甚至可以传入阿猫、阿狗类,如果这些类没有draw()方法还会报错。*/class Teacher{    function drawPolygon($polygon){ 
        $polygon->draw(); 
    }    
}class Polygon{    function draw(){        echo "draw a polygon";
    }
}class Circle{    function draw(){        echo "draw a circle";
    }
}?>
Copier après la connexion

On peut voir qu'un tel polymorphisme flexible nécessite un certain contrôle Après. PHP5.3, vous pouvez imposer des restrictions de type sur les paramètres, comme suit :

// 仿java,在变量参数前加一个限制类名
    function drawPolygon(Polygon $polygon){ 
        $polygon->draw(); 
    }
Copier après la connexion

Cela restreint uniquement la transmission de Polygon et de ses sous-classes.

Il existe également une surcharge qui modifie le nombre de paramètres. C'est également parce que PHP ne prend pas en charge la surcharge de méthodes, donc certaines méthodes alternatives sont nécessaires pour l'implémenter, comme suit :

<?php// 通过可变参数来达到改变参数数量重载的目的
// 不是必须传入的参数,必须在函数定义时赋初始值function open_database($DB, $cache_size_or_values=null, $cache_size=null)
{    switch (function_num_args())  
// 通过function_num_args()函数计算传入参数的个数,根据个数来判断接下来的操作   
 {        case 1:            
 $r = select_db($DB);           
  break;        case 2:           
   $r = select_db($DB, $cache_size_or_values);           
    break;        case 3:           
     $r = select_db($DB, $cache_size_or_values, $cache_size);            
     break;
    }    return is_resource($r);
}?>
Copier après la connexion

Recommandations associées :

Introduction à l'héritage, au polymorphisme et à l'encapsulation orientés objet PHP

Polymorphisme PHP et liaison dynamique

Un cas d'implémentation d'une méthode de polymorphisme orienté objet en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!