【问题标题】:Adding variable as a parameter to a function in PHP将变量作为参数添加到 PHP 中的函数
【发布时间】:2026-01-15 19:00:01
【问题描述】:

我有一个非常简单的代码来验证用户名和密码,因为我必须指定一个变量作为函数参数 ,我为什么要指定?因为 functions 的规则是它可以访问其他 function 之外的任何 variable 并且我什至有需要的 constants不被指定为参数。但是我的代码在没有指定 parameters 的情况下无法工作,而 constants 在没有被指定为 parameters 的情况下工作。

//constants
    define('USERNAME','guruprasath');
    define('PASSWORD','123456');
//functions
    function login_check ($username,$password) {
        return USERNAME==$username && PASSWORD==$password ;
    }
if ($_SERVER['REQUEST_METHOD']=='POST') {
    $username = $_POST['name'];
    $password = $_POST['password'];

        if( login_check($username,$password) ) {  //why specify the $username and $password parameter,but not specify for the constants
            $_SESSION['username']=$username;
            header('Location:admin.php');
        }
        else {
            echo 'your password or email  is wrong';
        }
}

【问题讨论】:

  • 常量自动具有全局范围,因为它们是常量,因此无需将它们作为参数从函数传递到函数。引用自PHP DocsLike superglobals, the scope of a constant is global. You can access constants anywhere in your script without regard to scope.
  • 随着程序的增长,您不能只依赖全局变量(将每个变量定义为全局变量会创建一个巨大的列表并且会造成混乱)。这是您需要开始使用具有自己的范围和变量的对象和方法的时候。要协调变量,您需要通过方法传递它们。
  • 虽然变量不是超全局的,至少可以在函数中访问,那么指定一个参数有什么用,为什么要指定是变量被转换为超级全局。 @MarkBaker
  • 常量的意义在于它们在你的脚本执行过程中永远不会改变;变量可以而且确实会改变:在您的示例中,$username$password 是根据用户输入定义的……但是将所有变量都设为全局变量并不好,因为这是一种将细微错误引入您的方法当某些东西改变它们时编写脚本,你需要找出在哪里以及为什么......而作为参数传递的变量在你的控制之下

标签: php function parameters scope


【解决方案1】:

函数有自己的变量作用域,不能访问外部变量,除非这些变量是常量或全局变量,如 $_POST、$_GET 等。

如果你想改变你的函数不使用参数,你可以这样做:

function login_check () {
    return USERNAME==$_POST['username'] && PASSWORD==$_POST['password'] ;
}

您可以在 PHP 中阅读更多内容documentation

【讨论】:

  • javascript 中也一样。
  • a = 5; getA = 函数() { 返回一个; } 可以在 JS 中工作,但不能在 PHP 中工作 - 不,它的工作方式不同