Почему не существует (стандартного, сертифицированного на Java) решения, являющегося частью самого языка Java, для возврата нескольких значений из метода Java, а не для разработчиков, которые должны использовать свои собственные средства, такие как карты, списки, пары и т.д.? Почему Java не поддерживает n-кортежные объекты?
Особенно для тривиальных частных методов, которые могут модифицировать два объекта вместе (в тандеме), и в этом случае типизированный объект как возвращаемый звучит избыточно.
-121--656767-Я изучаю классы PHP и исключения, и, исходя из C++ фона, мне кажется странным следующее:
Когда конструктор производного класса создает исключение, оказывается, что деструктор базового класса не запускается автоматически:
class Base
{
public function __construct() { print("Base const.\n"); }
public function __destruct() { print("Base destr.\n"); }
}
class Der extends Base
{
public function __construct()
{
parent::__construct();
$this->foo = new Foo;
print("Der const.\n");
throw new Exception("foo"); // #1
}
public function __destruct() { print("Der destr.\n"); parent::__destruct(); }
public $foo; // #2
}
class Foo
{
public function __construct() { print("Foo const.\n"); }
public function __destruct() { print("Foo destr.\n"); }
}
try {
$x = new Der;
} catch (Exception $e) {
}
Печать:
Base const.
Foo const.
Der const.
Foo destr.
С другой стороны, деструкторы объектов-членов выполняются правильно при наличии исключения в конструкторе (по адресу # 1
). Теперь интересно: Как вы реализуете правильную раскручивание области в иерархии классов в PHP, чтобы подобъекты были правильно уничтожены в случае исключения?
Также кажется, что нет возможности запустить базовый деструктор после того, как все объекты-члены были уничтожены (в # 2
). Если удалить строку # 1
, получится:
Base const.
Foo const.
Der const.
Der destr.
Base destr.
Foo destr. // ouch!!
Как решить эту проблему?
Обновить: Я все еще открыт для дальнейших взносов. Если у кого-то есть хорошее обоснование, почему объектная система PHP никогда не требует правильной последовательности уничтожения, я выдам за это другую сумму (или просто за любой другой убедительно аргументированный ответ).