如何知道传递给函数的参数是变量还是字符串?

时间:2013-08-30 20:15:47

标签: php string parameter-passing

我有一个名为myFoo的函数,它对传递给它的字符串执行一些操作(在这种情况下,为了简单起见,它只是打印出来)。

我希望这个功能以这种方式运作:

  • 使用变量调用时,如myFoo($myBar);所示,我希望在打印出来之前对其进行清理。

  • 使用字符串调用时,如myFoo("My name is Bar");所示,我希望它跳过字符串清理位。

函数myFoo如下所示:

public function myFoo($bar) {
    // Determine if $bar was a string, or a variable
    if([$bar was passed as a variable]) {
        // Sanitize it
        $bar = filter_var($bar,FILTER_SANITIZE_STRING);
    }
    // Otherwise, just print it out without sanitization

    // Print it
    echo $bar;
}

我应该在if语句中写什么来确定参数是直接字符串还是字符串变量?这甚至可能吗?谢谢!

更新 - 进一步说明

我可能应该早些时候澄清我的意图..这里是: 所以我实际上是想用它来翻译我的PHP网站上的所有文本(跨所有页面)。所以,而不是写这样的东西:

<html>
<head><title>Welcome to the ACME Co. Homepage</title></head>
<body><h1>Welcome to the ACME Co. Homepage</h1>
...

..我会写这个:

<html>
<head><title><?= _("Welcome to the ACME Co. Homepage"); ?></title></head>
<body><h1><?= _("Welcome to the ACME Co. Homepage"); ?></h1>
...

_方法将确定语言设置,并以正确的语言输出字符串。我想我只是想省略清理页面上每一件事的开销,而不是仅仅清理用户输入(特别是,因为这个函数经常被称为非常)< / p>

1 个答案:

答案 0 :(得分:2)

你无法分辨出来。当使用变量参数调用函数时,函数接收变量的值作为参数。所以在这两种情况下,函数只看到一个字符串。

您可以添加第二个参数,说明该值是否应该清理:

public function myFoo($bar, $sanitize = true) {
    if ($sanitize) {
        $bar = filter_var($bar, FILTER_SANITIZE_STRING);
    }
    echo $bar;
}

然后你可以打电话给它:

myFoo("My name is Bar", false);