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

Параметры метода или переменные класса

10.04.2014, 02:01. Показов 4148. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста, в чем заключается практическая разница между передачей параметров в метод и передачей параметров в переменную объекта, с которой потом вызывается этот метод?
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
<?php
 
# Создаю класс с двумя методами
 
class Parametr{
 
    public $var;
    
    # Этот печатает переменную своего класса
    public function method1(){
        echo $this->var;
    }
    
    # Этот печатает переменную своего параметра
    public function method2($var){
        echo $var;
    }
 
}
 
# При вызове со стороны клиента, я могу сделать так:
 
$run = new Parametr();
$run->var = "вывод";
$run->method1();
 
# Или так:
$run = new Parametr();
$run->method1("вывод");
 
# Результат будет один и тот-же
 
?>
Под каким бы углом не смотрел на это, не могу увидеть реальную причину создавать метод с параметрами или метод без параметров, но который для работы использует переменные объекта того или иного класса. Прошу помочь в разъяснении этого вопроса . То есть интересует в первую очередь именно когда и какие методы целесообразней использовать. Заранее большое спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2014, 02:01
Ответы с готовыми решениями:

Переменные на уровне класса или метода?
Есть класс в котором крутятся порядка 30-40 переменных. Сам класс небольшой, но в нём рассчитываются куча параметров. Есть как и...

Передача label.Text в параметры метода стороннего класса
Здравствуйте. Возникла необходимость в методе класса передать 3 значения лейблам на форме. Как это сделать? Пробовал просто в методе делать...

Параметры метода через ИЛИ
Здравствуйте! Подскажите, как сделать метод, в который параметры можно будет передавать через логическое ИЛИ ( | )?

5
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
10.04.2014, 16:20
Не принято(не правильно) создавать классы с открытыми свойствами.
Свойства закрыты, методы служат для доступа к свойствам.
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
class Book
{
    private $author;
    private $countPage;
    private $text = NULL;
    
    public function __construct($author, $countPage)
    {
        $this->author = $author;
        $this->countPage = $countPage;
    }
    
    public function getCountPage()
    {
        return $this->countPage;
    }
    
    public function getAuthor()
    {
        return $this->author;
    }
    
    public function setText($text)
    {
        $this->text = $text;
    }
    
    public function getText()
    {
        if (is_null($this->text)) {
            throw new Exception('Текст не найден');
        }
        
        return $this->text;
    }
}
 
$book = new Book('Автор', 4);
 
echo $book->getAuthor();
echo $book->getCountPage();
echo $book->getText();
1
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 5
10.04.2014, 20:51  [ТС]
Цитата Сообщение от Drygba Посмотреть сообщение
Не принято(не правильно) создавать классы с открытыми свойствами.
Свойства закрыты, методы служат для доступа к свойствам.
Я правильно понял, методы с передачей параметров рациональней создавать для того, что бы через них ссылаться на скрытую переменную класса? То есть, если я хочу передать значение в переменную класса, то я делаю это не напрямую, а через метод? Например так:
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
class Parametr {
 
    private $name;
    public $surname;
 
    # Рекомендуемый вариант
    public function getName($name) {
        $this->name = $name;
    }
 
    # Не рекомендуемый вариант
    public function printName() {
        echo $this->name;
    }
 
    public function printSurname() {
        echo $this->surname;
    }
 
}
 
$printname = new Parametr();
 
$printname->getName("Иван "); # Рекомендуемый вариант
$printname->surname = "Иванович"; # Не рекомендуемый вариант
 
$printname->printName();
$printname->printSurname();
0
 Аватар для Dolphin
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
11.04.2014, 07:03
Цитата Сообщение от AlexeiD Посмотреть сообщение
методы с передачей параметров рациональней создавать для того, что бы через них ссылаться на скрытую переменную класса?
Так рекомендуют делать. Называется по принципу черного ящика. Помню в универе нам препод рассказывал на примере пульта. При нажатии на кнопку, ты знаешь что будет в итоге, но не знаешь что конкретно происходит. Ты может как то в будущем оптимизировать это все или переделать, но итог будет один.
Еще плюс в том, что ты можешь проверять эти данные на соответствие требованиям. Например в переменной должно быть число, а туда пытаются установить какую то строку.
1
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 5
11.04.2014, 14:01  [ТС]
Цитата Сообщение от Dolphin Посмотреть сообщение
Так рекомендуют делать.
Даааа, код конечно расползается невероятно.
0
4 / 4 / 1
Регистрация: 06.03.2014
Сообщений: 85
28.04.2014, 01:27
Инкапсуляция
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2014, 01:27
Помогаю со студенческими работами здесь

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

Делегаты или вызов метода класса из другого класса
Добрый день! В попытке изучения c# наткнулся на такую проблему: 1. Зачем нужен делегат? Ведь я могу вызвать метод класса из другого...

Как правильно называть переменные в заголовке функции (параметры или аргументы)?
Вопрос про термины. Пришел новый сотрудник и блеснул знаниями, оказывается переменные в заголовке функции, надо называть не...

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна...

Параметры-значения и параметры-переменные в функции и процедуре
Плиз помогите в этом коде поставить параметры или атрибуты, не уверен в правильном названии, для функции и процедуры, я по примерам...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru