Php 在函数中使用变量“$name”
我喜欢认为我对php非常了解,但这让我感到困惑 保持基本状态我有:Php 在函数中使用变量“$name”,php,variable-names,Php,Variable Names,我喜欢认为我对php非常了解,但这让我感到困惑 保持基本状态我有: function req_new($pname, $use=null, $depID=null, $manID=null, $manName=null, $suppID=null, $suppName=null, $cat=null, $brand=null, $name, $email, $custom_code, $user=null, $method=null) { //validation if($pna
function req_new($pname, $use=null, $depID=null, $manID=null, $manName=null, $suppID=null, $suppName=null, $cat=null, $brand=null, $name, $email, $custom_code, $user=null, $method=null)
{
//validation
if($pname == ''){return false;}
if($manID==null AND $manName==null){return false;}
foreach(func_get_args() as $arg)
{
$arg = fquery_sanitize($arg);
}
//submit new request
$sql = "insert into sds_product_requests ".
"(prodName, produse, depID, reqDate, manID, manName, suppID, suppName, prodCat, prodBrand, Name, Email, InternalC, `user`, method) ".
"VALUES ".
"('$pname','$use','$depID', NOW(),'$manID', '$manName', '$suppID', '$suppName', '$cat', '$brand', '$name', '$email', '$custom_code', '$user', $method)";
$result = fquery_db($sql);
if($result>1)
{return true;}
else
{return false;}
}
如果代码使用变量名$name,则它不起作用。改用另一个变量名,比如$pname,它可以工作。如果使用变量名$name,则返回false
你知道为什么会这样吗
调用函数
我无法重现OP的现象,至少在OP发布的代码范围内
<?php
function bla($name, $whatever, $bla)
{
if ($name == '') { return false; }
return true;
}
$name = "ORLY?";
echo bla($name, null, null) . "\n"; // prints 1, as expected
?>
$name不是一个特殊的变量名,php仅以_u开头,并且有一些继承的预定义变量。我找不到一个$name处理方式不同的程序。你能提供一个完整的例子吗
请注意,在返回false之后缺少分号。打开查看这些错误。如何调用代码?由于您正在执行常规的相等性测试==,请记住PHP将为您自动转换值,并且有相当多的值等于空字符串 e、 g 仍将触发返回,因为在PHP中,0等同于在相等测试中。0==为真。使用严格相等测试强制检查值和类型:
if ($blah === '') {
return false;
}
这将按预期工作,因为当0==时,严格检查将不可见地附加一个int==字符串检查,该检查的结果为FALSE。根据问题下面的注释-有两个参数名为$name,第二个参数设置为NULL:
你能给出你大部分的代码,也许是整个函数的代码吗?还有,你忘了返回false的分号了吗?@Luzhin:+1,听起来好像是名称冲突导致了问题。PHP现在有可变函数了吗@Tomalak Geret'kal,从版本4开始,我在PHP中使用变量函数已有多年了。看,和,以及。如果说,$bla。。。。第二部分,很明显,它只是一个伪代码。在原始版本中,您使用$name作为第一个参数,并将其与进行比较。在已编辑的版本中,第n个参数为$name,但正在与第一个参数$pname进行比较。从思想上讲,这不是同一个案例。这是一个OP如何未能提供正确的测试案例的演示,而不是他的问题的解决方案+1尽管如此。
bla(0, ...);
if ($blah === '') {
return false;
}
function req_new(
$pname, /* first $name, wich started to work after renaming to $pname */
$use=null, $depID=null, $manID=null, $manName=null, $suppID=null,
$suppName=null, $cat=null, $brand=null,
$name, /* second $name, which was set to NULL and overrode first argument */
$email, $custom_code, $user=null, $method=null)
{
// ...
}