2011-03-25 53 views
12

是否有可能重新定義類常量(在PHP中)?是否有可能重新定義PHP常量?

例如

class B { 
const C_ThisIsAConstant = 1; 
} 

class A extends B { 
self::C_ThisIsAConstant = 2; 
} 
+3

你在問變量常量。這是一個矛盾的條款;-) – Carpetsmoker 2011-03-25 01:52:21

回答

19

不,當然不是。那麼他們不會是「常數」。

+3

你其實可以:http://php.net/manual/en/function.runkit-constant-redefine.php> D – porges 2011-03-25 01:54:24

+12

@Porges Heh。我不會稱runkit爲「重新定義」,而是「將語言打成血腥的紙漿」。 – ceejayoz 2011-03-25 01:57:36

+4

PECL擴展未與php捆綁在一起,因此您必須安裝runkit擴展。做這樣的事情也是不好的。這可能是你用來測試/基準測試代碼或其他類似事情的東西,但是/從未/在生產中(與反思相同)。 – 2011-03-25 04:06:51

2

第一:不,不可能重新定義類常量。它不可能在每語言,因爲否則常數不會是常數。

但是你在做什麼是可能的,因爲你不重新定義一個類常量,而是你爲每個類定義一個唯一的常量。

+0

runkit不是PHP核心。所以,是的,你可以重新定義常量 - 但只有當你安裝了PECL擴展。 – 2011-03-25 01:55:07

+0

無論是否有黑客入侵:我不願意提出不好的想法。 – KingCrunch 2011-03-25 15:01:12

+2

Runkit不是黑客,它是一個工具。 – 2014-12-23 21:49:18

1
<?php 

class B { 
    const C_ThisIsAConstant = 1; 
} 

class A extends B { 
    const C_ThisIsAConstant = 2; 
} 

var_dump(A::C_ThisIsAConstant); 

它輸出int(2)

http://codepad.org/GQR9HI5M

+5

這不會重新定義'B :: C_ThisIsAConstant'。 – BoltClock 2012-07-19 08:07:38

3

,因爲他們是含量的不同,您不能重新定義 「常量」。

如果你想改變包含文件中定義的一個常量,那麼你可以定義常量之前,包括:

define ("PROCESS_NAME", "MIKE"); 
/* ... code ... */ 
include ("/path/to/included_file.php"); // also defines "PROCESS_NAME" 
/* ... code ... */ 

PROCESS_NAME將是「MIKE」。

+0

在閱讀了大量關於SO的答案之後,其中大多數都宣揚或陳述了顯而易見的內容,這對我來說是最有用的答案 - 它解決了問題(用其他人不喜歡的流行代碼庫)。我幾乎忽略了這個答案,因爲這個開頭的陳述不僅適合於說教/明顯的範疇,而且也是不正確的。在這種情況下更少。 – DaveWalley 2014-07-17 18:09:34

相關問題