Интерфейс - передача класса или интерфейса в параметр в чем разница?

fixxxer

К.О.
Партнер клуба
Какая жесть, это даже не гугл-транслейт, он куда лучше переводит.
 
  • Like
Реакции: AmdY

AmdY

Пью пиво
Команда форума
Какая жесть, это даже не гугл-транслейт, он куда лучше переводит.
Да, гугл поиск последнее время совсем плох, очень много откровенно мусорных сайтов выдаёт в топе. Бывает даже ссылки на сателит с переводами SO гуглится выше самого SO.
 

StalkerClasses

Новичок
Вот такой вопрос а на php вообще в принципе возможно написать калькулятор для windows? Например как на c++. Я несколько раз пробовал читать книгу по c++ но мне как то в голове совсем не укладывается его синтаксис. Другое дело Java. Но я пока от неё далёк.
 

StalkerClasses

Новичок
Вопрос про статическое связывание - не пойму почему это называется static а не children (как по аналогии с parent). Ведь по идее если правильно понял статическое связывание по хорошему это запрос из родителя в дочерний класс - а называется такой мудреной фразой...
 

StalkerClasses

Новичок
По поводу исключений как я понял для чего это нужно - просто ловушка для работы например со сторонней библиотекой что бы можно было обработать те ошибки которые она возвращает не изменяя Ее код. Так?
 

WMix

герр M:)ller
Партнер клуба
называется такой мудреной фразой (статическое)
не статическое значит динамическое, (обьект) если так понятно?
просто ловушка для работы например со сторонней библиотекой что бы можно было обработать те ошибки которые она возвращает не изменяя Ее код
не знаю что ты там понял, но хоть википедию прочти
 
Последнее редактирование:

StalkerClasses

Новичок
не статическое значит динамическое, (обьект) если так понятно?

не знаю что ты там понял, но хоть википедию прочти
Исключения ладно я разобрался для чего это...

Но вот с поздним статическим связыванием до конца не понимаю почему этот формат называется статическим?

По идее эта конструкция обращение из родительского класса к дочернему и эта конструкция должна называться не static а children?
 

WMix

герр M:)ller
Партнер клуба
почему этот формат называется статическим?
ты точно про морфологию хочешь поговорить?
По идее эта конструкция обращение из родительского класса к дочернему и эта конструкция должна называться не static а children?
родительский класс ничего не знает про дочерние
 

StalkerClasses

Новичок
ты точно про морфологию хочешь поговорить?

родительский класс ничего не знает про дочерние
А разве позднее статическое связывание это не про это речь? По крайней мере прочитав у Мэтта зандстры я так эту тему понял.
 

StalkerClasses

Новичок
Поэтому у мен и вопрос про поздние статическое связи - почему оно так называется... а не связь с дочками....
 

AmdY

Пью пиво
Команда форума
Поэтому у мен и вопрос про поздние статическое связи - почему оно так называется... а не связь с дочками....
Связь с дочками называется инцест.

А про LSB там же всё просто. Статический класс и метод - это просто область именования. И своё состояние он хранит глобально в неймспейсе, а не в объекте как в случае с нестатическими методами.
Соотвественно, если у тебя есть класс
PHP:
class Foo {
    public $var = 'Переменная из неймспейса Foo';
    function bar() { return self::$var; }
}
class Baz extends Foo {
    public $var = 'Переменная из неймспейса Baz';
}
//
Foo::$a; // выведет переменную из неймспейса Foo
Foo::bar(); // выведет переменную из неймспейса Foo
Baz::bar(); // тоже выведет переменную из неймспейса Foo, потому что self::$var
С поздним статическим связыванием имя неймспейса определяется динамически в момент вызова

PHP:
class Foo {
    public $var = 'Переменная из неймспейса Foo';
    function bar() { return static::$var; } // static - позднее статическое связывание
}
class Baz extends Foo {
    public $var = 'Переменная из неймспейса Baz';
}
//
Foo::$a; // выведет переменную из неймспейса Foo
Foo::bar(); // выведет переменную из неймспейса Foo
Baz::bar(); // тоже выведет переменную из неймспейса Baz, потому что static::$var
И самое главное, что ты должен усвоить - тебе не нужно всё это знать, позднее статическое связывание в программировании используется редко. Да и обычной статики нужно избегать.
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
PHP:
abstract class FileWrittet
{
    static function run($sourse){
        if(strstr (.xml)){
            return FileWritterXML;
        }
        return FileWritterText;
    }
}
class FileWritterXML extends FileWritter;
class FileWritterText extends FileWritter;
я не вижу вызова, полный пример

Родитель знает про своих дочек.
нет
 

fixxxer

К.О.
Партнер клуба
PHP:
abstract class FileWrittet
{
    static function run($sourse){
        if(strstr (.xml)){
            return FileWritterXML;
        }
        return FileWritterText;
    }
}
class FileWritterXML extends FileWritter;
class FileWritterText extends FileWritter;
Родитель знает про своих дочек.
Статика - это не экземпляр класса, а функция в его "неймспейсе", так что не знает. Но и так тоже делать не стоит, поскольку для добавления ещё одного формата надо модифицировать базовый класс, который может вообще устанавливаться как сторонняя библиотека через composer.

Вообще для тренировки навыков проектирования лучше забыть про static, считай, что его нет. Тогда в данном примере неизбежно появится отдельная фабрика. А когда уже уверенно освоишься, тогда уже можно срезать углы, понимая, чем это грозит.
 

WMix

герр M:)ller
Партнер клуба
$obj = new FileWrittet::run("dir/file.xml");
ты на каком языке вообще пишешь? какой инстанс, какой статик, что за константы, что вообще ты хочешь сказать? где это статистическое связывание?

пожалуйста рабочий пример кода
 
Последнее редактирование:

StalkerClasses

Новичок
ты на каком языке вообще пишешь? какой инстанс, какой статик, что за константы, что вообще ты хочешь сказать? где это статистическое связывание?

пожалуйста рабочий пример кода
Это был пример когда родитель знает о дочерних классах (с жёсткой фиксацией).
Статика - это не экземпляр класса, а функция в его "неймспейсе", так что не знает. Но и так тоже делать не стоит, поскольку для добавления ещё одного формата надо модифицировать базовый класс, который может вообще устанавливаться как сторонняя библиотека через composer.

Вообще для тренировки навыков проектирования лучше забыть про static, считай, что его нет. Тогда в данном примере неизбежно появится отдельная фабрика. А когда уже уверенно освоишься, тогда уже можно срезать углы, понимая, чем это грозит.
Тут уже кто то сказал про статику. Полагаю речь не затронула статические методы и параметры. Речь была про то что бы забыть статическое связывание.
 
Сверху