【发布时间】:2013-09-03 15:36:09
【问题描述】:
我有一个名为 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>
...
_ 方法将确定语言设置,并以正确的语言输出字符串。我想我只是想跳过清理页面上每一件事的开销,而不是仅仅清理用户输入(尤其是,因为这个函数被频繁地调用非常)
【问题讨论】:
-
消毒是什么意思?
-
据我所知这是不可能的。例如,尝试将 var_dumping
$bar作为直接字符串和 var 参数,它是 100% 相同的。您最多可以测试函数内部的变量类型(isInt、isDouble 等) -
@FaceOfJock 在以 HTML 形式显示(或存储到数据库)之前清理输入。这是more
-
@RUJordan 是的,我也试过
var_export,但它没有区分这两个实例:(
标签: php string parameter-passing