Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469

readonly и объект

07.02.2023, 22:48. Показов 1537. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Оператор readonly устанавливает значения свойствам только один раз,
при инициализации и запрещает далее менять это значение, верно?

Ради интереса попробовал сделать такое с объектом.
Но почему-то, я могу устанавливать дефолтное значение свойству классу "say",
хотя readonly запрещает такое делать.
Что происходит в коде ниже, что здесь меняет readonly в классе "say"?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class User {                      
                                                                                                 
 function __construct(public readonly object $say){}  // установил readonly аргументу конструктора
 
 function text(){
  echo "i say:". $this->say->hi();
 }
 
}
 
 
class say{
 
 public $name ="da";  // дефолтное значение
 
 function hi(){
  return "hi";
 }
 
}
 
 
$obj = new User(new say);
$obj->text();
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2023, 22:48
Ответы с готовыми решениями:

Падение фс в readonly
Упал сервер и перевелась фс в readonly режим. Последний меседж в логах: kernel: EXT4-fs error (device vda1): __ext4_new_inode:1010: comm...

Readonly и коллекции
Мне стыдно обращаться с таким вопросом, и еще более стыдно что он у меня возник. Поясните мне смысл модификатора видимости readonly. Ибо...

Readonly event
Есть какое-то статическое событие: public static event SomeEventArgs SomethingChanged; Так как оно статическое, его все...

24
Эксперт PHP
 Аватар для liris
5512 / 1195 / 164
Регистрация: 16.01.2023
Сообщений: 2,840
09.02.2023, 09:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от G_manX Посмотреть сообщение
И кажется вы использовали паттерн
У вас типичная ошибка новичка, который узнал про паттерны - вы теперь пытаетесь видеть паттерны в любом коде (и писать свой код исключительно по паттернам). В реальной жизни разработчиков не окружают паттерны повсеместно.

P.S. Композицию я бы отнес не к паттернам. а к методам проектирования.
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
10.02.2023, 07:22  [ТС]
liris
В основном для чего так делают. Создатель кода не будет же менять
в аргументе один объект на другой, это же не логично иначе код перестанет работать как задумывалось.
Это своего рода как "защита от других разрабов(защита от композиции)?"
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
10.02.2023, 09:30
И еще раз: в вашем коде НЕТ замены одного объекта на другой.

Readonly это ни как не защита "от композиции". Вот вам композиция и readonly свойства

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class A {
    public function __construct(public readonly int $id){}
}
 
class B {
    private array $list = [];
    
    public function __construct() {
        $this->list[] = new A(10); 
        $this->list[] = new A(11); 
    }
    
    public function getItemIds():array {
        return array_map(static fn(A $item):int => $item->id, $this->list);
    }
    
    
}
 
$obj = new B();
print_r($obj->getItemIds());
Добавлено через 6 минут
В дополнение, а вот защищает оно именно от изменений внутреннего состояния объекта не предусмотренного автором класса
т.е. если предположить что кто то пришел и добавил в класс B метод
PHP
1
2
3
4
public function modify():void
{
   $this->list[0]->id = 123123;
}
вызов этого метода вызовет ошибку
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
10.02.2023, 12:16
Цитата Сообщение от G_manX Посмотреть сообщение
В основном для чего так делают.
Вы специально игнорируете весь материал по данному поводу ?

Цитата Сообщение от xkkx Посмотреть сообщение
Тогда идём к вопросу на ответ
https://wiki.php.net/rfc/readonly_properties_v2
Тут всё сказано, для чего и зачем.

Добавлено через 40 секунд
Хотя возможно вы Английский не знаете, в силу своего образования. А переводчиком гугла сложно воспользоваться, опять же всё из за того же.
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
10.02.2023, 20:40  [ТС]
Хотя возможно вы Английский не знаете
Ну знаю, но не очень хорошо, чтобы прям свободно говорить с носителем языка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2023, 20:40

DataSet ReadOnly?
Подскажите пожалуйста Как для DataSet установить ReadOnly ?

@property (readonly)
Добрый вечер, Решил немного поизучать obj-c. Пока не очень привычно Вопрос такой: мутаторы assign, retain, copy влияют только на...

Интерфейсы и Readonly
Я знакомлюсь с интерфейсами и у меня возник вопрос. Можно ли в интерфейс добавить члены с модификатором readonly?

переменные readonly
переменные экземпляра, класса, константы и переменные readonly: -ФИО -должность -базовый оклад -дата поступления на работу -стаж...

Изменение свойства readonly
Здравствуйте. У меня есть форма и поле textarea с установленным readonly Мне нужно, чтобы при нажатии на кнопку форма становилась...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru