> 백엔드 개발 > PHP 튜토리얼 > PHP 유형 제약

PHP 유형 제약

伊谢尔伦
풀어 주다: 2016-11-23 13:53:10
원래의
942명이 탐색했습니다.

PHP 5에서는 유형 제약 조건을 사용할 수 있습니다. 함수 매개변수는 객체(함수 프로토타입에 클래스 이름 지정), 인터페이스, 배열(PHP 5.1부터) 또는 호출 가능(PHP 5.4부터)으로 지정할 수 있습니다. 그러나 매개변수의 기본값으로 NULL을 사용하는 경우에도 함수 호출 시 실제 매개변수로 NULL을 사용할 수 있습니다.

클래스나 인터페이스가 유형 제약 조건을 지정하는 경우 모든 하위 클래스나 구현도 마찬가지입니다.

int 또는 string과 같은 스칼라 유형에는 유형 제약 조건을 사용할 수 없습니다. 특성도 허용되지 않습니다.

예제 #1 유형 제약 조건 예

<?php
    //如下面的类
    class MyClass
    {
        /**
         * 测试函数
         * 第一个参数必须为 OtherClass 类的一个对象
         */
        public function test(OtherClass $otherclass) {
            echo $otherclass->var;
        }
        /**
         * 另一个测试函数
         * 第一个参数必须为数组
         */
        public function test_array(array $input_array) {
            print_r($input_array);
        }
        /**
         * 第一个参数必须为递归类型
         */
        public function test_interface(Traversable $iterator) {
           echo get_class($iterator);
        }
        /**
         * 第一个参数必须为回调类型
         */
        public function test_callable(callable $callback, $data) {
            call_user_func($callback, $data);
        }
    }
    // OtherClass 类定义
    class OtherClass {
        public $var = &#39;Hello World&#39;;
    }
?>
로그인 후 복사

함수 호출의 매개변수가 정의된 매개변수 유형과 일치하지 않으면 포착 가능한 치명적인 오류가 발생합니다.

<?php
    // 两个类的对象
    $myclass = new MyClass;
    $otherclass = new OtherClass;
    // 致命错误:第一个参数必须是 OtherClass 类的一个对象
    $myclass->test(&#39;hello&#39;);
    // 致命错误:第一个参数必须为 OtherClass 类的一个实例
    $foo = new stdClass;
    $myclass->test($foo);
    // 致命错误:第一个参数不能为 null
    $myclass->test(null);
    // 正确:输出 Hello World
    $myclass->test($otherclass);
    // 致命错误:第一个参数必须为数组
    $myclass->test_array(&#39;a string&#39;);
    // 正确:输出数组
    $myclass->test_array(array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;));
    // 正确:输出 ArrayObject
    $myclass->test_interface(new ArrayObject(array()));
    // 正确:输出 int(1)
    $myclass->test_callable(&#39;var_dump&#39;, 1);
?>
로그인 후 복사

유형 제약 조건은 클래스 멤버 함수뿐만 아니라 함수에서도 사용됩니다.

<?php
    // 如下面的类
    class MyClass {
        public $var = &#39;Hello World&#39;;
    }
    /**
     * 测试函数
     * 第一个参数必须是 MyClass 类的一个对象
     */
    function MyFunction (MyClass $foo) {
        echo $foo->var;
    }
    // 正确
    $myclass = new MyClass;
    MyFunction($myclass);
?>
로그인 후 복사

유형 제약 조건은 NULL 값을 허용합니다.

<?php
 /* 接受 NULL 值 */
   function test(stdClass $obj = NULL) {}

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