为什么不能在类定义中有require *语句?

时间:2011-05-05 16:26:54

标签: php oop class-design

  

可能相关:
  Why don't PHP attributes allow functions?

请原谅我,如果以前曾经问过这个问题,但为什么你不能拥有以下内容:

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 :还想重新打开这个

2 个答案:

答案 0 :(得分:5)

在将类添加到PHP之前,函数范围和全局范围内的requireinclude文件都是可能的。

这只是一个猜测 - 我不确定除了语言设计师来告诉我们他们的故事之外还能做些什么 - 但我想相信通过添加此功能不会带来任何好处通过添加类来发明的“新范围”,特别是考虑到后端添加的复杂性以支持它。

对于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
}

无法以这种方式访问​​privateprotected static成员。

相关问题