iT邦幫忙

0

function裡面不吃外面的參數宣告?global參數

  • 分享至 

  • xImage

有個好怪的問題
假設我宣告

$self = $_SERVER['PHP_SELF'];

然後我寫了一個function在下面

$self = $_SERVER['PHP_SELF'];

function report(){
    echo $self;
}

然後我再另一頁

report();

他會說

Undefined variable: self

我非得一定要在function 裡面宣告才行嗎?
這樣才可以運行:

function report(){
$self = $_SERVER['PHP_SELF'];

    echo $self;
}

這樣 report();才會運行。
於是知道了 function 裡面要 global 參數
那這樣假設我有20個function
然後有十個變數
我必須20個function都加十個 global 這樣又是另一個問題
有優化寫法嗎 就是讓他能牽一髮動全身的寫法?謝謝~~~

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2018-04-05 02:13:46 檢舉
如果你有那麼多個 function 要用到同一個變數, 那就寫成類別...
另外, 不是用了 function 就叫做 functional programming....
牽一髮能動全身的反義就是:
一死全死!

這叫做「高耦合性」。
基本違反低耦合性原則。
根本一點來說:無法測試。
真的要全域使用你還不如這樣:
```
function report() {
return $_SERVER['PHP_SELF'];
}
```
那麼這個report()就可以全域呼叫了。
將 self 宣告成全域變數呢?

$self = $_SERVER['PHP_SELF'];

function report(){
global $self;
echo $self;
}

report();
不過我很好奇的是……
就算我常常在罵台灣的作者寫書都不更新………
但是幾乎沒有那一本會不告訴你「全域變數」和「區域變數」這件事吧?
你學php的過程中有認真的看完一本書過嗎?
很多人,常常被javascript的變數區域性給害死。

要知道在php中的function內。
它是一個私域空間,除了傳入的值或是全域變數的值可以取到之外。其它是取不到的。

當然你也可以在其functios內,使用global來將參數帶入。
但現在一般來說會建議最好不要這樣使用。

其原因就是上面有人說過的「牽一髮能動全身的反義就是:
一死全死!」

這也是為何在function最好不要用全域變數,採用私域變數的觀念。
就是在防止變數被修改不自知。而發生處理bug除到死的問題。

但這在javascript則會自動繼承的觀念就是在此。
stevenno2 iT邦新手 5 級 ‧ 2018-04-09 14:04:25 檢舉
function 的 用途之一就是 讓 同一變數名 不會衝突,多寫個變數去傳遞物件吧,不然後續維護會死人,如果時間允許,每個function 要註解 傳入、傳出、功能。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
老了皮兒
iT邦新手 5 級 ‧ 2018-04-06 10:52:12
最佳解答

你的工作是後端嗎? 見你的問題不是在此

由於你的問題不是在全域等,而是當你瞭解一隻php活動期間的life,就不再有這個問題

補充一點點,php的全域和局域是早期php的產物,意思不是說要被淘汰,是蠻難用緣故

後期OOP出現,可以正式和他們分道揚鑣,應學用OOP,不然未來在後端不太能立足

我要發表回答

立即登入回答