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

2022-08-30 16:06:52

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

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

像这样:

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

function b()
{
 echo $var;
}

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


答案 1

这里最干净的解决方案是制作类的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();

答案 2

当然,你可以做全局函数,但是 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
?>

在此代码板示例中试用


或者可能更有用:

<?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
?>

在此代码板示例中试用

从文档中:

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


推荐