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

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

21.02.2016, 20:36. Показов 3421. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru