Introduction détaillée aux contraintes de type PHP (avec code)

不言
Libérer: 2023-04-05 18:48:01
avant
2435 Les gens l'ont consulté

Cet article vous apporte une introduction détaillée aux contraintes de type PHP (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Introduction : La contrainte dite de type signifie que lors de la définition d'une variable, son type doit être spécifié et la variable ne peut stocker que des données de ce type à l'avenir. Bien que PHP soit un langage faiblement typé, il prend déjà en charge les contraintes de type dans PHP 5, notamment les objets, les interfaces et les tableaux. Il prend en charge les contraintes de type scalaire après PHP 7. Voici quelques exemples.

Type scalaire, tableau

Spécifiez le type dans le paramètre S'il est incohérent, une erreur fatale capturable sera générée

<?php

/**
 * 数组类型约束
 * @param array $arr
 */
function printArray(array $arr)
{
    echo implode(&#39;,&#39;, $arr);
}

printArray(array(1, 2, 3));// 1,2,3
printArray(&#39;1&#39;);// Fatal error: Uncaught TypeError: Argument 1 passed to printArray() must be of the type array, string given, called in D:\WWW\test.php on line 13 and defined in D:\WWW\test.php:7 Stack trace: #0 D:\WWW\test.php(13): printArray(&#39;1&#39;) #1 {main} thrown in D:\WWW\test.php on line 7
Copier après la connexion

Comme ci-dessus Comme indiqué, il en va de même pour les types scalaires

<?php

/**
 * 标量类型约束
 * @param string $name
 * @param int $age
 * @param float $height
 * @param bool $isBoy
 */
function sayInfo(string $name, int $age, float $height, bool $isBoy)
{
    echo &#39;姓名:&#39; . $name . &#39;,年龄:&#39; . $age . &#39;,身高:&#39; . $height . &#39;,是否为男孩:&#39; . ($isBoy ? &#39;是&#39; : &#39;否&#39;);
}

sayInfo(&#39;tom&#39;, 12, 134.5, true);// 姓名:tom,年龄:12,身高:134.5,是否为男孩:是
Copier après la connexion

Objet et interface

Les contraintes de type peuvent également être spécifiées en tant qu'objets ou interfaces. Définissez d'abord une interface Human, et les deux classes Boy et Girl implémentent respectivement l'interface

<?php

/**
 * 接口
 * Interface Human
 */
interface Human
{
    public function say();

    public function run();
}

/**
 * 实现 Human 接口
 * Class Boy
 */
class Boy implements Human
{
    public function say()
    {
        echo &#39;a boy say&#39;;
    }

    public function run()
    {
        echo &#39;a boy run&#39;;
    }
}

/**
 * 实现 Human 接口
 * Class Girl
 */
class Girl implements Human
{
    public function say()
    {
        echo &#39;a girl say&#39;;
    }

    public function run()
    {
        echo &#39;a girl run&#39;;
    }
}
Copier après la connexion

Ensuite, créez une nouvelle classe pour tester

<?php

include &#39;./human.php&#39;;

class Action
{
    /**
     * Boy 对象类型约束
     * @param Boy $boy
     */
    public function boySay(Boy $boy)
    {
        $boy->say();
    }

    /**
     * Girl 对象类型约束
     * @param Girl $girl
     */
    public function girlSay(Girl $girl)
    {
        $girl->say();
    }

    /**
     * Human 接口类型约束
     * @param Human $obj
     */
    public function humanRun(Human $obj)
    {
        $obj->run();
    }
}

$obj = new Action();
$obj->boySay(new Boy());// a boy say
echo '<br />';
$obj->girlSay(new Girl());// a girl say
echo '<br />';
$obj->humanRun(new Boy());// a boy run
echo '<br />';
$obj->humanRun(new Girl());// a girl run
Copier après la connexion

. lorsque la contrainte de type est Lors de la spécification d'un objet spécifique Boy ou Girl, seul l'objet demandé peut être transmis. Lorsque la contrainte de type est interface Human, vous pouvez passer dans la classe Boy ou Girl qui implémente l'interface.

[Recommandations associées : Tutoriel vidéo 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:
php
source:segmentfault.com
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