Здравствуйте, neFormal, Вы писали:
F>Собственно, сабж..
Не разобрался как править статью в вики, так что:
class A
{
function hello()
{
print'Hello I\'m A.';
}
function Foo()
{
$this->hello();
}
}
class B
{
function hello()
{
print'Hello I\'m B.';
}
function Foo()
{
return A::Foo();
}
}
$b = new B();
$b->Foo(); // печатает Hello I'm B :)
Здравствуйте, neFormal, Вы писали:
F>я даже не знаю минус ли это.. F>после других скриптов меня это даже как то не удивляет..
В других super есть
Re[4]: Почему так ругают PHP?.
От:
Аноним
Дата:
23.05.09 04:17
Оценка:
Здравствуйте, FR, Вы писали:
FR>Здравствуйте, neFormal, Вы писали:
F>>я даже не знаю минус ли это.. F>>после других скриптов меня это даже как то не удивляет..
FR>В других super есть
А причем здесь super? Классы между сообой вообще никак не связаны...
Здравствуйте, Аноним, Вы писали:
А>А причем здесь super? Классы между сообой вообще никак не связаны...
У питона такое типизация не пропустит
class A:
def hello(self):
print'Hello I\'m A.'def Foo(self):
self.hello()
class B:
def hello(self):
print'Hello I\'m B.'def Foo(self):
A.Foo(self)
b = B()
b.Foo()
Traceback (most recent call last):
File "hghghg.py", line 49, in <module>
b.Foo()
File "hghghg.py", line 46, in Foo
A.Foo(self)
TypeError: unbound method Foo() must be called with A instance as first argument (got B instance instead)
FR>Traceback (most recent call last):
FR> File "hghghg.py", line 49, in <module>
FR> b.Foo()
FR> File "hghghg.py", line 46, in Foo
FR> A.Foo(self)
FR>TypeError: unbound method Foo() must be called with A instance as first argument (got B instance instead)
FR>
В 3.0 эти проверки убрали:
>>> class A:
def foo(self):
print("A")
def call_foo(self):
self.foo()
>>> class B:
def foo(self):
print("B")
>>> A.call_foo(B())
B
Здравствуйте, Курилка, Вы писали:
К>Из соображений скорости? Гвидо пишет:
Let's get rid of unbound methods. When class C defines a method f, C.f
should just return the function object, not an unbound method that
behaves almost, but not quite, the same as that function object. The
extra type checking on the first argument that unbound methods are
supposed to provide is not useful in practice (I can't remember that
it ever caught a bug in my code) and sometimes you have to work around
it; it complicates function attribute access; and the overloading of
unbound and bound methods on the same object type is confusing. Also,
the type checking offered is wrong, because it checks for subclassing
rather than for duck typing.
В принципе, разумно. Мне лично эти проверки никогда ещё не помогли, а наоборот даже мешали пару раз, приходилось воркэраундить.
Здравствуйте, neFormal, Вы писали:
RO>>и недостаток грамотного дизайна в самом языке. F>вот, блин.. все так говорят.. иногда непонятно, кто это придумал первый, и почему за ним повторяют.. F>поскольку я в php не углублялся, то можно примеров?.
Дизайн — это вопрос наличия ума и/или вкуса. Одни видят тонкости, другие видят только сильные контрасты, третьи не видят существенной разницы между паскалем и C#. Если вкус есть, то и сам без примеров видишь, а если его нет, то не увидишь между примерами существенной разницы. Такая вот эзотерическая штука.
Здравствуйте, dmz, Вы писали:
A>>за что тут ругали PHP. Почему? Честно говоря, хз. Есть в них преимущества, которые перевешивают упомянутые недостатки. И есть у других "красивых" языков отсутствие этих самых преимуществ. Ну, типа, речь окончена.
dmz>Вот рассказали бы о преимуществах, что ли. Очень интресно, есть ли в PHP хоть одно.
Самое главное — он вездесущ.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Например, чтобы работало такое:
ВВ>
ВВ>$var = "Hello, $username! Today is $date";
ВВ>
В баше такое работает почему-то вот так:
var = "Hello, $username!"
И $ там можно по сути обозвать expand функцией, причем имеющей параметры (!).
Поэтому возможно написать что-то вроде: