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

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

21.02.2016, 20:36. Показов 3738. Ответов 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
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
22.02.2016, 11:51  [ТС]
Студворк — интернет-сервис помощи студентам
Вопрос актуален.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
26.02.2016, 15:48
Лучший ответ Сообщение было отмечено skolm как решение

Решение

Цитата Сообщение от skolm Посмотреть сообщение
я пытаюсь понять зачем инициализировать переменную в классе, если я могу сразу переменные засовывать в нужные методы и там их определять как мне нужно
1) зачем в каждый метод передавать одну и туже переменную, если можно это сделать один раз?
Например логин и пароль для подключения к бд явно достаточно передать один раз.
2) а если на момент вызова метода вы не знаете какую переменную надо передать?
Например не хочу я таскать логин/пароль по всему приложению.

Цитата Сообщение от skolm Посмотреть сообщение
Я понимаю что такое класс и что такое объект
Зато вы совершенно не понимаете что такое инкапсуляция. Те примеры классов которые вы приводите, только работают с данными. Но ООП подразумевает также и хранение данных в объекте.
Удобный способ(имхо)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$db = new DataBase($host, $user, $pass);
$obj = new UserMapper($db);
 
$oUser = $obj->getUserById(1);
$oUser = $obj->getUserByPhone('96212345678');
 
class UserMapper {
    protected $db;
 
    public function __construct($db) {
        $this->db = $db;
    }
 
    public function getUserById($user_id) {
        return $this->db->select("select * from users where user_id = $user_id");
    }
 
    public function getUserByPhone($phone) {
        return $this->db->select("select * from users where phone = $phone");
    }
}
А вы предлагаете примерно такое:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$obj = new UserMapper();
$oUser = $obj->getUserById($host, $user, $pass, 1);
$oUser = $obj->getUserByPhone($host, $user, $pass, '96212345678');
 
class UserMapper {
    public function getUserById($host, $user, $pass, $user_id) {
        $db = new DataBase($host, $user, $pass);
        return $db->select("select * from users where user_id = $user_id");
    }
 
    public function getUserByPhone($host, $user, $pass, $phone) {
        $db = new DataBase($host, $user, $pass);
        return $db->select("select * from users where phone = $phone");
    }
}
И это я еще сильно упростил. А ваш подход приведет к тому, что в большом приложении надо будет передавать сотни параметров в каждом методе.
1
19 / 18 / 5
Регистрация: 01.02.2013
Сообщений: 171
26.02.2016, 17:44  [ТС]
Вот где собака зарыта, теперь более ясно, спасибо за примеры
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2016, 17:44

Инициализация массива в классе
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: ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru