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

Создание класса формы на принципах ООП

23.08.2015, 08:37. Показов 3187. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задача : создать класс форма на принципах ООП как коллекцию элементов управления, таких как текстбокс, комбобокс, радиокнопка. Добавление данных контролов в список осуществлять путем вызова метода коллекция.add. Есть интерфейс IControl со следующими методами:
PHP
1
2
3
4
5
6
7
8
<?php
interface IControl
{
    function    GetControlType();
    function    GetValue();
    function    GetName();
}
?>
Есть классы контролов с реализованным конструктором, методом toString и реализованными методами данного интерфейса
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
57
58
59
60
61
62
63
require_once("FormInterfaces.php");
 
class Select implements IControl
    {
        private $Name, $Value, $FormName, $startValue, $endValue, $defValue;
 
        function __construct($Name, $startValue, $endValue, $FormName, $defValue)
        {
            $this->Name         = $Name;
            $this->FormName     = $FormName;
            $this->startValue   = $startValue;
            $this->endValue     = $endValue;
            $this->defValue     = $defValue;
            
            if (isset($_REQUEST[$this->FormName]))
            {
                $this->Value = $_REQUEST[$this->FormName];
            }
        }
 
        function __toString()
        {
            if(empty($this->defValue))
            {
                $str    = "";
                $str    .= $this->Name.'&nbsp';
                $str    .= '<select name="'.$this->FormName.'" >';
                for($Value = $this->startValue; $Value <= $this->endValue; $Value++)
                {
                    $str    .= '<option value = "'.$Value.'">'.$Value.'</option>';
                }
                
                $str    .= '</select>';
            }   
            else
            {
                $str     = "";
                $str    .= $this->Name.'&nbsp';
                $str    .= '<select name="'.$this->FormName.'" >';
                $str    .= '<option name="'.$this->FormName.'" value = "'.$this->defValue.'">'.$this->defValue.'</option>';
                $str    .= '</select>';
            }
            
            return  $str;
        }
        
    // ----- Реализация интерфейса IControl -------------------------
        function GetControlType()
        {
            return  __CLASS__;
        }
 
        function GetValue()
        {
            return  $this->Value;
        }
 
        function GetName()
        {
            return  $this->Name;
        }
    }
?>
есть класс формы с реализацией метода добавления переданного контрола в коллекцию:
PHP
1
2
3
4
5
6
7
8
9
10
11
        require_once("FormInterfaces.php");
    
    public class MyForm implements IControl
    {
        private $_list = array();
        
        public function add(IControl $ctrl)
        {
            $this->_list[] = $ctrl;
        }
    }
и теперь самое главное в форме которая создает объекты котнролов

Добавлено через 9 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require_once("TextBox.php");
    require_once("ComboBox.php");
    require_once("RadioButton.php");
 
    require_once("classForm.php");
    
    MyForm mf = new MyForm();
    
    TextBox tb1 = new TextBox("Имя", "", "FirstName");
    mf.add(tb1);
    TextBox tb2 = new TextBox("Фамилия", "", "SurName");
    mf.add(tb2);
    
    Select sl1 = new Select("День : ", 1, 31, "sDay", 12);
    mf.add(sl1);
    Select sl2  = new Select("Месяц : ", 1, 12, "sMonth", 5);
    mf.add(sl2);
    Select sl3  = new Select("Год рождения : ", 1970, 2015, "sYear", 2013);
    mf.add(sl3);
    
    Radio r1    = new Radio("Балы", "9", "sRadio");
    mf.add(r1);
и как сделать вывод контролов из коллекции на экран.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2015, 08:37
Ответы с готовыми решениями:

ООП Создание основы класса
Здравствуйте, получил задание, но немного недопонимаю как это сделать, с чего начать. Помогите пожалст или объясните образно как сделать, а...

ООП. Создание списка из своего класса
Задача - Создать список из готового класса. Примерный код класса: public class mFiles { public string Path; ...

Изменение texbox.text из другого класса / создание экземпляра единственной формы
Здравствуйте, перелопатила кучу инфы, но что-то никак. Такая ситуация: Есть класс формы: public partial class form1 : Form { ...

6
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
23.08.2015, 15:59
Цитата Сообщение от morfei74 Посмотреть сообщение
как сделать вывод контролов из коллекции на экран
например так
PHP
1
2
3
4
5
6
interface IControl{
    function    GetControlType();
    function    GetValue();
    function    GetName();
    function    __toString();
}
//---
public function __toString(){
return '<input type="text" ...>';
}

//---

// вывод
foreach($this->_list as $item){
echo $item;
}
0
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
23.08.2015, 16:17  [ТС]
но _toString уже есть у каждого контрола или это нужно делать у интерфейса, и туда же добавить фукцию вывода?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
23.08.2015, 16:31
Цитата Сообщение от morfei74 Посмотреть сообщение
но _toString уже есть у каждого контрола
но вы же об этом никак не упомянули. сделайте тогда функцию out() или render() какую-нибудь
0
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
23.08.2015, 16:37  [ТС]
function _toString () есть в коде приведенном выше, но не это главное, методы out или render описывать в классе интрефейса, или в классе формы, и еще вопрос должен ли видеть объект класса MyForm методы, когда я пишу mf.add(sl1); у меня не видит.

ранее в примере который давали на занятии делали следующим образом:
PHP
1
2
3
        $Ctrl       = array();
    $Ctrl[0]    = new FormDate("Срок годности", 2008, 2015, "ex");
    $Ctrl[0]    = new TextBox("Имя", "", "FirstName");

и далее вывод:
PHP
1
2
3
4
5
foreach($Ctrl as $C)
    {
        echo '<tr><td width="25%" align="left">'.$C->GetName().'&nbsp;</td>';
        echo '<td width="50%" align="right">'.$C->GetValue().'</td></tr>';
    }
это все делалось в принимающем сценарии, а как поступать теперь мне?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
23.08.2015, 16:51
Цитата Сообщение от morfei74 Посмотреть сообщение
есть в коде приведенном выше
действительно просто много букв
Цитата Сообщение от morfei74 Посмотреть сообщение
методы out или render описывать в классе интрефейса
конечно в интерфейсе для обеспечения единообразия контролов. Но если уж через __toString сделали так оставьте __toString
Цитата Сообщение от morfei74 Посмотреть сообщение
foreach($Ctrl as $C)
* * {
* * * * echo '<tr><td width="25%" align="left">'.$C->GetName().'&nbsp;</td>';
* * * * echo '<td width="50%" align="right">'.$C->GetValue().'</td></tr>';
* * }
это все делалось в принимающем сценарии, а как поступать теперь мне?
делайте это в форме. т.к. используется вывод через echo то __toString для формы не прокатывает. для нее можно сделать метод out()
0
0 / 0 / 1
Регистрация: 12.12.2012
Сообщений: 76
23.08.2015, 17:18  [ТС]
с выводом вроде разобрался, а как быть с видимостью, или в php такого нет как в c#, что у объекта класса видны все методы (просто я только начал учить php и поэтому так много вопросов и непонятностей), а для вывода коллекции контролов вызвать в принимающем сценарии вызвать метод mf.out()?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.08.2015, 17:18
Помогаю со студенческими работами здесь

Обращение с формы одного класса к объектам формы другого класса
Такой вопрос: у меня есть основной класс, в котором описано текстовое поле textpane на форме, есть другой класс в котором есть списки(...

Создать объект класса, зная имя класса, а параметры получать из формы
У меня есть форма, на которой есть Combobox, в котором можно выбрать класс. При выборе одно из айтемов, на форме добавляются поля ввода, в...

Переменная и из процедурного стиля в ООП класса
1.php &lt;?php require_once(&quot;dbconnect.php&quot;); require_once(&quot;login.php&quot;); class groupclass { function get_group() { ...

ООП получить доступ к экземпляру класса
public Dictionary&lt;string, WordInfo&gt; words = new Dictionary&lt;string, WordInfo&gt;(); public void Add(int id, string documentText) ...

Реализация класса Matrix (ООП на Python)
Помогите решить задачи, бьюсь больше недели, пока безрезультатно:cry: Обидно, последняя неделя обучения осталась, не могу закрыть... ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru