回答
但是按照惯例,你可以跳过参数在该位置通过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
}
thanx亚历克斯,但有没有其他方式直接传递...就像我有超过5个参数,我想只通过第五个? – drrajgor 2012-07-18 16:08:14
@drrajgor你可以显示你想要做的具体功能吗? – DaveRandom 2012-07-18 16:09:59
喜欢传球$ B = 4,我的函数的参数是乐趣($ A,$ B,$ c)现在可以通过我们的乐趣($ B),这将是在中$ B变量店? – drrajgor 2012-07-18 16:14:09
函数可以被定义,以便它们不需要所有的参数。例如:
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)
并相应地使用它们。数组对于简单的可变长度函数非常有用,但是如果您要检查每个标签做些什么,那么就会出现问题。
OP精确“没有交换可变位置” – 2012-07-18 16:12:38
@AlexBelanger我也指定了另一种方法。我知道他详细说明了这一点,但是他没有给我们很多背景,而且经常会有不合理的偏好。我已经看到了很多答案,这些答案改变了提问者关于某个事情的看法 – Raekye 2012-07-18 16:12:39
我回复了,因为我做了类似的评论,但删除了它。我认为他的代码设计不好,这不是PHP问题。 – 2012-07-18 16:13:40
如果你只是想传递一个参数,你可以做一个包装函数这样的:
function PassOne($arg)
{
fun1(NULL,$arg);
}
function fun1($a,$b)
{
echo $b;
}
不,我问一个简单的问题。我们是否可以将特定值传递给仅默认参数的特定参数? – drrajgor 2012-07-18 16:39:27
没有。当你定义函数时,它期望所有的参数都被传递。你可以传null null – CountMurphy 2012-07-18 16:46:40
ohk谢谢CountMurphy我终于放弃了:) – drrajgor 2012-07-18 17:11:20
原谅任何错误。我用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.
}
- 1. 将参数值传递给javascript函数
- 2. 将参数传递给绑定函数
- 3. 是否可以将值传递给PHP中函数的参数?
- 4. 将参数数组与参数传递给PHP中的函数?
- 5. 无法将值传递给PHP函数
- 6. 将值传递给函数
- 7. 将参数传递给Compose的函数?
- 8. 将数组传递给函数参数
- 9. 值传递给特定的参数在PHP
- 10. PHP:将参数传递给函数,但在参数
- 11. 如何将参数传递给传递给mapPartitions的函数?
- 12. 将值作为函数参数传递给匿名函数
- 13. 参数传递给函数
- 14. 参数传递给函数
- 15. 参数传递给函数
- 16. 将参数传递给onclick函数dymamically
- 17. 将宏参数传递给宏函数
- 18. 将参数传递给回调函数
- 19. 将参数传递给原型函数
- 20. VBScript:将参数传递给函数
- 21. 将参数传递给mouseEvent函数
- 22. 将参数传递给函数空间
- 23. 将参数传递给函数
- 24. 将日期参数传递给函数
- 25. Python - 将参数传递给函数
- 26. 将参数传递给函数
- 27. jquery - 将参数传递给函数
- 28. 将多个参数传递给函数
- 29. 将参数传递给函数
- 30. 将参数传递给回调函数
在上面的例子中...我想在函数参数中传递123值到$ b变量而不交换两个变量的位置。 – drrajgor 2012-07-18 16:04:49
像这样'(NULL,NULL,NULL,NULL,123);'如果你必须这样做:还是功能设计不当,或者它需要内置它将检查,让这样的“随意”使用。 – 2012-07-18 16:09:06