PHP在函数体中传递与接收参数

func_num_args()与func_get_args()
服务器君一共花费了223.909 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

在PHP的函数中,参数传递可以分为值传递和引用传递(也称为地址传递)两种。

默认情况下,PHP是按值传递参数的。值传递参数调用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称为形参)。值传递的特点是实参与行参分别存储在内存中,是两个不相关的独立变量。因此,在函数内部改变形参的值时,实参的值一般是不会改变的。

 引用传递(按地址传递)的特点是实参与行参共享一块内存。因此,当形参的值改变的时候,实参的值也会相应的做出改变。从这种角度上说,可以认为形参合实参是同一个变量。

 定义引用传递参数时,可以在参数前面加上引用符号&。

<?php
function printString(&$string){
	echo($string);
	$string="打印完成";
}

$str="测试字符!n";
printString($str);
echo($str);
?>

// 程序输出:测试字符! 打印完成

php还支持可变长度的参数列表。在定义函数时,不指定参数。在调用函数时,可以根据需要指定参数的数量,通过与参数相关的几个系统函数获取参数信息。具体说明为:

<?php
	function mysum()
	{
		$num = func_num_args();
		echo("函数包含:".$num."个参数n");
		$sum = 0;
		
		for($i=0; $i < $num; $i++)
		{
			$sum = $sum + func_get_arg($i);
		}
		echo("参数累加纸盒为:".$sum);
	}
	
	mysum(1,2,3,4);
?>

// 程序输出:函数包含:4个参数 参数累加纸盒为:10

func_num_args函数功能:返回传递到函数的参数数目,其语法如下 : int func_num_args (void )。说明 : 返回传递到目前定义函数的参数数目。如果是从函数定义的外面来呼叫此函数,则func_get_arg( )将会产生警告。

func_num_args( )可以用来结合func_get_arg( )和func_get_args( )来允许使用者定义的函式接受variable-length参数列表。其中,func_get_arg( )从参数列表返回项目,其语法:int func_get_arg (int arg_num),传回定义函数的参数列表的第arg_num个参数,其参数从0开始。且函数定义的外面来呼叫此函数会产生警告;并且当arg_num大于函数实际传递的参数数目时亦会产生警告并返回FALSE。

func_get_args()函数和func_get_arg()函数的区别在于,func_get_args()函数传回一数组,数组的各个元素相当于是目前使用者定义函式的参数列的数目。

在我们构建PHP类的时候,灵活使用这三个函数,可以起到非常理想的效果,例如外面在创建PHP和MYSQL链接的类时,可以书写如下代码:

<?php
class mydb {
	private $user;
	private $pass;
	private $host;
	private $db;
	
	public function __construct(){
		$num_args=func_num_args();
		if($num_args>0){
			$args=func_get_args();
			$this->host=$args[0];
			$this->user=$args[1];
			$this->pass=$args[2];
			$this->connect();
		}
	}
}
?>

再给出一个示例程序:

<?php
function foo() {
	$numargs = func_num_args();
	echo "Number of arguments: $numargs<br>n";
	if ($numargs >= 2) {
		echo "Second argument is: " . func_get_arg (1) . "<br>n";
	}
	$arg_list = func_get_args();
	for ($i = 0; $i < $numargs; $i++) {
		echo "Argument $i is: " . $arg_list[$i] . "<br>n";
	}
}
foo (1, 2, 3);
?>

本文地址:http://www.nowamagic.net/librarys/veda/detail/917,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/917

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《代码之美》 聂雪军 (译者)

《代码之美》介绍了人类在一个奋斗领域中的创造性和灵活性:计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案。《代码之美》33章,有38位作者,每位作者贡献一章。每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中,张力十足。38位大牛,每个人对代码之美都有自己独特的认识,现在一览无余的放在一起,对于热爱程序的每个人都不啻一场盛宴。 虽然《代码之美》的涉猎范围很广,但也只能代表一小部分在这个软件开发这个最令人兴奋领域所发生的事情。

更多计算机宝库...