2016-08-17 155 views
0

我是PHP新手。 我正在研究变量范围。PHP变量全局和静态

A variable declared outside a function has a GLOBAL SCOPE and can only be accessed outside a function.

A variable declared within a function has a LOCAL SCOPE and can only be accessed within that function.

The global keyword is used to access a global variable from within a function.

To do this, use the global keyword before the variables (inside the function)

Normally, when a function is completed/executed, all of its variables are deleted. However, sometimes we want a local variable NOT to be deleted. We need it for a further job.

我需要函数内声明的变量是全球性的,所以我可以从函数外部访问它,并在同一时间静态的,所以我可以在功能执行后保留变量的值并再次使用它。 我试图

global static $x; 

,但它不工作。

我需要知道我是否以错误的方式思考我是否是PHP新手。

<?php 
$x = 5; 
function myTest() { 

    echo "x is equal to".$GLOBALS['x'].""; 
    $GLOBALS['x']++; 

} 
myTest(); 
myText(); 

?> 

它只执行第一个myTest()。 ,第二个显示一个错误 致命错误:未捕获的错误:调用未定义会将myText函数()

+1

为什么你需要在函数内全局声明变量?你不能在全球范围内宣布它吗? –

+0

全局变量在函数执行后仍然存在,那么为什么你需要它们是静态的呢? –

+0

如果我有很多函数,比如20,30个函数,那么在函数之外声明变量将是一个糟糕的解决方案,这将是一个大混乱! –

回答

1

只是声明它在全球范围内,然后使用$GLOBALS[]阵列或global关键词来使用该变量中的功能。而且,即使在函数执行后,它们仍然保留该值,因此您也不需要关键字static

研究$GLOBALSVariable scope

+0

请在编辑完问题后再看看,以了解我有什么问题。 –

+0

@KareemAbdelwahed可能你在调用函数的时候犯了一个输入错误,因为首先定义了myTest()函数,然后调用了这个函数,但是之后调用了另一个名为myText()的函数,这个函数在这里没有定义。这就是错误发生的原因! –

+0

@KareemAbdelwahed希望这可以帮助你加上你可以检查出我加入的链接,以了解更多关于变量范围的信息 –

0

可以使用静态或全局保留值:

function doStuff() { 
    $x = null; 

    if ($x === null) { 
    $x = 'changed'; 
    echo "changed."; 
    } 
} 
doStuff(); 
doStuff(); 

的结果将是:changed.changed.

如果你使用:

function doStuff() { 
    static $x = null; 

    if ($x === null) { 
    $x = 'changed'; 
    echo "changed."; 
    } 
} 
doStuff(); 
doStuff(); 

结果将会是changed.因为静态保持,即使你调用函数多时间 也是全球有,因为它的定义相同的结果,所以你也可以使用最后一个值:

global $x; 
的作用和效果

将是相同的:changed.