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

Наследование (свойства и метод)

14.09.2018, 09:59. Показов 1294. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую! У меня следующий вопрос. Есть у меня загрузчик, который подгружает сначала файл controller.php, который в свою очередь создаёт свойства и в конструкторе для них создаёт объекты класса. Код следующий:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Controller {
    protected $configs;
    protected $db;
    protected $modules;
    protected $action;
    protected $result;
 
    function __construct() {
        $this->configs = new Configs();
        $this->db = new DB();
        $this->modules = new Modules();
        $this->action = $this->modules->getAction();
        $this->templater = new Templater();
    }
}
Затем у меня есть файл контроллер странц (pages.php), который наследует файл controller.php:
PHP
1
2
3
4
5
<?php
class Pages extends Controller {
    private $templater;
....
}
Вопрос: те свойства получается становятся тоже доступными из controllers.php как я понял.. А результат работы метода __construct()? Свойствам останутся приписаны те обьекты классов которые там были прописаны?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2018, 09:59
Ответы с готовыми решениями:

Передача свойства класса в метод
Добрый день. Проблема такова: Имею класс с методами и свойствами, нужно методу передать свойство(а не его значение). class Domino{ ...

Наследование свойства filter
Добрый день уважаемые. Тут с вопросом столкнулся, может и детский, но всё же...как сделать так что б filter: grayscale(1) не наследовался...

Дублирующиеся свойства - наследование, интерфейс?
Задача: создать редактор тэгов для SCADA. Возник вопрос на этапе проработки предметной области. Тэги (технологические переменные)...

13
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.09.2018, 10:13
Цитата Сообщение от Linked Посмотреть сообщение
свойства получается становятся тоже доступными из controllers.php как я понял
http://php.net/manual/ru/langu... bility.php
Цитата Сообщение от php.net
Доступ к свойствам и методам класса, объявленным как public (общедоступный), разрешен отовсюду. Модификатор protected (защищенный) разрешает доступ самому классу, наследующим его классам и родительским классам.
Цитата Сообщение от Linked Посмотреть сообщение
А результат работы метода __construct()? Свойствам останутся приписаны те обьекты классов которые там были прописаны?
Цитата Сообщение от php.net
Конструкторы, определенные в классах-родителях не вызываются автоматически, если дочерний класс определяет собственный конструктор.
Если в дочернем конструктор не определён, вызовется родительский.
http://php.net/manual/ru/language.oop5.decon.php

Не бойтесь обращаться к документации.
0
 Аватар для otto-fukin
14 / 60 / 21
Регистрация: 15.06.2017
Сообщений: 572
15.09.2018, 12:50
Цитата Сообщение от Linked Посмотреть сообщение
те свойства получается становятся тоже доступными из controllers.php как я понял..
не понял. ты не понял. нету в твоем примере использования кода файла controllers.php. (допускаю опечатку)ни из этого файла, ни из free.porno.txt они доступны не станут. если хочешь получить доступ к данным наследников объявляй абстрактные функции или переопределяй существующие в потомках. к свойствам потомка доступа из предка не будет
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
17.09.2018, 05:28
$db лучше не в конструктор, а в модель, она не всегда нужна
0
17.09.2018, 06:21

Не по теме:

Цитата Сообщение от полудух Посмотреть сообщение
$db лучше не в конструктор
Не в контроллер, хотели сказать?

0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
17.09.2018, 06:26
не проснулся ещё )
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
25.09.2018, 01:37
Заголовок темы 1:1 для моего вопроса, религия не позволяет дублировать заголовки тем на форуме.

Вопрос к гуру ООП php.


Я колхозник.


Есть класс CPStore который зашит в библиотеке libphpcades.so (супер пупер библиотека всего несколько экземпляров в мире)

Не желаю в слепую писать проект без автокомплетов и док блоков (готовых классов нет)
Пишу собственные.

Вот в этой libphpcades.so библиотеке
лежат методы

HTML5
1
2
3
4
5
6
7
8
9
Array
(
    [0] => __construct
    [1] => Open
    [2] => Close
    [3] => get_Certificates
    [4] => get_Location
    [5] => get_Name
)
Я хочу их вытащить наружу и пользоваться на здоровье, как правильно это сделать???????

Какие варианты я знаю:

1. Наследовать класс class prefixCPStore extends CPStore и переопределить методы дав им другое имя
2. Вариант примера ниже

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CPStore
{
 
    private $cpStore;
    
    public function __construct ()
    {
        $cpStore = get_class($this);
        $this->cpStore = new $cpStore();
    }
 
    public function Open()
    {
        $this->cpStore->Open();
    }
 
}

Какие есть еще варианты????
Спасибо!
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
25.09.2018, 11:51
что значит "зашит"?
нельзя просто $obj = new CPStore(); ?
или, если хотите его внутри своего класса, то инъекцию сделать:
PHP
1
2
3
4
5
6
7
8
9
10
11
use CPStore;
class myClass
{
    protected $cpstore;
 
    // CPStore из "use CPStore" привязывается к "protected $cpstore"
    // тут можно несколько таких инъекций указывать
    function __construct(CPStore $cpstore)    {$this->cpstore = $cpstore;}
 
 
}
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
25.09.2018, 12:07
Цитата Сообщение от полудух Посмотреть сообщение
что значит "зашит"?
Добрый день.
Я имел в виду то что PHP классов нет, что бы можно было в современной IDE посмотреть иерархию, строить диаграммы, писать док-блоки и прочее.

Цитата Сообщение от полудух Посмотреть сообщение
нельзя просто $obj = new CPStore(); ?
Ну конечно же можно, я же не говорил что нельзя. Но так делали динозавры, я современный чел.

Цитата Сообщение от полудух Посмотреть сообщение
или, если хотите его внутри своего класса, то инъекцию сделать:
PHPВыделить код
1
2
3
4
5
6
7
8
9
10
11
use CPStore;
class myClass
{
* * protected $cpstore;
// CPStore из "use CPStore" привязывается к "protected $cpstore"
* * // тут можно несколько таких инъекций указывать
* * function __construct(CPStore $cpstore) * *{$this->cpstore = $cpstore;}
}
Так это же нужно будет в конструктор передавать этот незадокументированный класс???

А вот так практикуют?
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/**
 * Created by PhpStorm.
 * User: igorp
 * Date: 25.09.2018
 * Time: 2:33
 */
 
namespace Csp;
 
class Version
{
 
    private $version;
 
    /**
     * IVersion constructor.
     */
    public function __construct ()
    {
        $class = 'Version';
        $this->version = new $class();
    }
 
    /**
     * @return mixed
     */
    public function get_MajorVersion ()
    {
        return $this->version->get_MajorVersion();
    }
 
    /**
     * @return mixed
     */
    public function get_MinorVersion ()
    {
        return $this->version->get_MinorVersion();
    }
 
    /**
     * @return mixed
     */
    public function get_BuildVersion ()
    {
        return $this->version->get_BuildVersion();
    }
 
    /**
     * @return mixed
     */
    public function toString ()
    {
        return $this->version->toString();
    }
}
Спасибо.

Добавлено через 2 минуты
Речь об автокомплетах

Добавлено через 3 минуты
Но не просто создать классы что бы IDE их хаотично подхватывала, а сделать более правильно, переопределить скрытые методы

Вот так:
PHP
1
2
3
$version = new Version();
 
$version->Здесь фантастика, список функций
Повторю, libphpcades.so это очень редкая и специфическая библиотека.
И я счастливый обладатель её.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
25.09.2018, 12:08
Цитата Сообщение от popryduhin Посмотреть сообщение
PHP
1
2
3
4
5
public function __construct ()
{
    $class = 'Version';
    $this->version = new $class();
}
ну так это тоже самое
Инъекция - вполне рабочее и современное решение
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
25.09.2018, 12:11
Взгляните, методы 1:1
PHP
1
2
3
4
5
6
7
/**
     * @return mixed
     */
    public function get_MajorVersion ()
    {
        return $this->version->get_MajorVersion();
    }
Добавлено через 1 минуту
Цитата Сообщение от полудух Посмотреть сообщение
ну так это тоже самое
Ну, да.

Так делают профессионалы?

Добавлено через 1 минуту
Цитата Сообщение от popryduhin Посмотреть сообщение
Так делают профессионалы?
Речь о профессионалах, я супер пупер профессионал, прошу не путать.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
25.09.2018, 12:12
Цитата Сообщение от popryduhin Посмотреть сообщение
Так делают профессионалы?
и так тоже делают
а когда есть возможность, то лучше через static::
0
30 / 26 / 8
Регистрация: 17.09.2015
Сообщений: 498
Записей в блоге: 6
25.09.2018, 12:13
Цитата Сообщение от полудух Посмотреть сообщение
и так тоже делают
а когда есть возможность, то лучше через static::
Можете пример сделать?
Спасибо.
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
25.09.2018, 12:16
его не надо было бы объявлять через new
сразу: Version::get_MajorVersion()

PHP
1
2
3
4
class Version
{
    static function get_MajorVersion()    {...}
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.09.2018, 12:16
Помогаю со студенческими работами здесь

Прототипное наследование свойства [[Call]]
В общем, созрел у меня такой вопрос: Есть некий код (вот он, собственно)// just function f = function(x){return x;}; // just...

Наследование, анимация, шарик. Реализовать 3 объекта TBall2, наследующие все свойства от TBall
Здравствуйте, товарищи. Вот делал я один проект - там шарики летают по форме, шарики все занесены в массив Balls, каждый элемент которого...

Наследование(метод)
Плохо классы понимаю. Поясните : в основном классе я создал метод (нахождение стоимости), далее в потомке создал метод(стоимость*0.10). Но...

Наследование и метод CompareTo()
Добрый день. Задача следующая : 1. Создать абстрактный класс Figure с функциями вычисления площади и периметра, а также функцией,...

Метод присваивания и наследование
привет, мне нужно отнаследоваться от класса, но почему то возникли проблемы с присвоением #include &lt;chrono&gt; #include...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru