Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1

Классы требуется разъяснение

16.08.2016, 07:54. Показов 4275. Ответов 94

Студворк — интернет-сервис помощи студентам
Начал изучение классов и тут возникли вопросы, может кто подсказать и прояснить ситуацию?
1. Не могу понять зачем создавать дочерние классы, можно же обойтись одним родительским классом?
2. На примере:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class OtherClass extends MyClass {
   public static $my_static = 'статическая переменная';
 
   public static function doubleColon() {
      echo parent::CONST_VALUE . "\n";
      echo self::$my_static . "\n";
   }
}
 
OtherClass::doubleColon();
?>
Как я понял, после extends указывается родительский класс MyClass?
Слово parent указывает что константа будет вызвана из родительского класса, а self из дочернего класса?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2016, 07:54
Ответы с готовыми решениями:

Требуется разъяснение по типам данных
Курю книгу по Java и алгоритмам,и наткнулся на такую фразу которая поменяла моё отношение к программированию,изучаю сам программирование,и...

Требуется разъяснение по системам векторов
Пусть дано две системы векторов. Как определить, будет ли одна линейно выражаться чкрез другую? допустим размерность первой системы 3х3, а...

Требуется разъяснение понятий GPT и MBR применительно к SSD
Здравия желаю. пытаюсь установить windows 7 максимальная на SSD жесткий диск. понятие GPT и MBR для SSD бывает? просто UEFI надо ставить на...

94
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
08.09.2016, 12:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Gcom Посмотреть сообщение
Что значит разных?
разных значит физически находятся в разных местах в памяти

Добавлено через 31 секунду
Цитата Сообщение от Gcom Посмотреть сообщение
А можно пример из реального мира (не абстрактный) что бы понять суть этих неких идентификаторов?
Номер паспорта
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
08.09.2016, 13:02  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
разных значит физически находятся в разных местах в памяти
А можно как с примером про "Номер паспорта" объяснить на реальных вещах, все моменты по списку:
1. в РНР мы пишем class TestExample {} есть аналогия (пример) этому в реальном мире?
2. далее $obj1 = new TestExample(); какую аналогию из реального мира можно привести данному действию?
3. опять $obj2 = new TestExample(); теперь объяснить про этот эффект "физического нахождения в разных местах в памяти" тоже на реальном мире, и что бы он пересекался с примером из п.2

Просто я сейчас понял, что я просто не понимаю азов, а без них смысла нету углубляться, если не понимаешь суть основы.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.09.2016, 13:10
Цитата Сообщение от Gcom Посмотреть сообщение
1. в РНР мы пишем class TestExample {} есть аналогия (пример) этому в реальном мире?
Купили конструктор Лего, к нему прилагается инструкция. Вот эта инструкция (схема, по которой вы будете собирать дома из кирпичей) - это класс.

А каждый из домиков, построенных по этой инструкции - это объект (экземпляр класса).
Цитата Сообщение от Gcom Посмотреть сообщение
2. далее $obj1 = new TestExample(); какую аналогию из реального мира можно привести данному действию?
Это первый домик, построенный по инструкции.
Цитата Сообщение от Gcom Посмотреть сообщение
3. опять $obj2 = new TestExample();
Это второй домик, построенный по той же инструкции. Он выглядит точно также, построен из таких же кирпичей, но в итоге домиков два.
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
08.09.2016, 13:18  [ТС]
Jodah, пора статьи писать
А пример из реального мира просто супер

Едем дальше, получается те #1, #2, #3, #4 из вардампа, это типа серийных номеров которые присваиваются этим домикам, так? типа мы эти домики бросаем в большой черный пакет, а по этим номерам мы сможем их достать из пакета, так?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
08.09.2016, 13:33
Цитата Сообщение от Gcom Посмотреть сообщение
типа мы эти домики бросаем в большой черный пакет, а по этим номерам мы сможем их достать из пакета, так?
Вроде того.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.09.2016, 13:35
Gcom, насколько я понимаю, да.
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
08.09.2016, 13:51  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Gcom, насколько я понимаю, да.
Ну я имею ввиду пакет это аналогия эффекта "физического нахождения в разных местах в памяти".

Далее, изменим немного код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function myprint($obj) { echo ('<pre>'); var_dump($obj); echo ('</pre><hr>'); }
 
class InstructionsFirst {}
class InstructionsSecond {}
 
$house1 = new InstructionsFirst(); # object(InstructionsFirst)#1 (0) {}
$house2 = new InstructionsFirst(); # object(InstructionsFirst)#2 (0) {}
$house3 = clone $house1;            # object(InstructionsFirst)#3 (0) {}
$house4 = $house1;                    # object(InstructionsFirst)#1 (0) {}
 
myprint($house1);
myprint($house2);
myprint($house3);
myprint($house4);
Теперь как я понимаю, по порядку:
class InstructionsSecond {} это мы добавили вторую инструкцию, по которой мы будем собирать другие домики.
$house1, $house2 тут понятно два одинаковых домика
А вот что за домики $house3 и $house4 не совсем понятно, что с ними произошло, как они получились, третий вроде физически есть (со своим номером), а вот четвертый не понятно, первое что на ум приходит, это просто номерок от первого дома. А что будет когда мы захотим достать четвертый домик из пакета, его же в руках физически не будет, достанем только номерок? Поясните этот момент.
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
08.09.2016, 14:37
Цитата Сообщение от Gcom Посмотреть сообщение
третий вроде физически есть (со своим номером)
третий можно представить что инструкции нет, а первый домик есть. И глядя на первый домик собираем третий. А вот четвертый в данной предметной области адекватно объяснить не получится
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
08.09.2016, 15:33
Цитата Сообщение от Gcom Посмотреть сообщение
четвертый не понятно, первое что на ум приходит, это просто номерок от первого дома
Тут можно такую аналогию провести:
Есть два человека и каждый из них говорит, что у них есть домик. На самом же деле у них один домик на двоих.
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
08.09.2016, 15:48  [ТС]
СПС за ответы, теперь такой вопрос, если еще методы которые позволяют строить новые домики по инструкции?
На данный момент их три:
1. = new
2. = clone
3. =
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
08.09.2016, 15:51
Gcom, как сказали выше, 3-ий домик мы делаем без инструкции, просто смотрим на 1-ый и делаем по аналогии (предполагается, что у нас прямые руки и всегда получается точная копия).

Цитата Сообщение от Gcom Посмотреть сообщение
А что будет когда мы захотим достать четвертый домик из пакета
Изначально неправильно, поскольку домиков 3, а не 4. $house4 и $house1 - это один и тот же домик.

С чем это можно сравнить... допустим, у вас есть сайт. И вы на всех страницах разместили ссылку на главную страницу:
HTML5
1
<a href="/main/">Перейти на главную</a>
Ссылок много, их может быть даже несколько штук на одной странице. Но главная страница - всегда одна, сколько бы ссылок на неё не было сделано.
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
09.09.2016, 06:00  [ТС]

Не по теме:

Цитата Сообщение от Jodah Посмотреть сообщение
что у нас прямые руки
Это по моему главный девиз по жизни :)

вот и я решил выпрямить руки в ООП :)



Добавлено через 14 часов 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
34
35
36
37
38
39
40
41
class InstructionsFirst
{
    # объявление свойств
    public $window1;
    public $door1 = 'red';    
}
class InstructionsSecond
{
    # объявление свойств
    public $window1;
    public $door1 = 'green';
}
 
$house1 = new InstructionsFirst(); 
$house2 = new InstructionsFirst(); 
$house3 = new InstructionsSecond();
$house4 = new InstructionsSecond();
 
myprint($house1);
myprint($house2);
myprint($house3);
myprint($house4);
 
/*
object(InstructionsFirst)#1 (2) {
  ["window1"]=> NULL
  ["door1"]=> string(3) "red"
}
object(InstructionsFirst)#2 (2) {
  ["window1"]=> NULL
  ["door1"]=> string(3) "red"
}
object(InstructionsSecond)#3 (2) {
  ["window1"]=> NULL
  ["door1"]=> string(5) "green"
}
object(InstructionsSecond)#4 (2) {
  ["window1"]=> NULL
  ["door1"]=> string(5) "green"
}
*/
Теперь собственно вопросы и мои мысли:
1. object(InstructionsFirst)#1 (2) - тут говориться о том, что у нас есть домик object(), построенный по инструкции InstructionsFirst, у него есть свой уникальный "адрес" (идентификационный номер) #1, а (2) я так понимаю, что у нас в доме "есть" две вещи (переменные) в частности окно ["window1"] и дверь ["door1"]
2. Теперь такой вопрос в чем различие (на физическом уровне) тех же дверей ["door1"] у домиков созданных по первой инструкции?
object(InstructionsFirst)#1 (2) {
["window1"]=> NULL
["door1"]=> string(3) "red"
}
object(InstructionsFirst)#2 (2) {
["window1"]=> NULL
["door1"]=> string(3) "red"
}
То что они отличаются от созданных по второй инструкции и так понятно.
object(InstructionsFirst)#1 (2) {
["window1"]=> NULL
["door1"]=> string(3) "red"
}
object(InstructionsSecond)#3 (2) {
["window1"]=> NULL
["door1"]=> string(5) "green"
}
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
09.09.2016, 06:09
Цитата Сообщение от Gcom Посмотреть сообщение
"есть" две вещи (переменные) в частности окно ["window1"] и дверь ["door1"] а их "свойства" еще не определены => NULL
Не определено только значение window1, у door1 значение "red" (в первом объекте).
Цитата Сообщение от Gcom Посмотреть сообщение
Теперь такой вопрос в чем различие (на физическом уровне) тех же дверей ["door1"] у домиков созданных по первой инструкции?
Они принадлежат разным объектам. Если поменяете это свойство у одного объекта, у второго оно останется, каким было до этого.
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
09.09.2016, 06:13  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Не определено только значение window1, у door1 значение "red" (в первом объекте).
Я исправил этот момент, до этого было и там и там => NULL

Добавлено через 2 минуты
Цитата Сообщение от Para bellum Посмотреть сообщение
Если поменяете это свойство у одного объекта, у второго оно останется, каким было до этого.
Т.е. на нашем примере построили два дома по первой инструкции со "стандартным" окном, жильцу не понравилось зеленое окно, он его перекрасил в красное, так?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
09.09.2016, 06:29
Цитата Сообщение от Gcom Посмотреть сообщение
Т.е. на нашем примере построили два дома по первой инструкции со "стандартным" окном, жильцу не понравилось зеленое окно, он его перекрасил в красное, так?
Да.
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
09.09.2016, 06:41  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Да.
Ну вот и реализация этого:
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
class InstructionsFirst
{
    # объявление свойств
    public $window1;
    public $door1 = 'red';
    public $door_width = 100; # ширина двери
 
    # объявление методов
    public function changeWidthOfDoor()
    {
        $this->door_width = 110;
    }
}
class InstructionsSecond
{
    # объявление свойств
    public $window1;
    public $door1 = 'green';
    public $door_width = 150; # ширина двери
}
 
$house1 = new InstructionsFirst(); myprint($house1);
$house2 = new InstructionsFirst(); myprint($house2);
$house3 = new InstructionsSecond();
 
$house2->changeWidthOfDoor(); myprint($house2);
Вопрос как "вставить" в третий дом, измененное окно из второго дома?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
09.09.2016, 06:54
Цитата Сообщение от Gcom Посмотреть сообщение
Ну вот и реализация этого
Обычно для этого используют setters, а свойств делают недоступными извне.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class InstructionsFirst
{
    # объявление свойств
    protected $window1;
    protected $door1 = 'red';
    protected $door_width = 100; # ширина двери
 
    public function setDoorWidth($width)
    {
        $this->door_width = $width;
    }
 
    public function getDoorWidth()
    {
        return $this->door_width;
    }
}
 
$house2->setDoorWidth(110);
Но для примера изменения свойства и Ваш метод подойдёт. Главное -- свойство поменять.
Цитата Сообщение от Gcom Посмотреть сообщение
Вопрос как "вставить" в третий дом, измененное окно из второго дома?
Получить значение свойства из одного и передать другому. Выше добавил метод getDoorWidth(), с помощью него так:
PHP
1
$house3->setDoorWidth($house2->getDoorWidth());
При условии, что у третьего объекта есть метод setDoorWidth.
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
09.09.2016, 07:11  [ТС]
Para bellum, на данном этапе все понятно теперь стало.

А может есть еще способы передачи значений свойств из объекта в объект?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
09.09.2016, 07:16
Цитата Сообщение от Gcom Посмотреть сообщение
А может есть еще способы передачи значений свойств из объекта в объект?
Если свойства публичные или используется перегрузка -- то можно так:
PHP
1
$object1->foo = $object2->bar;
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
09.09.2016, 07:52  [ТС]
На наших примерах с домиками, Интерфейсы это типа содержания (оглавления) инструкции по которой собираются домики? так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2016, 07:52
Помогаю со студенческими работами здесь

Задача (разъяснение) в алгоритм (программа, используя базовый и производный классы, создавала массив объектов типа производного класса)
Задача на наследование классов, базовый класс - &quot;люди&quot;, производный - &quot;студенты&quot;...как я понял, а базовом надо создать символьную...

Требуется разработать классы для объектов и вывести списки
Мальчики, помогите решить задание, никак не могу разобраться что и как делать, я новенькая в пхп, начала проходить курс и не могу...

Механизм наследования. В программе требуется описать базовый и производные классы
В программе требуется описать базовый и производные классы. Базовый класс (возможно, абстрактный) с помощью виртуальных или абстрактных...

Разъяснение
Ребят, может кто-то сможет объяснить новичку в данном языке программирования, что требуется сделать в данной работе

Разъяснение по ТЗ
Доброго времени суток, суть вопроса состоит в том что бы вы помогли мне разобраться с данным ТЗ. Что вам не ясно в данном ТЗ и какой...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru