|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
||||||
ОПП атрибуты wtf?07.03.2015, 17:18. Показов 1451. Ответов 18
Метки нет (Все метки)
Привет пацаны
![]() Немогу вьехать в ОПП а именно в их атрибуты например.
И не понимаю логику операций __get и __set, обьясните как они работают понятным языком.
0
|
||||||
| 07.03.2015, 17:18 | |
|
Ответы с готовыми решениями:
18
Меню ОПП и style wtf? Задание по ОПП Атрибуты класса и атрибуты объекта |
|
286 / 235 / 113
Регистрация: 08.06.2013
Сообщений: 725
|
|||||||||||
| 07.03.2015, 18:45 | |||||||||||
Сообщение было отмечено mormyshka как решение
Решение
var $attribute - это просто переменная внутри класса, которая доступна всем методам этого класса, а геттер и сеттер это магические методы, которые позволяют получить или установить значение переменной класса так сказать из вне.
Добавлено через 7 минут Ну раз уж вы сделали, переменную $attribute, то лучше в геттерах и сеттерах сделать так, чтобы все передаваемые и получаемые переменные, обрабатывались как ключи массива от $attribute:
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
|
| 07.03.2015, 19:38 [ТС] | |
|
$this это тоже переменная же?
-> что значит этот символ? И для чего вообще атрибуты нужны? я запуталсья в них.
0
|
|
|
286 / 235 / 113
Регистрация: 08.06.2013
Сообщений: 725
|
|
| 07.03.2015, 20:08 | |
|
mormyshka, "$this->" - Это специальный указатель, который используют внутри методов классов, и он указывают, что переменная определена внутри данного или родительского класса.
Например: $this->attribute = "значение"; - такая конструкция внутри какого либо метода, будет означать, что значение присваивается переменной $attribute, которая будет внутри данного класса(или родителя класса). А если внутри какого-либо метода писать просто $attribute = "значение"; то это создаст приватную переменную только внутри данного метода. Прочитай об областях видимости в ООП.
0
|
|
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
|
| 07.03.2015, 20:09 | |
|
mormyshka,
$this - это текущий объект. Т.е: $vasya - глобальная переменная, доступа везде $this->vasya - переменная класса, доступна внутри класса (а извне - зависит от наших пожеланий). $this->get_vasya - запуск функции get_vasya данного класса. Атрибуты - это обычные переменные. Как можно программировать без переменных?
1
|
|
|
286 / 235 / 113
Регистрация: 08.06.2013
Сообщений: 725
|
||
| 07.03.2015, 20:13 | ||
|
$this->get_vasya() - запуск метода класса, изнутри класса(из другого метода).
1
|
||
|
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
|
|
| 07.03.2015, 20:23 | |
|
Тьфу да, скобки убежали.
0
|
|
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||
| 07.03.2015, 20:30 | |||
|
2
|
|||
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
||||||
| 07.03.2015, 21:26 [ТС] | ||||||
|
Немного понимаю.
Добавлено через 55 минут UchihaSV, а если например такая функция.
0
|
||||||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
| 07.03.2015, 21:31 | |
Сообщение было отмечено mormyshka как решение
Решение
mormyshka, var - это устаревшее, использовался когда еще не было других модификаторов доступа, это аналог public.
$this используется только внутри метода. Т.е., если вы захотите обратиться к переменной внутри метода объекта, надо будет использовать $this. Иначе - через переменную, хранящую созданный объект (в вашем примере - $a). З.Ы. Здесь в коде "нарушена" инкапсуляция, поэтому предоставляется свободный доступ к свойству объекта - поэтому вы и можете его так просто поменять..
1
|
|
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
|
| 07.03.2015, 21:34 [ТС] | |
|
Понял наконец то, огромное спасибо.
0
|
|
|
286 / 235 / 113
Регистрация: 08.06.2013
Сообщений: 725
|
||||||
| 07.03.2015, 21:36 | ||||||
|
mormyshka, потому что он используется только внутри метода класса:
1
|
||||||
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
||||||
| 07.03.2015, 21:43 [ТС] | ||||||
|
Кот, помоги понять этот пример
зачем атрибут вообще в этой функции нужен?
0
|
||||||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||
| 07.03.2015, 21:47 | |||||||||||
Сообщение было отмечено mormyshka как решение
Решение
mormyshka, для изменения/получения атрибута извне. с var это бессмысленно, измените на private/protected - тогда будет смысл.
Если вы измените на закрытый/защищенный доступ, то при попытке поменять атрибут извне вы получите ошибку. Т.е.:
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
|
| 07.03.2015, 22:20 [ТС] | |
|
Немного туплю, но ведь __get и _set служат для изменения параметров а не атрибутов?
Тобишь значения $name заменить на $value ? Чет я запуталсья с этими атребутами ОПП... ![]() Зачем изменение атрибута извне если он вообще никакой роли в функции не играет? Не понимаю.. Кот жду твоей помощи и анимешника.
0
|
|
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||||
| 07.03.2015, 22:23 | ||||||||||||
|
Эти функции - просто геттер и сеттер. От англ. get (получить) & set (установить). При попытке получить доступ на чтение к закрытому/защищенному свойству объекта (именно объекта - закрытое/защищенное свойство класса на это не реагирует) или же к несуществующему свойству, будет вызван геттер. Какая реализация геттера у вас (и есть ли она у вас вообще) - зависит только от вас и необходимости. При попытке установить значение для закрытого/защищенного или несуществующего свойства объекта, будет вызван сеттер - опять же, реализация зависит только от вас. К примеру, в yii (в 1.x, 2.0 не смотрел) используется сеттер для полей формы:
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 09.01.2015
Сообщений: 73
|
|
| 07.03.2015, 22:30 [ТС] | |
|
Кот понял, var путал. Проблема решена.
0
|
|
| 07.03.2015, 22:33 | |
|
Не по теме: я не умею ники менять :pardon:
0
|
|
| 07.03.2015, 22:33 | |
|
Помогаю со студенческими работами здесь
19
Программы на ОПП С++. 911
Переход на MVC и ОПП
Типичные задания на тестах ОПП Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|