Size: a a a

2019 December 01

A

Aleksandr Khristenko in PHP
Т.е. у нас поле может быть null энное время, но на уровне типов мы указывем что оно только string.
Соответственно обращение к этому полю из других методов когда оно null упадет только в рантайме, а псалм его не поймает.
источник

MM

Maksim Masiukevich in PHP
Aleksandr Khristenko
Т.е. у нас поле может быть null энное время, но на уровне типов мы указывем что оно только string.
Соответственно обращение к этому полю из других методов когда оно null упадет только в рантайме, а псалм его не поймает.
ничё не понял
источник

MM

Maksim Masiukevich in PHP
в 7.4 нельзя написать

class Abube() {
  private ?string $value;

 public function qwerty(): string {
    if(null === $this->value {...}
}
}
источник

MM

Maksim Masiukevich in PHP
но если к переменной добавить присваивание null, или сделать то же самое в конструкторе - всё будет ок
источник

A

Aleksandr Khristenko in PHP
Maksim Masiukevich
в 7.4 нельзя написать

class Abube() {
  private ?string $value;

 public function qwerty(): string {
    if(null === $this->value {...}
}
}
Т.е. нельзя?
источник

A

Aleksandr Khristenko in PHP
private ?string $value = null; и готово
источник

MM

Maksim Masiukevich in PHP
т.е. получишь ошибку
источник

MM

Maksim Masiukevich in PHP
вот
источник

A

Aleksandr Khristenko in PHP
Я к тому, что тип у такого поля должен быть, имхо ?string а не string.
источник

MM

Maksim Masiukevich in PHP
не ну это да
источник

MM

Maksim Masiukevich in PHP
меня больше удивило вчера, схуяли оно с таким странным поведением, но да ладно.
источник

MM

Maksim Masiukevich in PHP
с сериалайзером долго промучался, ибо рефлекшен апи тоже почему-то триггерит этот факап
источник

A

Aleksandr Khristenko in PHP
Да вроде логичное поведение.
источник

MM

Maksim Masiukevich in PHP
чем оно логичное?) и по каким меркам?)
источник

A

Aleksandr Khristenko in PHP
По меркам пхп. И его идеологии проверки типов в рантайме.
источник

MM

Maksim Masiukevich in PHP
чем оно логичное по меркам пхп, который много лет знал, что если свойство явно не инициализированно, то оно null?)
источник

A

Aleksandr Khristenko in PHP
А чем оно нелогичное? И как было бы логично?
источник

MM

Maksim Masiukevich in PHP
?string - это либо null, либо string. С любовью ваш ко.
если я его явно не присвоил, то схуяли я ошибку получаю?
источник

A

Aleksandr Khristenko in PHP
Maksim Masiukevich
?string - это либо null, либо string. С любовью ваш ко.
если я его явно не присвоил, то схуяли я ошибку получаю?
Короче как я понимаю, как оно работает внутри. Когда мы пытаемся установить значение - оно проверяет, подходящее ли значение, записывает его в поле и ставит у поля символ что проиницилазировано.
Когда читаем оно просто отдает нам это поле, если стоит флаг что проинициализировано.
Когда ты не указываешь явно тип в поле все так-же хранится null, просто т.к. поле не инициализировано пхп не знает, валидный это тип или нет.
источник

MM

Maksim Masiukevich in PHP
Aleksandr Khristenko
Короче как я понимаю, как оно работает внутри. Когда мы пытаемся установить значение - оно проверяет, подходящее ли значение, записывает его в поле и ставит у поля символ что проиницилазировано.
Когда читаем оно просто отдает нам это поле, если стоит флаг что проинициализировано.
Когда ты не указываешь явно тип в поле все так-же хранится null, просто т.к. поле не инициализировано пхп не знает, валидный это тип или нет.
хз как оно работает изнутри, пока руки не дошли, но на всидку это редкостная пидорасня, которая заставила творить чёрную магию в сериалайзере
источник