提问人:aborted 提问时间:10/10/2010 最后编辑:Galenaborted 更新时间:4/4/2017 访问量:33461
我可以在PHP中的不同函数之间共享变量吗?
Can I share variables between different functions in PHP?
问:
我会试着用一个例子来解释......
假设我有两个不同的函数,其中一个有一个定义的变量。在第二个函数中,我不想再次编写相同的变量,我可以在第二个函数中简单地使用第一个函数中的变量而不在第二个函数中重新定义它吗?
像这样:
function a()
{
$var = "my variable";
}
function b()
{
echo $var;
}
对不起,如果这个问题有点傻,但我仍然是一个初学者=)。
答:
8赞
fredley
10/10/2010
#1
$a = 1;
function a(){
global $a;
$a = 2;
}
function b(){
global $a;
echo $a;
}
a();
b();
输出:
2
评论
1赞
user359996
10/10/2010
如果提问者还不了解全局变量,他们显然是一个极端的新手。一些解释性文字将具有指导意义。
1赞
Andy Lester
10/10/2010
这是一种方法,但它为您提供了全局变量。全局变量是可维护软件的祸根,所有程序员,尤其是PHP程序员,最好不要使用它们。
0赞
aborted
10/10/2010
如果函数的位置不同,让我们想象一下函数 b() 是第一个,然后是函数 a(),这个仍然适用吗?
11赞
Peter Ajtai
10/10/2010
#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
?>
在此 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
?>
在此 Codepad 示例中试用
从文档中:
闭包还可以从父作用域继承变量。任何此类变量都必须在函数标头中声明。从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,无论执行什么函数,全局变量都是相同的。闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数)。
评论
0赞
user359996
10/10/2010
有趣的错别字一致性(两次都是“拳头”而不是“第一次”)。
0赞
Peter Ajtai
10/10/2010
@user359996 - 谢谢。复制粘贴将做到这一点;)
16赞
lonesomeday
10/10/2010
#3
这里最干净的解决方案是将 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赞
Marcus Adams
10/10/2010
#4
我会这样做。这是一种更常见的实现方式。请记住,函数可以传递参数并可以返回值。
// Main
$a = a();
b($a);
function a()
{
return "my variable";
}
function b($a)
{
echo $a;
}
您拥有程序的主体,并且变量仍保留在该范围内。全局变量很少使用,从技术上讲也从来不需要。$a
5赞
Pavnish Yadav
4/3/2015
#5
喜欢这个。你可以使用
function a()
{
global $var;
$var = "my variable";
}
function b()
{
global $var;
echo $var;
}
-1赞
Dharmendra Barad
4/4/2017
#6
<?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();
?>
此代码有问题,无法打印除法结果
评论
1赞
yakobom
4/4/2017
除了代码之外,了解您的解决方案也很重要 - 请详细说明。另外,不清楚你在最后一句话中想说什么
评论
ctr-k