Вопрос 1: Нет сокращения для адресации пространства имен «над» вашим текущим пространством имен. Вы должны использовать полный путь, как вы уже сделали выше.
Вопрос 2: Это правда, что вы можете использовать анонимные функции (которые были введены в 5.3), и это часто может быть хорошим выбором:
namespace MyProject;
class Main {
public function __construct() {
set_error_handler( function() {
echo "hi";
} );
}
}
Однако не всегда лучше использовать анонимные функции. Функции являются полезной абстракцией по той самой причине, что вы можете вызывать их из разных мест. Анонимные функции - это сокращение для создания функций, которые нужны только один раз.
Если вы хотите использовать обычную неанонимную функцию, обратите внимание, что сначала в приведенном выше примере вы используете метод экземпляра, поэтому вы должны предоставить экземпляр с $ this:
namespace MyProject;
class Main {
public function __construct() {
set_error_handler(array($this, 'handleErrors'));
}
public function handleErrors() {
echo "hi";
}
}
Кроме того, есть случай, когда вы хотите обратиться к статической функции из класса пространства имен. В этом случае синтаксис массива должен включать имя класса. Если имя класса имеет пространство имен, вы должны использовать полный путь к пространству имен, как в исходном коде:
namespace MyProject;
class Main {
public function __construct() {
set_error_handler(array('MyProject\Main', 'handleErrors'));
}
public static function handleErrors() {
echo "hi";
}
}