Php 在函数中使用变量“$name”

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

我喜欢认为我对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($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)
{
    // ...
}