在PHP中,将变量声明为函数内部的全局变量和将变量作为参数传递给函数之间有什么区别


In PHP, what is the difference between declaring a variable as global inside function, or passing the variable as an argument to the function?

将函数中的变量声明为globalpublic/private与将其作为参数传递给函数有什么区别?

其他相关混淆

最近,我让自己非常头疼,试图将数组变量作为global传递到函数中,并在函数内部编辑它,并希望将其更改后返回。我花了几个小时才弄清楚,我需要通过引用将它作为参数传递到函数,如functionCall(&$arrayVar);

次要问题:但我仍然想知道,为什么将变量作为global传入,然后编辑它并将其与return吐出,或者简单地通过连接到变量数组之类的操作不起作用?

我最近遇到的另一个例子是为PHPMailer创建一个函数,我向它传递几个参数,如电子邮件地址和消息正文,但我也需要向它传递身份验证字符串,如API密钥等

  1. 我不想每次调用PHMailer函数时都必须向它传递身份验证凭据(例如,在几个阶段中的一个阶段发送电子邮件错误消息)
  2. 但我每次都想给它传递独特的论点

所以我认为最好的方法是这样的:

function phpMailer( $mail_to = "to@email.com", $mail_from = "a@b.com" ) {
    global $authCredentials;
}
// And of course, when I call phpMailer, I call it like
phpMailer("that.guy@there.com", "me@here.com");

第三个问题:这是global的适当用法吗?或者我应该用其他方法来做这件事吗?

这里有很多问题,我会试着把它们介绍一遍。。。

将函数中的变量声明为全局变量或将其作为参数传递给函数的公共/私有VS之间有什么区别?

global是一种变量作用域。将变量声明为global通常被认为是不好的做法,你应该尽量避免。通过将变量作为参数传递给函数,代码更可重用,因为你知道函数的期望值,而且它不依赖于一些未知的神秘全局变量。

publicprivateprotected是在面向对象编程中使用的可见性类型。这些基本上决定了其他类如何访问类中的属性和方法。

我花了几个小时才弄清楚我需要通过引用将其作为参数传递到函数中

关于函数需要理解的一点是,除非通过引用传递参数,否则您使用的是变量的副本,而不是原始变量。

为什么不把变量作为global传入,然后编辑它并用return吐出来,或者简单地做一些连接到变量数组的事情?

您不需要将return作为global变量,因为您使用的是原始值。请再次参考上面关于范围的链接。

我最近遇到的另一个例子是为PHPMailer创建一个函数,我向它传递几个参数,如电子邮件地址和消息正文,但我也需要向它传递身份验证字符串,如API密钥等

除了使用global之外,还有几种方法可以实现这一点。如果您计划在多个地方使用此身份验证密钥,最简单的解决方案可能是定义一个常量,例如:

define('AUTH', 'my_key');
function phpMailer( $mail_to = "to@email.com", $mail_from = "a@b.com" ) {
    echo AUTH;
}

但是,函数现在的可重用性降低了,因为它依赖于该常量。一个更好的解决方案可能是将其封装在一个对象中:

class phpMailer()
{
    private $auth = 'my_key';
    public function send($mail_to, $mail_from)
    {
        $this->auth;
    }
}
$mail = new phpMailer();
$mail->send('to@email.com', 'a@b.com');

希望这能有所帮助。上面链接中的在线PHP文档包含了丰富的信息。