PHP5的部类约束
程序员文章站
2022-05-26 09:45:12
...
PHP5的类型约束
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); //结果传入的数组未变。?>
?
?
?
?
?
?
上一篇: 求一段查询sql,该如何处理
这个完全视乎你代码的需求,如果你希望函数内参数改变而函数外也变,那就用&,否则不用。
那如果函数内的参数数组不会改变呢?
其实加和不加都没什么关系。可能有人会说,不加应用不就是传值了吗,大的数组会浪费多少内存啊。
其实PHP 5已经对赋值实现了Zero on copy,简单点说,就是,如果将一个大数组a赋值给b,一开始它们指向的是同一个数组对象,内存不会成倍增加,只有当b改变了(加一个元素等操作),PHP底层才会先复制一个新的a数组,然后再做操作。
这种机制极大的提高了传值赋值的性能,基本上不会影响性能。
详细的信息可以去网上找。
最明显的好处就是能约束接口的使用,减少手动类型检查的代码。能规范接口
如果显式指定参数是某种类型的变量,则参加快PHP的程序效率。
?
说话要付责任的。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论专题推荐
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
认证0级讲师
:公益在线php培训,帮助PHP学习者快速成长!
Copyright 2014-2021 https://www.php.cn/ All Rights Reserved | 苏ICP备2020058653号-1关于我们免责申明赞助与捐赠广告合作