你可以在PHP中定義或更改一個常量嗎?你可以不定義或更改PHP中的常量嗎?
回答
那麼PHP是否鼓勵使用全局變量來實現呢? – TheConstantGardener
@TheConstantGardener:不一定。很少有好的設計需要全局變量的情況。 –
那麼爲什麼Wordpress在66個文件中使用全局關鍵字851次? – TheConstantGardener
號一旦常數被定義,它可以永遠不會改變或未定義。
這是不正確的。 runkit擴展(如另一個答案中提到的)自PHP 4以來已經允許它。最近,uopz擴展還允許從PHP 5.4開始。 –
如果你絕對需要這樣做(雖然我不會像其他人所說的那樣推薦它),但你總是可以使用Runkit。
http://www.php.net/manual/en/function.runkit-constant-redefine.php
http://www.php.net/manual/en/function.runkit-constant-remove.php
像這樣的廢話是這裏有太多糟糕的PHP代碼的原因之一。以這種方式顛覆語言結構是一個可怕的想法,並且對做這件事的開發者反映不佳。 –
Runkit是一個可選的PHP擴展,我從未在任何Web主機上安裝過。 – gnud
@George Cummins我同意你的意見!儘管如此,OP並沒有提到他們在做什麼,或者他們爲什麼希望重新定義常量,而其他人可能會在Runkit之類的某些非常實驗性的語言黑客工具之後,所以我想我會發布它。 –
其他海報是正確的 - 你不能做到這一點。但是也許你可以將你的定義轉移到你知道常數的最佳值的地方。
也許你定義常量在大名單:
define('STRING1','Foo');
define('STRING2', 'Bar');
define('STRING3', 'Baz');
,你想一旦你發現了一個條件改變STRING2的價值。一種方法是推遲定義直到你知道正確的設置。
define('STRING1','Foo');
// define('STRING2', 'Bar'); -- wait until initialization
define('STRING3', 'Baz');
...
if (condition) {
define('STRING2', 'Bar type 2');
} else {
define('STRING2', 'Bar type 1');
}
邏輯設置STRING2甚至可能在不同的文件中,稍後在處理中。
我知道這是太遲了......但這裏是一兩件事,可能幫助一些人...
在我的「Application.php」文件(其中我定義我所有的常量和包括我所有的腳本)我做這樣的事情:
if(!defined("LOGGER_ENABLED")){
define("LOGGER_ENABLED", true);
}
所以通常情況下,每一個劇本是會得到啓用日誌記錄...但是,如果在一個特定的腳本,我不希望這種行爲,我可以簡單地做這之前我包括我的Application.php:
define("LOGGER_ENABLED", false);
沒有看到你的整個應用程序,這可能是一個不公平的假設,但「覆蓋」你自己的系統聽起來有點哈克。難道你不能重新設計你的應用程序/框架,以便更好地管理如果記錄器應該啓用或不基於更具體或邏輯的東西?事實上,這聽起來非常花哨,使用和管理,而在頂部聽起來像是很少使用。這是一個有效的答案,可以爲問題添加潛在的有用信息,所以不會下調,但它可能會促進不良做法。 – James
@帕特里克,是的,但如果有人想改變已經設定的價值,那麼我認爲尼爾斯·魯克斯頓的回答最適合。希望你記得我。 –
這應該被接受,因爲它提供了一個可行的解決方案。這也是通常的做法,例如。 C編碼,所以我沒有看到它在PHP中使用的問題 – Sinisa
正如其他地方沒有提到的那樣,uopz擴展允許通過uopz_undefine()爲PHP 5.4+刪除一個常量。
向下投票者:如果我寫的是錯的,請說出來或更正! –
- 1. 可以在css中定義常量嗎?
- 2. 在PHP中,你可以定義一個可以在函數名中使用的常量嗎?
- 3. 可以即時定義常量嗎?
- 4. 你可以在PHP中使用靜態常量嗎?
- 5. 你可以分配給父函數中定義的變量嗎?
- 6. 是否可以更改定義的常量的值?
- 7. xdebug remote:我可以執行php代碼或更改變量嗎?
- 8. Google網站中的權限不足可以更改或自定義嗎?
- 9. 你可以隨時更改templateUrl嗎?
- 10. 你可以在Coldfusion中一次性定義多個變量嗎?
- 11. 你可以在Salt Pillar中定義一個變量嗎?
- 12. 你可以在F#中定義你自己的操作符嗎?
- 13. 你可以定義DOM Helper嗎?
- 14. 常量可以在PHP框架的模型文件中定義嗎?
- 15. 更改定義的常量的值
- 16. 您可以在PHP的類方法中定義類變量嗎?
- 17. 你可以將圖像的src改爲Javascript中的變量嗎?
- 18. 你可以鎖定會更改數據庫中太多行的更新嗎?
- 19. 我可以在protobuf中定義一個常量字符串嗎?
- 20. 我們可以在Codeigniter中定義常量數組嗎?
- 21. 你可以更改ASP.NET MVC控制器約定嗎?
- 22. Angularjs中有一種方法可以用其他常量定義常量嗎?
- 23. 你可以在不更改數據庫wordpress的情況下更改域名嗎?
- 24. 在php中定義你自己的魔術常量?
- 25. 你可以在Android中更改按鈕或複選框的狀態嗎?
- 26. 你可以將字符串追加到PHP中的變量嗎?
- 27. 你可以在PHP中嵌套類嗎?
- 28. 你可以在python tkinter中更改小部件的父項嗎?
- 29. 你可以在Flutter中更改ExpansionTile的高度嗎?
- 30. 你可以更改SQLite(Android)中的_id autoincrement字段嗎?
換句話說,你想要一個常量是一個變量?可能想再想一想。 –
@MarcB但適當的,給出OP的用戶名。 – abligh
@MarcB OP很清楚地認識到這個問題的諷刺意味(他/她只是爲了發表這個問題而作了一個解釋),但是卻認真地提出了這個問題。這聽起來比較合理的提出像_「你能取消定義的東西PHP的創造者決定把‘常量’?一個」 _ –