class Test {
public function test1($var = 'not set'){
echo $var;
}
}
$test_ob = new Test();
$test_ob->test1($var); // echo not set
$var = "Hello world";
$test_ob->test1($var); // echo Hello world
注意:未定义的变量:行 [......] 中的var 9
我希望能够将未设置的变量作为参数传递,并将其设置为 not set 。
但似乎这是不可能的......任何人都有任何想法?
答案 0 :(得分:2)
正如@JonathanKhun所说,“真的没有办法做到这一点”。我能推荐的最好的是一个辅助函数,它提供默认的if-not-set行为,并将其用作你想要这种行为的函数的包装器。
<?php
function default_if_not_set(&$value = '') {
return $value;
}
function test($foo) {
echo "[$foo]" . PHP_EOL;
}
$bar = 'I am bar';
test($bar); // echoes "[I am bar]"
test(default_if_not_set($bar)); // also echoes "[I am bar]"
test($baz); // emits a warning, echoes "[]" -- this is the case you don't want
test(default_if_not_set($baz)); // echoes "[]"
使用default_if_not_set
作为包装器可以通过传递引用默认来绕过警告。这至多是一种技巧,应该被视为某种形式的混淆魔法。
考虑这些替代方法中的任何一种,这些方法更加自我记录:
<?php
isset($baz) && test($baz);
test(isset($baz) ? $baz : ($baz = 'default'));
答案 1 :(得分:1)
以防其他人有这个问题,这是我用@bishop回答
的方式class Test {
public function test1($var){
echo $var;
}
}
$test_ob = new Test();
$test_ob->test1( (isset($var)?$var:'not set') ); // echo not set
$var = "Hello world";
$test_ob->test1($var); // echo Hello world