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

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

16.08.2016, 07:54. Показов 4461. Ответов 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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
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
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru