27.12.2010, 13:54
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
переопределение констант
ну так давно узнал, что в php можно переопределять константы классов
class A { const A = 1; }
class B { const A = 2; }
echo B::A;
так вот по сравнению с fortran php отдыхает. Там можно писать в литералы константы (баг называется constants aren't):
Код:
|
PROGRAM MYSTERY
CALL MAGIC(1)
C !!! Prints 12
PRINT *, 'According to the computer, 3 + 1 is ', ADDUP(3, 1)
END
FUNCTION ADDUP(I, J)
ADDUP = I + J
END
C What does this subroutine actually do?
SUBROUTINE MAGIC(I)
I = 9
RETURN
END |
я только не уверен, во всех ли реализациях. Может только в той, что от ms
The __fortran calling convention isn't the calling convention used by FORTRAN
Последний раз редактировалось x-yuri, 27.12.2010 в 13:58.
|
|
10.07.2012, 12:02
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
а сейчас наткнулся на то, что в perl 4 было то же самое:
Код:
|
$foo = "x";
&mod($foo);
for ($x = 0; $x < 3; $x++) {
&mod("a");
}
sub mod {
print "before: $_[0]";
$_[0] = "m";
print " after: $_[0]\n";
}
# perl4:
# before: x after: m
# before: a after: m
# before: m after: m
# before: m after: m |
http://perldoc.perl.org/perltrap.html
|
|
10.07.2012, 12:09
|
|
Профессор
|
|
Регистрация: 12.03.2008
Сообщений: 183
|
|
определили константу в A, определили константу в B.
A::A при этом осталась, как и была.
к переопределению констант это не имеет никакого отношения.
|
|
12.07.2012, 18:52
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
я там extends A пропустил: class B extends A { const A = 2; }. Далее, если я пишу self::A:
class C extends B { function f() {
var_dump(self::A);
}}
я получу, B::A. Почему? Правильно, потому что класс B переопределил константу А.
Последний раз редактировалось x-yuri, 12.07.2012 в 18:55.
|
|
12.07.2012, 19:23
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от x-yuri
|
я получу, B::A. Почему? Правильно, потому что класс B переопределил константу А.
|
никто ничего не переопределил. Просто у A есть своя константа у B своя. А при обращении к self::A ты получаешь ссылку на класс B поэтому и получаешь его константу, но при этом обратившись к A::A получишь нормальную константу класса A.
Так работает во всех языках программирования, и это не переопределение.
|
|
12.07.2012, 23:57
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
ok, расскажите мне, что такое переопределение
|
|
13.07.2012, 01:16
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
http://ru.wikipedia.org/wiki/%D0%9F%...BE%D0%B4%D0%B0
x-yuri, прав, хотя до этого был согласен с devote, во многих источниках переопределение -упоминается изменение изменяющее родительское в контексте родительского .
Последний раз редактировалось dmitriymar, 13.07.2012 в 01:20.
|
|
13.07.2012, 01:20
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от x-yuri
|
ok, расскажите мне, что такое переопределение
|
ну я может не правильно выразился. Но константа в классах, это по большей части static свойство. И считать переопределением статические свойства в классах по моему не уместно.
|
|
13.07.2012, 12:53
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от devote
|
это по большей части static свойство. И считать переопределением статические свойства в классах по моему не уместно.
|
в принципе да, хотя если взять тот же lsb...
|
|
|
|