PHP在函数内部使用vars而没有pase param

时间:2014-09-02 22:22:11

标签: php

在以下代码中;有没有办法在函数内部使用变量而不必将它们作为参数传递?

$var1 = 'test';
$var2 = 'another';

function testing(){
    print $var1;
}

我读了php全球,但不确定这是不是一个好主意。

我有一个ajax调用,它可以获得大约25个变量,并替换占位符所在的电子邮件正文中的标记。

sendEmail片段在一个函数中,需要访问外部变量才能替换内容。

如果没有function(){},其中包含25个变量,是否有其他方法可以实现此目标?

更新

以下是我的代码的示例代码段;我试图这样做的原因。

http://pastebin.com/8qYsLg5T

6 个答案:

答案 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"]
    }