欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP5的类型约束

程序员文章站 2022-05-11 08:51:15
...

PHP中函数参数有类型约束。那就是,明确要求参数的类型。比如以下代码:

 

 

<?php
//如下面的类
class MyClass
{
    /**
     * 测试函数
     * 第一个参数必须为类OtherClass的一个对象
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }


    /**
     * 另一个测试函数
     * 第一个参数必须为数组 
     */
    public function test_array(array $input_array) {
        print_r($input_array);
    }
}

//另外一个类
class OtherClass {
    public $var = 'Hello World';
}
?> 

 

那么,类型约束又有什么关系呢?这里有一个奇特的问题。那就是:

如果显式指定参数是某种类型的变量,则参加快PHP的程序效率。为什么呢?因为,反是对象,PHP5默认是以引用传递的。所以,public function test(OtherClass $otherclass) {
这行代码中,虽没有引用符号,实际也是引用传参。

那么,数组呢?因为,在PHP中我们面对的大数据的类型不外乎三类,对象,数组,字符串,而字符串是要明确在参数表中使用引用符号(&)的。

数组怎样,您试一下就明白了。所以,我不多说了!

 

当对象参数被加上类型约束后,仍可以有默认值,成为可选参数。如果这样,函数内部就要判断,传入参数是否为NULL。但一般是不需要使用 instanceof这个运算符了。 (此运算符比较特别,如果要否定,必须是 (!(A instanceod B))的形式。 )以下是有默认值的原码:

 

<?php

class ca{
    public $name='';
}

class cb{
    public $ca;
    public $color;
    public $array=array();
   //这里我们加上了类型约束,同时也给了默认值。但我们能发现,只有对象是以引用传递的 
   function test($srcStr,$color,ca $ca = null,array $array=null){
        $this->color=$color;
        $this->ca = $ca;
        $this->array = $array;
        $ca->name=$srcStr;
        print_r($this);
    }
}

$cat=new ca();
$cbt=new cb();


$cbt->test('test','red'); //这里我们可以不传对象
$cbt->test('test','blue',$cat); //我们可以传对象,但数组仍不传
print_r($cat); 
$cat1=new ca();
$arr=array(1,2,3,4,5);
$cbt->test('test','black',$cat1,$arr); //数组对象全部传入
array_push($arr,6,7,8,9); //再改变数组
print_r($cbt->array); //结果传入的数组未变。

?>

 

 

 

 

 

 

相关标签: PHP