时间:2021-07-01 10:21:17 帮助过:6人阅读
PHP中函数参数有类型约束。那就是,明确要求参数的类型。比如以下代码:
?
?
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))的形式。?)以下是有默认值的原码:
?
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); //结果传入的数组未变。 ?>
?
?
?
?
?
?
1 楼 dewei 2011-01-25
php5中,对象是不需要引用(&)的,大的数组是需要引用(&)的。2 楼 tonyseek 2011-01-26
楼主说的类型约束好像也适用于PHP中的Interface3 楼 renzhen 2011-05-20
dewei 写道php5中,对象是不需要引用(&)的,大的数组是需要引用(&)的。4 楼 reeze 2011-06-02
对效率应该是没有影响的,非要对比,对类型的检查倒是增加了计算。5 楼 iminto 2011-06-27
bardo 写道如果显式指定参数是某种类型的变量,则参加快PHP的程序效率。
?
说话要付责任的。