将方法设置为未设置变量的默认值

时间:2014-12-08 23:31:11

标签: php

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

但似乎这是不可能的......任何人都有任何想法?

2 个答案:

答案 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