请原谅我,如果以前曾经问过这个问题,但为什么你不能拥有以下内容:
class foo {
require_once 'defines.php';
private $_server = DB_SERVER;
private $_username = DB_USERNAME;
private $_password = DB_PASSWORD;
private $_database = DB_NAME;
public $debug = false;
public $_conn;
function __construct() {
$connection = @mysqli_connect($this->_server, $this->_username, $this->_password, $this->_database);
}
...
}
干杯,
编辑:希望找出为什么这种行为存在以及为什么不可行。 投票如何结束?
EDIT2 :还想重新打开这个
答案 0 :(得分:5)
在将类添加到PHP之前,函数范围和全局范围内的require
和include
文件都是可能的。
这只是一个猜测 - 我不确定除了语言设计师来告诉我们他们的故事之外还能做些什么 - 但我想相信通过添加此功能不会带来任何好处通过添加类来发明的“新范围”,特别是考虑到后端添加的复杂性以支持它。
对于require
d文件中的任何声明,范围规则的含义也不完全清楚。
总之,我认为你问的是错误的问题。而不是“为什么不支持这个?”这更像是“为什么要支持它?”。
我希望这会有所帮助。
答案 1 :(得分:2)
因为在类定义中根本不允许使用“真实”代码,所以只允许定义属性,方法和常量。您可以将include语句放入“主范围”(过程),函数和方法,就像其他所有代码一样。
class A {
var $a = 1 + 1; // Parse error: unexpected '+'
}
但据我所知,它不支持任何语言。例如,java为此
使用静态代码块class A {
private static int a = 0;
static {
a = 1+1;
}
}
在PHP中,只需将“静态”代码放在类本身之后。
class A {}
/* static */ {
// do something
}
无法以这种方式访问private
或protected
static
成员。