Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Typbeschränkungen

PHP-Typbeschränkungen

伊谢尔伦
Freigeben: 2016-11-23 13:53:10
Original
940 Leute haben es durchsucht

PHP 5 kann Typbeschränkungen verwenden. Funktionsparameter können als Objekte (Klassennamen im Funktionsprototyp angeben), Schnittstellen, Arrays (ab PHP 5.1) oder aufrufbar (ab PHP 5.4) angegeben werden. Wenn Sie jedoch NULL als Standardwert des Parameters verwenden, können Sie beim Aufruf der Funktion weiterhin NULL als tatsächlichen Parameter verwenden.

Wenn eine Klasse oder Schnittstelle eine Typbeschränkung angibt, gilt dies auch für alle ihre Unterklassen oder Implementierungen.

Typeinschränkungen können nicht für Skalartypen wie int oder string verwendet werden. Auch Eigenschaften sind nicht erlaubt.

Beispiel #1 Typbeschränkungsbeispiel

<?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;;
    }
?>
Nach dem Login kopieren

Wenn die Parameter eines Funktionsaufrufs nicht mit den definierten Parametertypen übereinstimmen, wird ein abfangbarer schwerwiegender Fehler ausgegeben.

<?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);
?>
Nach dem Login kopieren

Typbeschränkungen werden nicht nur in Klassenmitgliedsfunktionen verwendet, sondern auch in Funktionen:

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

Typbeschränkungen erlauben NULL-Werte:

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

   test(NULL);
   test(new stdClass);
?>
Nach dem Login kopieren
Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage