PHP 유형 제약 조건에 대한 자세한 소개(코드 포함)

不言
풀어 주다: 2023-04-05 18:48:01
앞으로
2435명이 탐색했습니다.

이 기사는 PHP 유형 제약 조건(코드 포함)에 대한 자세한 소개를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

소개: 소위 유형 제약 조건은 변수를 정의할 때 해당 유형을 지정해야 하며 변수는 앞으로 이 유형의 데이터만 저장할 수 있음을 의미합니다. PHP는 약한 유형의 언어이지만 이미 PHP 5에서 객체, 인터페이스 및 배열을 포함한 유형 제약 조건을 지원합니다. PHP 7 이후에는 스칼라 유형 제약 조건을 지원합니다. 다음은 몇 가지 예입니다.

스칼라 유형, 배열

매개변수에 유형을 지정하세요. 일치하지 않으면 잡을 수 있는 치명적인 오류가 발생합니다.

<?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
로그인 후 복사

위에 표시된 것처럼 스칼라 유형도 마찬가지입니다

<?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,是否为男孩:是
로그인 후 복사

객체, 인터페이스

유형 제약 조건은 객체나 인터페이스로 지정할 수도 있습니다. 먼저 Human 인터페이스를 정의하고 BoyGirl 두 클래스가 각각 인터페이스를 구현합니다Human 接口,BoyGirl 两个类分别实现接口

<?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;;
    }
}
로그인 후 복사

接下来新建一个类来测试

<?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
로그인 후 복사

当类型约束为具体对象 Boy 或者 Girl 时,只能传入要求的对象。当类型约束为接口 Human 时,可以传入实现接口的类 BoyGirlrrreee

그런 다음 테스트할 새 클래스를 만듭니다

rrreee 유형 제약 조건이 특정 개체 Boy 또는 Girl인 경우 필수 개체만 전달할 수 있습니다. 유형 제약 조건이 Human 인터페이스인 경우 인터페이스를 구현하는 Boy 또는 Girl 클래스를 전달할 수 있습니다.
【관련 추천:

PHP 비디오 튜토리얼

🎜🎜🎜

위 내용은 PHP 유형 제약 조건에 대한 자세한 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿