Maison >développement back-end >tutoriel php >Introduction détaillée aux contraintes de type PHP (avec code)

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

不言
不言avant
2019-04-02 11:41:342452parcourir

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

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,是否为男孩:是

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;;
    }
}

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

. 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer