|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Допустим, у меня есть класс AppField, у него есть свойства code и title. Я не хочу создавать эти свойства просто объявлением public-переменной, потому что мне нужен контроль над значениями. Следовательно мне нужен геттер и сеттер для свойства. Но в PHP5 нет геттеров, разве что через магические методы. Кроме того, я бы хотел использовать и альтернативный способ в виде функции с необязательным параметром: code() для чтения текущего значения, code(value) для задания нового значения. Вроде бы должно быть так: Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Или есть другие способы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 12:15 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Мне этот способ не нравится следующим. Допустим есть класс Field, коллекция этих классов Fields и класс Sections, в котором должно быть свойство Fields, ссылающееся на коллекцию Fields. Разумеется свойство Fields должно быть readonly, чтобы его нельзя было очистить или переустановить, поэтому просто объявить public $Fields = new Fields нельзя. Если делать через магические методы, то приходится делать так: Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Это смотрится не очень хорошо, плюс если я захочу добавить итератор, то при таком подходе его сделать будет сложнее. Фактически мне просто нужен геттер, без сеттера. Можно ли что-то такое сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 13:22 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Судя по тому, что я прочитал, в PHP в принципе нет возможности задать readonly-свойство. Можно эмулировать магическими методами, но по этому поводу много споров и обычно сходятся на том, что магические методы нужны для фреймворков и динамического кода, а в прикладном коде они нежелательны. Видимо придется использовать геттер в виде функции (getFields). Правда такое "свойство" нельзя будет использовать в строках с двойными кавычками. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 14:29 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
рид онли свойство - это константа класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 14:53 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Константа это константа, ro-свойство от константы отличается. Прежде всего тем, что может изменяться внутри класса (быть вычисляемым). Кроме того, в PHP5 константа не может ссылаться на инстанс класса, только на скалярные значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 14:59 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
автортем, что может изменяться тогда это не рид онли. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 15:43 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Чушь. constant — постоянный, неизменный. read only — только для чтения. У массивов или коллекций есть свойство count или length, возвращающее количество элементов (в массиве или коллекции). Его нельзя задавать самому, потому что оно read only. Но оно может изменяться. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 15:56 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
у памяти есть всего 2 операции: read и write если память "read only", значит ничего туда записать нельзя . Точка. Alibek B. Его нельзя задавать самому, потому что оно read only. Но оно может изменяться. изменяться "read only" НЕ может. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 17:02 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Извне изменять нельзя. Изнутри можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 17:14 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
если можно, значит уже не read only. астанавитесь! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 20:00 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Алексей Роза астанавитесь! Да, заканчивайте... Ясно же, что человеку надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 20:02 |
|
PHP5: вопрос по методам и свойствам
|
|||
---|---|---|---|
#18+
Повторю вопрос — вы видели свойство length у массивов и объектов JS? Это свойство (не метод), оно readonly. Но оно изменяется, когда изменяется количество элементов массива. Или текстовое поле "только чтение" в формах Windows — пользователь не может его изменить, но программа может. Мне нужно свойство, которое будет ссылаться на объект (инстанс класса) и которое нельзя изменить снаружи. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 20:25 |
|
|
start [/forum/topic.php?fid=23&msg=39934806&tid=1459747]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 139ms |
0 / 0 |