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

Dug*_*ugi 21 php variables function

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

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

就像是:

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

function b()
{
 echo $var;
}
Run Code Online (Sandbox Code Playgroud)

对不起,如果这个问题有点傻,但我还是初学者=).

lon*_*day 16

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

class SomeClass
{
    private static $a = 1;

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

    public static function b() {
        echo self::$a;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

SomeClass::a();
SomeClass::b();
Run Code Online (Sandbox Code Playgroud)


Pet*_*tai 9

当然你可以做全局变量,但PHP 5.3.0+有匿名函数,所以你也可以做闭包:

<?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
?>
Run Code Online (Sandbox Code Playgroud)

在这个Codepad示例中尝试一下


或者可能更有用:

<?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
?>
Run Code Online (Sandbox Code Playgroud)

在这个Codepad示例中尝试一下

来自文档:

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


fre*_*ley 7

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

a();
b();
Run Code Online (Sandbox Code Playgroud)

输出:

2
Run Code Online (Sandbox Code Playgroud)


Pav*_*dav 5

像这样 。您可以使用

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

function b()
{
 global $var; 
 echo $var;
}
Run Code Online (Sandbox Code Playgroud)