php a链接怎么传id_PHP函数参数的传递

PHP 支持两种参数传递方式,分别是按值传递(默认)和按引用传递。另外,PHP 还支持默认参数和可变长度参数列表。

参数传递方式

在调用函数时需要向函数传递参数,被传入的参数称作实参,而函数定义的参数为形参。PHP 中函数参数传递有 2 种方式:按值传递和通过引用传递。

按值传递

按值传递的参数相当于在函数内部有这个参数的备份,即使在函数内部改变参数的值,也并不会改变函数外部的值,示例如下:

function test($a){

$a = $a + 1;

return $a;

}

$a = 1;

echo test($a);

test(2);

echo $a;

?>

执行以上代码的结果为:

2 3 1

通过引用传递参数

如果希望允许函数修改它的参数值,就必须通过引用传递参数。这样我们在函数内部是对这个参数本身进行操作。示例如下:

function test(&$a){

$a = $a + 1;

return $a;

}

$x = 1;

echo test($x);

echo $x;

?>

当调用一次 test() 函数后,$x 的值被改变,执行以上代码的运行结果为:

2 2

注意,以下这种情况 PHP 会报错:

function test(&$a){

$a = $a + 1;

return $a;

}

test(2); //引用传递的参数必须是一个变量

?>

执行以上代码会报错“Fatal error:Only variables can be passed by reference”。

默认参数

PHP 支持函数默认参数,允许使用数字、字符串、数组、NULL 等作为默认参数。默认参数的值必须是常量表达式,不能是诸如变量、类成员或者函数调用等。

默认参数示例如下:

function test($arr=array('lily','andy','ricky'), $str='apple'){

echo "I am $arr[1],I love $str
";

}

$names = ['sily','celon','tom'];

$fruit = 'orange';

test();

test($names,$fruit);

?>

执行以上代码的结果为:

I am andy,I love apple

I am celon,I love orange

为了避免出现意外情况,一般将默认参数放在非默认参数的右侧。下面是一个反面教材:

function?makeyogurt($type="acidophilus", $flavour){

return "Making a bowl of $type? flavour.\n";

}

echo makeyogurt("raspberry");

?>

报错信息:

Warning: Missing argument 2 for makeyogurt(), called in /Library/WebServer/Documents/book/str.php on line 284 and defined in /Library/WebServer/Documents/book/str.php on line 279

Making a bowl of raspberry .

若将$type="acidophilus"放在参数的最右侧,则不会报错。

参数类型声明

在 PHP 5 中已引入函数的参数类型声明,如果给定的值不是一个合法的参数类型,那么在 PHP 5 中会出现一个 Fatal error,在 PHP 7 中则会抛出一个 TypeError exception。在 PHP 7 中增加了参数可声明的类型种类。PHP 中函数可声明的参数类型如表所示。

参数声明类型

类型

说明

PHP 版本

class/interface name(类,接口)

参数必须是指定类或接口的实例

PHP 5.0.0

Array

参数为数组类型

PHP 5.1.0

Callable

参数为有效的回调类型

PHP 5.4.0

Bool

参数为布尔型

PHP 7.0.0

Float

参数为浮点型

PHP 7.0.0

Int

参数为整型

PHP 7.0.0

String

参数为字符串

PHP 7.0.0

class/interface name(类,接口)

参数必须是指定类或接口的实例

PHP 5.0.0

Array

参数为数组类型

PHP 5.1.0

指定参数类型为 class 类型的实例如下:

class C{}

class D extends C{} //类D继承自类C

class E{}

functionf(C$c){

echo?get_class($c)."\n";

}

f(new C);

f(new D);

f(new E);

?>

执行以上程序的结果是:

C D

Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in /Library/WebServer/Documents/book/str.php on line 293 and defined in /Library/WebServer/Documents/book/str.php:287 Stack trace: #0 /Library/WebServer/Documents/book/str.php(293): f(Object(E)) #1 {main} thrown in /Library/WebServer/Documents/book/str.php on line 287

默认情况下,当传递的参数不是函数指定的参数类型时,PHP 会尝试将所传参数转换成指定参数类型。例如,一个函数希望得到一个字符串类型的参数,但假如给其提供的是一个整型参数,PHP 就会自动将其转换成字符串类型,或者一个函数希望得到一个整型参数,但却给它传递了一个浮点型的参数。示例如下:

function test(int $a,string $b,string $c){

echo ($a + $b);

echo " the string is $c";

}

test(3.8,2,'hello');

?>

执行以上代码的打印结果为:

5 the string is hello

注意,在将浮点型转成整型时,只取其中的整数部分。

在 PHP 7 中,可以使用 declare(strict_types=1) 设置严格模式,这样只有在传递的参数与函数期望得到的参数类型一致时才能正确执行,否则会抛出错误。只有一种情况例外,就是当函数期望得到的是一个浮点型数据而提供的是整型时,函数也能正常被调用。请看如下示例:

declare(strict_types=1);

function test(int $a,int $b,string $c){

echo ($a + $b);

echo " the string is $c";

}

test(3.8,2,'hello');

?>

此处 declare 声明了 PHP 为严格模式,而传入的参数与函数期望得到的参数类型不一致,所以会报错,如下所示:

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be of the type integer, float given, called in /Library/WebServer/Documents/book/str.php on line 285 and defined in /Library/WebServer/Documents/book/str.php:281 Stack trace: #0 /Library/WebServer/Documents/book/str.php(285): test(3.8, 2, 'hello') #1 {main} thrown in /Library/WebServer/Documents/book/str.php on line 281

可变参数

在 PHP 5.6 及以后的版本中,参数可包含…来表示函数可接受一个可变数量的参数,可变参数将会被当作一个数组传递给函数。示例如下:

function test(...$num){

$acc = 0;

foreach ($num as $key => $value) {

$acc += $value;

}

return $acc;

}

echo test(1,2,3,4);

?>

给 test() 函数传递的参数 1234 在函数内部将会被当作数组处理,运行以上代码的结果为:

10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware converte报错记录

物理机:centos7.2虚拟化:esxi6.0在进行P2V的时候,尝试了最新的VMware converte6.1及5.5均失败告终。最后在VMware converte6.0中解决迁移问题。转载于:https://blog.51cto.com/bigpi/1758352

php时区问题,PHP中遇到的时区问题解决方法

最近在学习PHP过程中发现PHP中的格式化时间戳比北京时间晚了8个小时,上网搜索发现原来是时区不对,解决办法是:1、永久修改更改php.ini文件中的data.timezone PRC 这是中国时间。重启Apache服务后生效。2、临时修改在使用格式化输入时间之前…

OSG开发概览

1 OSG基础知识 OSG是Open Scene Graphic 的缩写,OSG于1997年诞生于以为滑翔机爱好者之手,Don burns 为了对滑翔机的飞行进行模拟,对openGL的库进行了封装,osg的雏形就这样诞生了,1998年Don burns 遇到了同样喜欢滑翔…

hbuilder php xdebug,Hbuilder使用xdebug配置php断点调试

2019独角兽企业重金招聘Python工程师标准>>>##1. 背景不得不说Hbuilder是免费的前端开发工具中比较好用的,而且配合aptana开发php也马马虎虎(毕竟写前端的时候多些)。本人原是搞java的,后来打算用php做些个人项目(因为服务器成本低)&#xff0c…

iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数

iwpriv工具通过ioctl动态获取相应无线网卡驱动的private_args所有扩展参数iwpriv是处理下面的wlan_private_args的所有扩展命令,iwpriv的实现上,是这样的,>main>set_private>iw_get_priv_info获取wireless网卡所能处理的所有wlan_private_args类型.dev_ioctl>wext_…

PHP登录表单提交前端验证,form表单提交前先用ajax进行验证(前端)

确 定var csrfToken Yii::$app->request->csrfToken?>;var reg /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;var regNum /^\d{6}$/;function check_form() {n false;//全局变量,以便下面做判断var dirversNum $(#dirversNum).val();var archivesNu…

用鼠标去控制物体移动的方法

using UnityEngine; using System.Collections;public class hero : MonoBehaviour {private bool isMouseDown false;private Vector3 lastMousePositionVector3.zero;void Update () {PlayerControler();}public void PlayerControler(){//将像素位置转换成世界坐标轴的位置…

php获取flash上传视频文件大小,如何获取flash文件(.swf文件)的长度和宽度

Flash文件一般是可以缩放的,但缩放显示会一影响flash的效果,比如动作变慢或变快。要想以最佳状态显示,就需要获取flash文件的长度和宽度,因此要使用方法:引入该文件Require(‘swfheader.class.php’);创建一个类的实例…

mx播放器有没有投屏功能_无线投屏、即插即用,投影仪其实可以更智能:明基 E580T...

无论是简单的办公室会议还是小型的线下活动,投影仪都是必不可少的利器:既能有不错的显示效果,也不用受屏幕尺寸的约束。尽管越来越多的智能电视可供电脑连接,但真正派上用场的时候,拎箱就走的投影仪显然是最佳选择。很…

特殊矩阵-对角矩阵

2019独角兽企业重金招聘Python工程师标准>>> 挖坑。 转载于:https://my.oschina.net/aslanjia/blog/651503

php常见漏洞修复,phpstudy漏洞修复方法

一.通过修改服务器环境内php.ini文件,将“expose_php On”修改成“expose_php Off”然后重启php即可。二.若无需要可以将一些php的危险函数禁用,打开/etc/php.ini文件,查找到 disable_functions,添加需禁用的以下函数名&#xf…

vs运行时候冒了这个错:无法启动IIS Express Web 服务器~Win10

后期会在博客首发更新:http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 网上的方法多种,有让安装扩展插件的,有让在程序里面添加Http系列的组件,有其它其它的,可是。。。…

matlab脚本 定时停止_一触即发是什么软件?它是手机上极其强大的一款脚本辅助精灵...

一触即发app是手机上极其强大的一款免root的脚本辅助软件,堪称一键秒杀脚本精灵,除自动化、运行、管理外,还提供了脚本制作文字教程/视频教程,学习社区和图色处理、定时执行、王者荣耀、变量等命令参数和多点找色、多点找图、京东…

php无限极,php实现无限极分类 - MyClassPHP-Colin主页 - OSCHINA - 中文开源技术交流社区...

/*** 无限分类* param [type] $model 一个模型对象* param integer $pid 上级ID* param array &$categorys 一个保存结果的数组* param integer $spac 空格循环次数* return [type] array*/function data2array($model null , $pid 0 , &$categorys array() , $spac…

Graph(2014辽宁ACM省赛)

问题 F: Graph 时间限制: 1 Sec 内存限制: 128 MB提交: 30 解决: 5[提交][状态][论坛]题目描写叙述 Your task is to judge whether a regular polygon can be drawn only by straightedge and compass. The length of the straightedge is infinite. The width of the compa…

笔记本电脑处理器_高通提示低成本5G芯片更强大的笔记本电脑处理器

高通公司总裁克里斯蒂亚诺阿蒙(Cristiano Amon)在今天的柏林IFA贸易展览会的虚拟主题演讲中说,我们将很快看到更便宜的5G手机,以及更多具有更好应用兼容性的Windows-on-Snapdragon笔记本电脑。欧洲主要的电子产品展览会IFA今年被分成​​几个小组活动&am…

php分布式的锁,laravel分布式并发锁

环境要求1.PHP > 72.composer3.redis(必须支持lua)4.prediscomposer 安装redis 安装predis 安装composer require predis/predislock 安装第一步, 安装alravel-lockcomposer require nabao/laravel-lock第二步, 生成配置文件php artisan vendor:publish --provider"Loc…

linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现。#include int gpio_request(unsigned gpio, const char *label);获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port。非空的label指针有助于诊断。主要告…

为什么6lowpan 要有四个地址_大型监控网络系统如何规划ip地址

本文转自网络对于监控项目来说,很多故障的原因都是跟ip地址设置不当有关,如ip冲突,或者有几路监控图像没有显示等,都是跟ip有一定关联,合理的分配ip地址十分重要。一、为什么要合理分配IP对于小型监控项目来说&#xf…

php 伪静态规则,在线将Apache Rewrite Rules伪静态规则转换为Nginx Rewrite伪静态规则...

一般php的开发者本地使用的都是使用apache服务器,使用伪静态的时候每次都需要转换成nginx rewrite规则,于是做了个在线将Apache htaccess Rewrite伪静态规则自动转换为Nginx Rewrite伪静态规则的工具使用这个工具可以自动的把下面的apache伪静态规则自动…