2016-07-26 44 views
2

将函数中的变量声明为globalpublic/private VS与将函数作为参数传递给函数有什么区别?在PHP中,将变量声明为全局内部函数或将变量作为参数传递给函数有什么区别?

其他相关混乱

我最近引起我大伤脑筋试图AA数组变量传递到一个函数作为global和内部编辑,并希望能回到它改变了,我花了小时弄清楚,我需要它传递到函数作为参考的参数,如functionCall(&$arrayVar);

次要问题:但我仍然不知道,为什么没有工作,传递变量作为global然后对其进行编辑然后用吐出来或简单地通过做像连接到变量数组的东西?

我最近碰到的另一个例子是通过为PHPMailer创建一个函数,其中我传递了几个参数,比如电子邮件地址和邮件正文,但是我还需要传递验证字符串,比如API密钥等。在这里,每次我把它叫做:

  1. 我不希望有我每次调用PHMailer功能时通过它的认证证书
  2. (例如,在几个阶段的一个电子邮件的错误消息)
  3. 但我每次打电话时都想传递唯一的参数

所以我想最好的办法是这样的:

function phpMailer($mail_to = "[email protected]", $mail_from = "[email protected]") { 
    global $authCredentials; 
} 

// And of course, when I call phpMailer, I call it like 
phpMailer("[email protected]here.com", "[email protected]"); 

第三问题:global这个适当的使用还是有我应该做这一些其他的方式?

+0

区别在于后者是明确的。你知道变量来自哪里以及谁有权修改它。 – zerkms

+0

a。他们基本相同 – 2016-07-26 02:46:05

+0

'global'是一个用词不当的人。 PHP并没有真正的全局变量(除了$ _GET/POST/...)。他们总是受限于范围。如果“传入”不起作用,那么通常是因为你在本地作用域中开始并没有相应地重新绑定变量名称。 – mario

回答

2

有很多的问题在这里,我将试图通过他们走......

是什么声明函数,如全球或公共/私人VS内的变量将它传递给一个之间的区别函数作为参数?

globalvariable scope的一种类型。声明一个变量为global通常被认为是不好的做法,你应该尽量避免它。通过将变量作为参数传递给函数,代码更具可重用性,因为您知道函数期望的是什么,并且不依赖于某个未知的神秘全局变量。

public,private, protected是在object oriented programming中使用的visibility的类型。这些基本上决定了一个类中的属性和方法如何被其他类访问。

我花时间弄清楚,我需要通过引用传递给该函数作为参数

东西都懂的功能是,除非你pass arguments by reference您正在使用的拷贝工作变量,而不是原始的。

为什么没有工作,在传递变量global然后对其进行编辑,并通过执行类似串联到变量数组吐了与return回来了或者干脆?

您不需要return a global变量,因为您正在使用原始值。请再次参考上面有关范围的链接。

又如我最近跑进是通过使功能PHPMailer的,在这里我向它传递一些参数,如电子邮件,处理和邮件正文,但我也需要通过它认证字符串,如API密钥

除了使用global之外,还有几种方法可以解决这个问题。如果你打算使用一个以上的地方该认证密钥,最简单的解决办法可能是定义一个constant,例如:

define('AUTH', 'my_key'); 
function phpMailer($mail_to = "[email protected]", $mail_from = "[email protected]") { 
    echo AUTH; 
} 

但同样,功能是现在少可重复使用的,因为它是依赖于那个常数。更好的解决方案可能是将其包装在一个对象中:

class phpMailer() 
{ 
    private $auth = 'my_key'; 

    public function send($mail_to, $mail_from) 
    { 
     $this->auth; 
    } 
} 
$mail = new phpMailer(); 
$mail->send('[email protected]', '[email protected]'); 

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

+0

我还在研究这个和文档,几天后。问题:通过执行'global $ someVar;'是'$ someVar'现在可以通过'$ GLOBALS ['someVar']'获得吗? –

+0

另外,'private ... $ this-> auth;'方法看起来不错,但是我将所有的身份验证密钥都存放在一个节中的'config.ini.php'中(例如'[gmail] api_key =“hello”; [api_2] ...'然后我通过'$ config = file_get_contents(“config.ini.php”);'并且在函数内将它用作'global $ config;'它是否有助于仅实例化身份验证密钥为他们各自的API函数,像'private $ thisAPIConfigArray = $ config [“api_1”];'? –

相关问题