是否有可能重新定義類常量(在PHP中)?是否有可能重新定義PHP常量?
例如
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
self::C_ThisIsAConstant = 2;
}
是否有可能重新定義類常量(在PHP中)?是否有可能重新定義PHP常量?
例如
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
self::C_ThisIsAConstant = 2;
}
不,當然不是。那麼他們不會是「常數」。
你其實可以:http://php.net/manual/en/function.runkit-constant-redefine.php> D – porges 2011-03-25 01:54:24
@Porges Heh。我不會稱runkit爲「重新定義」,而是「將語言打成血腥的紙漿」。 – ceejayoz 2011-03-25 01:57:36
PECL擴展未與php捆綁在一起,因此您必須安裝runkit擴展。做這樣的事情也是不好的。這可能是你用來測試/基準測試代碼或其他類似事情的東西,但是/從未/在生產中(與反思相同)。 – 2011-03-25 04:06:51
第一:不,不可能重新定義類常量。它不可能在每語言,因爲否則常數不會是常數。
但是你在做什麼是可能的,因爲你不重新定義一個類常量,而是你爲每個類定義一個唯一的常量。
runkit不是PHP核心。所以,是的,你可以重新定義常量 - 但只有當你安裝了PECL擴展。 – 2011-03-25 01:55:07
無論是否有黑客入侵:我不願意提出不好的想法。 – KingCrunch 2011-03-25 15:01:12
Runkit不是黑客,它是一個工具。 – 2014-12-23 21:49:18
<?php
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
const C_ThisIsAConstant = 2;
}
var_dump(A::C_ThisIsAConstant);
它輸出int(2)
。
這不會重新定義'B :: C_ThisIsAConstant'。 – BoltClock 2012-07-19 08:07:38
,因爲他們是含量的不同,您不能重新定義 「常量」。
如果你想改變包含文件中定義的一個常量,那麼你可以定義常量之前,包括:
define ("PROCESS_NAME", "MIKE");
/* ... code ... */
include ("/path/to/included_file.php"); // also defines "PROCESS_NAME"
/* ... code ... */
PROCESS_NAME將是「MIKE」。
在閱讀了大量關於SO的答案之後,其中大多數都宣揚或陳述了顯而易見的內容,這對我來說是最有用的答案 - 它解決了問題(用其他人不喜歡的流行代碼庫)。我幾乎忽略了這個答案,因爲這個開頭的陳述不僅適合於說教/明顯的範疇,而且也是不正確的。在這種情況下更少。 – DaveWalley 2014-07-17 18:09:34
我已經在github.com上發佈了我的框架YAPAF。我們稱之爲alpha狀態。總之,YAPAF能夠改變類常量的值(參見https://github.com/SchulteMarkus/YAPAF/blob/master/tests/ManipulateConstantTest.php)。
你在問變量常量。這是一個矛盾的條款;-) – Carpetsmoker 2011-03-25 01:52:21