我可以在PHP中的不同函数之间共享变量吗?

时间:2010-10-09 22:38:48

标签: php variables function

我会尝试用一个例子来解释......

假设我有两个不同的函数,其中一个函数有一个已定义的变量。在第二个函数中,我不想再次编写相同的变量,我可以简单地使用第二个函数中第一个函数的变量而不在第二个函数中重新定义它吗?

类似的东西:

function a()
{
  $var = "my variable";
}

function b()
{
 echo $var;
}

很抱歉,如果这个问题有点傻,但我还是初学者=)。

6 个答案:

答案 0 :(得分:16)

这里最干净的解决方案是创建一个类的A和B方法,并将公共变量作为私有静态变量。这消除了全局变量的混乱,并允许两个函数全局访问。

class SomeClass
{
    private static $a = 1;

    public static function a() {
        self::$a = 2;
    }

    public static function b() {
        echo self::$a;
    }
}

然后你可以调用这些函数:

SomeClass::a();
SomeClass::b();

答案 1 :(得分:9)

当然你可以做全局变量,但PHP 5.3.0+有 anonymous functions ,所以你也可以做闭包:

<?php

function a(){
  $a = 1;  
  echo "First: $a, ";
  ++$a;

    // This is a closure. It can gain access to the variables of a() with the 
    // use option.
  $b = function() use ($a) {
      echo "second: $a";  
  };  
  $b();
};
a(); // Outputs: First: 1, second: 2
?>

Try it out at this Codepad example


或者可能更有用:

<?php

function a(){
  $a = 1;  
  echo "First: $a, ";
  ++$a;
  $b = function() use ($a) {
      echo "second: $a";  
  };        
  return $b;
};
$fun = a();     // $fun is now $b & $b has access to $a!
$fun();
// Outputs: First: 1, second: 2
?>

Try it out at this Codepad example

来自文档:

  

闭包还可以从父作用域继承变量。必须在函数头中声明任何此类变量。从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,无论执行什么功能,它都是相同的。闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数)。

答案 2 :(得分:7)

$a = 1;
function a(){
  global $a;
  $a = 2;
  }
function b(){
  global $a;
  echo $a;
  }

a();
b();

输出:

2

答案 3 :(得分:4)

喜欢这个。你可以用

function a()
{
  global $var; 
  $var = "my variable";
}

function b()
{
 global $var; 
 echo $var;
}

答案 4 :(得分:2)

我会这样做的。这是一种更常见的实现。请记住,函数可以传递参数并可以返回值。

// Main
$a = a();
b($a);

function a()
{
  return "my variable";
}

function b($a)
{
 echo $a;
}

您拥有程序的主体,变量$a仍然在那里。 Globals很少使用,技术上从不需要。

答案 5 :(得分:-1)

<?php

class A
{
    private $p;
    private $q;
    private $ans;
    public  function hello()
    {
        echo "Hello PratikPatel";
    }
    public function getdata($a,$b)
    {

        $this->p=$a;
        $this->q=$b;
        $ans=$this ->p/$this->q;
        $this->ans=$ans;

    }
    public function div1()
    {
        echo "your division answer is:=".$this->ans."<br/>";
    }
}
class B extends A
{
    function hello()
    {
        echo "Hello "."<br/>";
    }

}

$p=new B();
$p1=new B();
$p2=new B();
$p -> getdata(20,10);
echo $p1 -> hello();
$p2 -> div1();

&GT;

此代码中的问题无法打印除法结果