Почему вы не можете требовать * операторов в определении класса?
Возможно Связано:
Почему атрибуты PHP не позволяют выполнять функции?
Извините меня, если это было задано раньше, но почему вы не можете иметь что-то вроде следующего:
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: также хотел бы снова открыть этот
Ответы
Ответ 1
Файлы require
и include
были доступны как в пределах области действия, так и в глобальной области, до того, как Классы были добавлены в PHP.
Это только догадка — Я не уверен, что еще мы могли бы сделать, кроме как для дизайнеров языка, и рассказать нам их историю — но я полагаю, что считалось, что от добавления этой функциональности к "новой области", созданной добавлением классов, не будет никакой выгоды, особенно учитывая сложность, добавленную в back-end, чтобы поддержать ее.
Также не совсем понятно, каковы будут правила определения области видимости для любых объявлений, сделанных внутри файла require
d.
В заключение, я думаю, вы задаете неправильный вопрос. Вместо "почему это не поддерживается?" это скорее случай "почему он должен поддерживаться?".
Я надеюсь, что это поможет небольшим образом.
Ответ 2
Это потому, что в определении класса "реальный" код вообще не разрешен, допускаются только определения свойств, методов и констант. Вы можете поместить свои include-statements в "основной" (процедурный), функции и методы, как и любой другой код.
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
.