Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171

Инициализация свойств (полей) в классе

21.02.2016, 20:36. Показов 3475. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Объясните пожалуйста на моем примерчике

PHP
1
2
3
4
5
6
7
8
9
10
11
12
class Test
{
  public $var1;
  public $var2
  public function __construct($var1, $var2)
  {
    this->var1 = $var1;
    this->var2 = $var2;
  }
}
 
$test = new Test(1,2);
Я понимаю это так: Мы записываем в св-ва самого класса значения , которые будем в дальнейшем использовать далее в классе. Верно ли это предположение?

Вопрос: Но почему например нельзя обойтись без это самой инициализации? Почему в некоторых случаях нужно обязательно определять в момент создания объекта эти внутренние св-ва?

Пожалуйста максимально просто, я в этом новенький совсем, если не затруднит, с примерами.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2016, 20:36
Ответы с готовыми решениями:

Инициализация в классе полей типа Enum
Добрый день! Есть класс, в нем есть поле перечисления. class Worker { private string name; private EnumEmployees...

Инициализация массива в классе
Как инициализировать массив в классе? Пишу такой код, но компилятор выдает: 9:53: error: incompatible types in assignment of 'int' to...

Инициализация переменной в классе
Пытаюсь инициализировать в классе переменную и дальше ее использовать class Lines { double PI = 3.141592653589793238462; void...

22
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2016, 20:42
Цитата Сообщение от skolm Посмотреть сообщение
Я понимаю это так: Мы записываем в св-ва самого класса значения , которые будем в дальнейшем использовать далее в классе. Верно ли это предположение?
верно
Цитата Сообщение от skolm Посмотреть сообщение
Вопрос: Но почему например нельзя обойтись без это самой инициализации?
можно
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
21.02.2016, 20:47  [ТС]
Но я же прошу подробнее

Для чего такой механизм вообще придуман?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2016, 20:55
Цитата Сообщение от skolm Посмотреть сообщение
Для чего такой механизм вообще придуман?
какой механизм?
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
21.02.2016, 21:15  [ТС]
Ну механизм инициализации св-в у класса
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2016, 21:19
Цитата Сообщение от skolm Посмотреть сообщение
механизм инициализации св-в у класса
А зачем нужна инициализация обычной переменной понятно? Свойства класса тут ничем не отличаются
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
21.02.2016, 21:30  [ТС]
Если в любой задаче я могу обойтись без св-в у класса, зачем их вообще создавать?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2016, 21:40
Цитата Сообщение от skolm Посмотреть сообщение
Если в любой задаче я могу обойтись без св-в у класса, зачем их вообще создавать?
ООП позволяет упростить реализацию некоторых, как правило достаточно крупных задач
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
21.02.2016, 21:52  [ТС]
Ну это ООП " Мухи отдельно, котлеты отдельно". Я же могу без инициализации этих переменных в классе обойтись? Просто передавать в get и set методы нужные переменные - это же тоже будет ООП.
А для чего инициализация нужна. В инициализацию я вкладываю такой смысл:
Передача в конструктор переменных, которые будут там переприсвоены для полей самого класса.

Есть класс, допустим у этого класса есть метод, который выводит строку, которую мы передаем в виде параметра.

Создаем экземпляр, передаем в метод переменную. Всё.

А если допустим я ту же переменную передам в конструктор и определю её как св-во класса и дальше это св-во я вызову в методе, получится тоже самое.
И я понимаю, что так и нужно делать, но зачем делать именно так? Почему такой способ будет лучше?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2016, 21:56
Цитата Сообщение от skolm Посмотреть сообщение
Я же могу без инициализации этих переменных в классе обойтись?
Прежде чем пользовться любой переменной, она должна быть инициализирована.
Цитата Сообщение от skolm Посмотреть сообщение
А если допустим я ту же переменную передам в конструктор и определю её как св-во класса, то чем такой подход будет лучше?
Ничем не лучше и не хуже. Как в конкретной ситуации будет логичнее и удобнее, так и делать
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
21.02.2016, 22:14  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Прежде чем пользовться любой переменной, она должна быть инициализирована.
Ну это необходимо для того чтобы переменную можно было использовать не в одном методе, а в нескольких. Например, метод который делает только trim, метод который делает htmlspecialchars, метод который делает stripslashes?

Мне нужно разобраться для чего нужно в классе переопределять св-ва. Любой пример, в словесной форме, когда может понадобиться св-ва переопределять в классе.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2016, 22:22
Цитата Сообщение от skolm Посмотреть сообщение
Ну это необходимо для того чтобы переменную можно было использовать не в одном методе, а в нескольких
Методы тут не при чем. Без инициализации переменные не имели бы смысла:
PHP
1
2
$i; // эта переменная не инициализирована. Никакого смысла не несет
$i = 1; // вот теперь она инициализирована, с ней можно работать.
Цитата Сообщение от skolm Посмотреть сообщение
Мне нужно разобраться для чего нужно в классе переопределять св-ва.
Под переопределять имеется ввиду изменить значение? Ну для того же, для чего нужно изменять значение переменной (название подсказывает что это что-то изменяющееся)
Попробуй какую-нибудь задачу решить с помощью ООП, должно понятнее стать в процессе.
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
21.02.2016, 22:35  [ТС]
PHP
1
2
$i; // эта переменная не инициализирована. Никакого смысла не несет
$i = 1; // вот теперь она инициализирована, с ней можно работать.
Это я прекрасно понимаю, я пытаюсь понять зачем инициализировать переменную в классе, если я могу сразу переменные засовывать в нужные методы и там их определять как мне нужно.

Например у класса есть св-ва $a я в конструкторе передаю $b = 1;
Зачем переприсваивать эту переменную для класса таким образом $this->a = $b;

Если даже есть метод у того же класса, я же просто могу в виде параметра передать $b и проделать над этой переменной всё что нужно.
В чем разница использовать $this->a и использовать значение из параметра?
Но сколько уроков не просмотрел, люди периодически инициализируют переменные в конструкторе, а вот для чего это делается никто не говорит.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
22.02.2016, 09:35
Цитата Сообщение от skolm Посмотреть сообщение
Если даже есть метод у того же класса, я же просто могу в виде параметра передать $b и проделать над этой переменной всё что нужно.
Из Вашей логики выходит - а зачем вообще нужны классы? Можно же все обычными функциями реализовать.

Не по теме:

А можно, кстати, и без единой функции обойтись :D



Вам нужно для начала понять само ООП. На кой черт его придумали и зачем оно надо. Что такое класс и что такое объект класса.
1
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
22.02.2016, 10:51  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
Из Вашей логики выходит - а зачем вообще нужны классы?
Из моей логики выходит лишь вопрос, для чего писать в конструкторе инициализацию полей для класса и всё, а толком объяснить никто не может.

Цитата Сообщение от pav1uxa Посмотреть сообщение
Вам нужно для начала понять само ООП. На кой черт его придумали и зачем оно надо. Что такое класс и что такое объект класса.
Я понимаю что такое класс и что такое объект, я и пытаюсь понять, что такое ООП, задавая вопросы на форуме
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
22.02.2016, 11:25
Цитата Сообщение от skolm Посмотреть сообщение
я и пытаюсь понять, что такое ООП, задавая вопросы на форуме
А нужно делать это, постоянно программируя.

Детей, которых только только научили буквам, не заставляют сразу изучать падежи и склонения. Потому что все равно их не поймут. Сначала они должны прочитать много текста (книг). Так же и программирование. Нельзя все вот так вот с ходу понять. Нужно постоянно пытаться что то делать. Прежде чем идти дальше - нужно написать много своего кода. А на форуме уже конкретные вопросы задавать по типу "вот у меня ошибка такая, как исправить" или "мне надо вот это, как лучше сделать".
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
22.02.2016, 11:34  [ТС]
Я и задаю вопросы по программированию, в чем смысл инициализации переменных в классе?

Добавлено через 6 минут
Прежде чем я продолжу программировать, хочется четко понимать зачем св-ва классу и зачем их инициализировать в конструкторе, в противном случае, я просто буду использовать неправильный подход и в конце концов наступлю на какие-нибудь грабли
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
22.02.2016, 11:36
Цитата Сообщение от skolm Посмотреть сообщение
в чем смысл инициализации переменных в классе?
А зачем они вообще тогда нужны если их не инициализировать?
0
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
22.02.2016, 11:47  [ТС]
Я это и пытаюсь понять, зачем они вообще нужны и для чего их инициализировать
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
22.02.2016, 11:48
Цитата Сообщение от skolm Посмотреть сообщение
Я это и пытаюсь понять, зачем они вообще нужны и для чего их инициализировать
Не нужны. И инициализировать их не надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.02.2016, 11:48
Помогаю со студенческими работами здесь

Инициализация массива в классе
class matrix { int arr; ...... public: .............. void set_a(int input, int i, int j){arr=input;}; //тут ошибка };

Инициализация переменных в классе
>>> class A(): ... def __init__(self, data=): ... print data ... self.data = data ... def add(self, data): ... ...

Инициализация valarray в классе
Добрый день. Требуется помощь коллективного разума: совсем забыл, как прогать. Есть следующий кусок простого кода: //1.h ...

Инициализация укзателей в классе
Всем привет читаю книгу Пабло Халперна "Стандарная библиотека С++ на примерах". Там, в качестве обучения читателю предлагается пройти...

Инициализация char в классе
Не понимаю, как поместить символьный массив в класс. На выводе получаются случайные символы. class Person { char last_name; public: ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru