если Вы используете PHP 7 & 7 +, можно использовать выборку как это также
define('TEAM', ['guy', 'development team']);
echo TEAM[0];
// output from system will be "guy"
Я подозреваю, потому что $ class-> SUPER-> new ()
обычно будет таким же, как ] $ class-> SUPER () -> new ()
. Но нет функции $ class-> SUPER ()
, и неясно, что это вернет.
С другой стороны, $ class-> Foo :: Bar
всегда был допустимым способом вызова метода напрямую по полному имени, поэтому для этого нужно было создать специальный в упаковке - SUPER
- лучше подходит. (Я подозреваю, что вы могли бы реализовать SUPER
как пакет, и, возможно, исторически так и было, я не знаю)
PS: Взгляните на пакет mro
, и $ self-> next :: method
. Также обратите внимание на Moose, если вы собираетесь серьезно заняться объектно-ориентированной работой на Perl.
SUPER
как пакет, и, возможно, это было исторически, я не знаю)
PS: Взгляните на пакет mro
, и $ self-> next :: method
. Также обратите внимание на Moose, если вы собираетесь серьезно заняться объектно-ориентированной работой на Perl.
SUPER
как пакет, и, возможно, это было исторически, я не знаю)
PS: Взгляните на пакет mro
, и $ self-> next :: method
. Также обратите внимание на Moose, если вы собираетесь серьезно заняться объектно-ориентированной работой на Perl.
Короче говоря, SUPER - это не метод. Это виртуальный пакет. Это задокументировано в perlobj в разделе «Вызов метода».
Обратите внимание, однако, что SUPER основывается на текущем пакете, а не на пакете экземпляра, с которым вы его использовали.
Вызов методов имеет несколько форм:
Вызывает метод, возможно, унаследованный:
->method()
Явно вызывает подпакет :: метод, независимо от того, находится он в дереве наследования или нет:
->Package::method()
Явно вызывает упомянутый подпрограмм, независимо от того, находится он в дереве наследования или нет:
->$coderef()
Вызывает метод, который был бы вызван __ PACKAGE __-> method ()
, если бы в не было подметода ] __ PACKAGE __
(NB класс или объект слева от ->
не имеет значения):
->SUPER::method()
Любое из вышеперечисленных, в зависимости от содержимого $ method
:
->$method()
(Юридически даже при используйте строгий;
.)
Хотя первая форма является наиболее распространенной, стоит узнать о других и о том, как они работают.
В дополнение к сказанному Деробертом:
Вы называете «новым» в пространстве имен 'SUPER', но передавая ему объект (или строку), '$ class'.
У вас нет для использования SUPER, так как вы можете указать полное имя пакета родительского (полезно в случаях алмазного наследования):
sub init {
my $self = shift;
$self->ParentClass1::init();
$self->ParentClass2::init();
}