簡體   English   中英

如果在函數前全局更改變量,為什么不起作用?

[英]Why doesn't work if I change variables global, before the function?

下一個PHP代碼使名稱的首字母大寫,其他的小寫:

<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
 global $a1;
 global $a2;
 global $a3;
 $a1 = ucfirst(strtolower($a1));
 $a2 = ucfirst(strtolower($a2));
 $a3 = ucfirst(strtolower($a3));
}
/*Output: William Henry Gates*/
?>

如果我將變量作用域更改為函數的全局作用域,它將不起作用:

<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
global $a1;
global $a2;
global $a3;
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
$a1 = ucfirst(strtolower($a1));
$a2 = ucfirst(strtolower($a2));
$a3 = ucfirst(strtolower($a3));
}
/*Output: WILLIAM henry gatES*/
?>

請向我解釋為什么它不起作用!

默認情況下,函數內部使用的任何變量都限於局部函數范圍。 例如:

<?php
    $a = 1; /* global scope */ 

    function test()
    { 
        echo $a; /* reference to local scope variable */ 
    } 

    test();
?>

該腳本不會產生任何輸出,因為echo語句引用$a變量的本地版本,並且未在此范圍內為其分配值。 您可能會注意到,這與C語言略有不同,因為C中的全局變量會自動提供給函數,除非被本地定義明確覆蓋。 這可能會導致一些問題,因為人們可能會無意中更改全局變量。

在PHP中,如果要在函數中使用全局變量,則必須將其聲明為全局變量。

參考: http : //php.net/variables.scope

因此,為了從函數外部訪問變量,您需要在函數內部聲明它們是global的,否則,您將嘗試對甚至不存在於變量$a1中的變量$a1進行ucfirst(strtolower($a1))當前(本地)范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM