在以下代码中;有没有办法在函数内部使用变量而不必将它们作为参数传递?
$var1 = 'test';
$var2 = 'another';
function testing(){
print $var1;
}
我读了php全球,但不确定这是不是一个好主意。
我有一个ajax调用,它可以获得大约25个变量,并替换占位符所在的电子邮件正文中的标记。
sendEmail片段在一个函数中,需要访问外部变量才能替换内容。
如果没有function(){}
,其中包含25个变量,是否有其他方法可以实现此目标?
更新
以下是我的代码的示例代码段;我试图这样做的原因。
答案 0 :(得分:0)
$var1 = 'test';
$var2 = 'another';
function testing(){
global $var1;
print $var1;
}
答案 1 :(得分:0)
您可以使用compact()将所有变量放入数组中,然后将其传递给您的函数。
<?php
$data = compact($var1, $var2, $var3, $var4);
testing($data);
function testing($data) {
print $data['var1'];
print $data['var2'];
// Or, if you don't want to use an array here, use extract() to do the
// opposite of compact():
extract($data);
print $var3;
print $var4;
}
答案 2 :(得分:0)
$my_array = array(
'element1' => $var1,
'element2' => $var2
);
function testing($my_array){
print $my_array['element1'];
// or use foreach()
}
答案 3 :(得分:0)
最好的方法是使用oop
class A {
public $var = 'test';
public $var2;
public function test(){
print $this->var;
}
}
$a = new A();
$a->test();
答案 4 :(得分:0)
你不应该使用全局变量,使用OOP。您可以创建一个类作为25个参数的持有者,并使用send
函数
class MyMail {
public $user;
public $subject;
public $body;
public function send() {
// do the send
mail($this->user, $this->subject, ...);
}
}
$mailSender = new MyMail();
$mailSender->user = 'a@b.com';
$mailSender->subject = 'Hello';
$mailSender->send();
答案 5 :(得分:0)
你可以做上面的答案使vars全局.Kinda不好的做法,如果你再次使用它们,你将最终覆盖它们,并使它们可用于攻击。 你应该做什么(将它们写出来)但是如果这样做很多,那么使vars成为一个数组,然后将它们作为数组传递。有可能是以数组形式获取数据。
$vars = array(
'varname1' => 'var_value1',
'varname2' => 'var_value2',
'varname3' => 'var_value3',
);
do_stuff_with_vars($vars);
您可以使用compact在此处建议的其他人快速创建数组。
compact(var,var2,etc);
您的功能应该类似于
function do_stuff_with_vars($array){
//do stuff with array["varnameX"]
}