Page tree

PHP 버전 4까지는 메소드의 파라미터의 타입을 선언할 수가 없었으나 PHP 5 부터는 타입 힌팅을 도입하여 메소드의 파라미터 타입을 지정할 수 있으므로 잘못된 타입을 넘길 경우 손쉽게 처리할 수 있습니다.


다음은 enroll 펑션에 타입 힌팅를 적용한 예제로 명시적으로 어떤  클래스를 받는지 파라미터에 지정하고 있습니다.

typehint.php
<?php

class Student {
    public   $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

class Program {
    public   $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

class School {
    public   $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

function enroll(Student $student, School $school) {
    echo "Enrolling " . $student->name . " in " . $school->name;
}

$me = new Student("Amanda");
$medicare = new Program("Medicare");
$enroll = enroll($me, $medicare); // 예외 발생

php typehint.php 를 실행하면 다음과 같이 런타임에 예외를 발생시키므로 잘못된 타입을 넘기는 실수를 미연에 방지할 수 있으며 타입 힌팅은 다음 장에서 설명할 의존성 주입을 위해서는 꼭 필요한 기능입니다.

Catchable fatal error: Argument 2 passed to enroll() must be an instance of School, instance of Program given, called in C:\Users\lesstif\Code\typehint.php on line 30 and defined in C:\Users\lesstif\Code\typehint.php on line 24



Ref