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