【发布时间】:2011-03-25 01:47:45
【问题描述】:
是否可以重新定义类常量(在 PHP 中)?
例如
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
self::C_ThisIsAConstant = 2;
}
【问题讨论】:
-
您要求一个变量常量。这在术语上是矛盾的;-)
是否可以重新定义类常量(在 PHP 中)?
例如
class B {
const C_ThisIsAConstant = 1;
}
class A extends B {
self::C_ThisIsAConstant = 2;
}
【问题讨论】:
不,当然不是。那么它们就不是“常数”了。
【讨论】:
你不能重新定义“常量”,因为它们是常量。
如果您尝试更改包含文件中定义的常量,则可以在包含之前定义常量:
define ("PROCESS_NAME", "MIKE");
/* ... code ... */
include ("/path/to/included_file.php"); // also defines "PROCESS_NAME"
/* ... code ... */
PROCESS_NAME 将是“MIKE”。
【讨论】:
首先:不,不能重新定义类常量。在每一种语言中都是不可能的,因为否则常量就不会是常量。
但是你正在做的事情是可能的,因为你没有重新定义类常量,而是为每个类定义一个唯一的常量。
【讨论】:
<?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。
我已经在 github.com 上发布了我的框架 YAPAF。我们称之为阿尔法状态。总之,YAPAF 能够改变类常量的值(参见https://github.com/SchulteMarkus/YAPAF/blob/master/tests/ManipulateConstantTest.php)。
【讨论】: