在变量上堆叠函数是否有问题。它似乎有效,但这样做有潜在的风险或问题吗?
$username = mysql_real_escape_string(strtolower($_POST['username']));
我真的没有看到它的问题,但我对PHP相对较新,我不确定这是否会导致问题。与:相比:
$username = $strtolower($_POST['username']);
$username = mysql_real_escape_string($username);
只是想知道这是否是最好的方法。
答案 0 :(得分:3)
像你提议的那样,mysql_real_escape_string(strtolower($value))
这样的嵌套函数没有问题。它可以使代码易于阅读和理解。我会警告不要过分使用它,然后嵌套许多函数,因为它很快就会变得难以理解。
不要试图嵌套一切。某些功能需要良好的错误检查才能有效使用。与查询和获取相关的mysql_*()
函数应该不嵌套(actually they should not be used at all,而是使用MySQLi或PDO)。在您尝试的情况下嵌套字符串函数是非常安全的,但请始终查看http://php.net处的手册以确保您正在嵌套的函数的可能返回类型。特别注意函数that return resources,例如处理数据库连接,文件句柄,套接字等的函数。
// Don't do this:
// mysqli_query() will return false on failure, which will
// not be a valid argument to mysqli_fetch_array()
$row = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM tbl"));
如果查询失败,则会导致代码出现致命错误,因为传递给最外层函数的对象不是预期的类型。
相反,像这样的情况需要进行错误检查,使嵌套变得不切实际:
$result = mysqli_query($conn, "SELECT * FROM tbl");
if ($result) {
$row = mysqli_fetch_array($result);
}
需要警惕的另一个案例是函数which expect references as their arguments。例如,array_merge()
会返回一个数组,但sort()
需要对数组的引用(因为sort()
没有返回数组,所以无论如何都不会这样做):< / p>
sort(array_merge([3,2,41], [5,1]));
// PHP Strict standards: Only variables should be passed by reference in php shell code on line 1
实际上相关且更可能的用例是将函数返回值传递给empty()
(这在技术上是语言构造而不是函数)。在PHP 5.5之前,只能传入变量,因此以下内容会导致解析错误:
// Error in PHP < 5.5
if (empty(func_returning_string()) {}
答案 1 :(得分:1)
是的,根据需要堆叠尽可能多的函数调用。你的例子不会起作用,因为你错过了一个正确的paren