2012-07-18 75 views
0

可以将值传递给函数中的特定参数吗?php函数,将值传递给特定的参数?

function fun1($a,$b) 
{ 
echo $b; 
} 
@fun1(123); 
+0

在上面的例子中...我想在函数参数中传递123值到$ b变量而不交换两个变量的位置。 – drrajgor 2012-07-18 16:04:49

+1

像这样'(NULL,NULL,NULL,NULL,123);'如果你必须这样做:还是功能设计不当,或者它需要内置它将检查,让这样的“随意”使用。 – 2012-07-18 16:09:06

回答

0

但是按照惯例,你可以跳过参数在该位置通过NULL内置函数:

fun1(NULL, 123); 

显然,这一切没有意义 - 为例如,这是没有意义的:

$result = strpos(NULL, 'a string'); 

对于用户定义的函数,这取决于您以任何您认为合适的方式处理参数 - 但您可能会发现func_get_arg()/func_get_args()对使用​​不确定数量参数的函数有用。

另外,不要忘记你可以通过定义默认值,使参数可选:

function fun ($arg = 1) { 
    echo $arg; 
} 

fun(2); // 2 
fun(); // 1 

请注意,默认值只能在最右边的参数进行定义。如果右侧的参数没有参数,则不能给参数一个默认值。所以这是非法的:

function fun ($arg1 = 1, $arg2) { 
    // Do stuff heere 
} 
+0

thanx亚历克斯,但有没有其他方式直接传递...就像我有超过5个参数,我想只通过第五个? – drrajgor 2012-07-18 16:08:14

+0

@drrajgor你可以显示你想要做的具体功能吗? – DaveRandom 2012-07-18 16:09:59

+0

喜欢传球$ B = 4,我的函数的参数是乐趣($ A,$ B,$ c)现在可以通过我们的乐趣($ B),这将是在中$ B变量店? – drrajgor 2012-07-18 16:14:09

4

函数可以被定义,以便它们不需要所有的参数。例如:

function foo($a, $b = 2) { 
    echo $a + $b; 
} 

foo(1); //gives 3 

参阅关于默认函数值here

但是,你不能在后面的参数传递,而不指定前面的。一些简单的编程功能参数 - 基础...当你做foo($b)功能不知道该变量是名为b ...它只是获取数据;通常是一个原始类型(在这种情况下是一个int)或一个引用。

你还没有指定你如何使用这些变量,所以你可能想给一个虚拟的值,如“-1”到$a(并在你的函数中处理它)(foo(-1, 123)),或者重写你的函数$ a是具有默认值的第二个参数。 (function foo($b, $a = NULL)

这就是为什么你必须按顺序传递变量;该函数假定您正确使用它,并且它将与函数定义一起传递的值排成一行。 function foo($a, $b)表示“我假设我应该将你的第一个值与a联系起来,你的第二个值联系到b”)。


与您原来的例子function foo($a, $b)

没有背景,所以我只想说,这样做function foo($b, $a = some_default_value)。但是,我假设您同样使用$a$b,因此您可以检查它是否为某种默认无效值并对其执行操作。 但是,如果您的函数根据传递的参数数量执行不同的任务,则可能需要分离函数。

如果您坚持不切换订单,则可以用虚拟值调用foo(-1, 123)并检查它。再次,虽然,同样的问题如上


编辑:你给另一个例子foo($a, $b, $c)你说你想要做foo($b)更新的中间值。请参阅第一段中关于函数如何知道什么参数是什么的解释。

如果你的意思是你想要的变量任意一组传递给一个函数,它知道它有哪些?再次,我不认为这是最好的做法(你需要给我们介绍一下你是如何使用这个更详细),但你可以传递一个关联数组:写这之后

function foo($arr) { 
    if (isset($arr['a'])) { 
     echo $a; 
    } 
    if (isset($arr['b'])) { 
     echo $b; 
    } 
    if (isset($arr['c'])) { 
     echo $c; 
    } 
} 
foo(array('b' => 123)); 

我觉得太可怕了功能:P


<?php 
function FUN1($a, $b) 
{ 
    echo "HI"; 
    echo $b; 
} //$_a= 123; //error_reporting (E_ALL^E_NOTICE^E_WARNING); //$b=23; echo @FUN1(123);//it gives HI123 
?> 

我格式化你的函数。首先,当我尝试打电话时,它不会给我“HI123”。其次,@是不好的做法,真的会减慢代码。第三,因为它不返回任何东西,所以你不需要echo FUN1;你的函数自己打印东西。

你(你的学生)都/会在错误的方向。正如我在我的评论中所说的,函数已经有了一个整理参数的漂亮方法。不要试图做一些有趣的事情,而应该改变你的做法。

上面的例子有没有真正的使用,我敢肯定,在实际的代码,你应该只写不同的功能,当你设置不同的变量。像setA($a) setB($b) setC($c) setAll($a, $b, $c)并相应地使用它们。数组对于简单的可变长度函数非常有用,但是如果您要检查每个标签做些什么,那么就会出现问题。

+0

OP精确“没有交换可变位置” – 2012-07-18 16:12:38

+0

@AlexBelanger我也指定了另一种方法。我知道他详细说明了这一点,但是他没有给我们很多背景,而且经常会有不合理的偏好。我已经看到了很多答案,这些答案改变了提问者关于某个事情的看法 – Raekye 2012-07-18 16:12:39

+1

我回复了,因为我做了类似的评论,但删除了它。我认为他的代码设计不好,这不是PHP问题。 – 2012-07-18 16:13:40

0

如果你只是想传递一个参数,你可以做一个包装函数这样的:

function PassOne($arg) 
{ 
    fun1(NULL,$arg); 
} 


function fun1($a,$b) 
{ 
echo $b; 
} 
+0

不,我问一个简单的问题。我们是否可以将特定值传递给仅默认参数的特定参数? – drrajgor 2012-07-18 16:39:27

+0

没有。当你定义函数时,它期望所有的参数都被传递。你可以传null null – CountMurphy 2012-07-18 16:46:40

+0

ohk谢谢CountMurphy我终于放弃了:) – drrajgor 2012-07-18 17:11:20

0

原谅任何错误。我用PHP编码已经有一段时间了。

如果你想确保参数的顺序,你可以通过一个单一的数组作为参数。

$args = array(
    'name' => 'Robert', 
    'ID' => 12345, 
    'isAdmin' => true 
); 

example($args); 

function example($args) 
{ 
    echo $args['name']; // prints Robert 
    echo $args['ID']; // prints 12345 
    echo $args['isAdmin']; // prints true 
} 

使用这种方法,还可以硬编码的默认值到函数,替换它们只有当他们在参数数组中会提供。例如:

$args = array(
    'name' => 'Robert', 
    'ID' => 12345 
    // Note that I didn't specify whether Robert was admin or not 
); 

example($args); 

function example($args) 
{ 
    $defaultArgs = array(
     'name' => '', 
     'ID' => -1, 
     'isAdmin' => false // provides a default value to incomplete requests 
    ); 

    // Create a new, mutable array that's a copy of the default arguments 
    $mixArgs = $defaultArgs; 

    // replace the default arguments with what was provided 
    foreach($args as $k => $v) { 
     $mixArgs[$k] = $v; 
    } 

    /* 
     Now that we have put all the arguments we received into $mixArgs, 
     $mixArgs is mix of supplied values and default values. We can use 
     this fact to our advantage: 
    */ 

    echo $mixArgs['name']; // prints Robert 

    // if ID is still set to the default value, the user never passed an ID 
    if ($mixArgs['ID'] == -1) { 
     die('Critical error! No ID supplied!'); // use your imagination 
    } else { 
     echo mixArgs['ID']; // prints 12345 
    } 

    echo mixArgs['isAdmin']; // prints false 

    // ... etc. etc. 
}