|
|
|
| Вопрос в следующим:
есть родительский класс Class_form_elements для классов text и form
А мне нужно в классе form в методе display() вызвать метод display() класса text.
eсли создан объект класса text.
Т.е. в методе форм выводятся теги <form > и </form >
а между ними нужно вывести метод display() класса text.
eсли создан объект класса text.
Можно конечно создать для класса form два метода display_1() и display_2()
а между двумя методами уже вызвать метод display() класса text.
Но это будет не очень красиво :(
Может есть более элегантный способ проверки входящих параметров, нежели применил я:
<?php
if (isset($this->style)) {echo ' style="'.$this->style.'"';}
?>
|
можно в принципе не проверять а выводить пустыми но это опять же лишний html-код.
Да и потом появиться такая задача где нужно будет вообще не выводить параметры если они не заданы.
<?php
$form=new form();
$text=new text();
$text->value= 3;
$text->name= "name";
$form->display();
?>
|
вместо
<?php
$form=new form();
$form->display_1();
$text=new text();
$text->value= 3;
$text->name= "name";
$text->display();
$form->display_2();
?>
|
реализация классов :
<?php
// Класс Form_elements
class Class_form_elements
{
// Члены класса Form_elements
var $style;
var $class ;
var $lang;
var $name;
var $id;
var $accesskey;
var $tabindex;
var $dir;
var $title;
// метод display
function display()
{
if (isset($this->style)) {echo ' style="'.$this->style.'"';}
if (isset($this->class)) {echo ' class="'.$this->class.'"';}
if (isset($this->lang)) {echo ' lang="'.$this->lang.'"';}
if (isset($this->name)) {echo ' name="'.$this->name.'"';}
if (isset($this->id)) {echo ' id="'.$this->id.'"';}
if (isset($this->accesskey)) {echo ' accesskey="'.$this->accesskey.'"';}
if (isset($this->tabindex)) {echo ' tabindex="'.$this->tabindex.'"';}
if (isset($this->dir)) {echo ' dir="'.$this->dir.'"';}
if (isset($this->title)) {echo ' title="'.$this->title.'" ';}
}
}
class text extends Class_form_elements
{
var $value;
var $align;
var $size ;
var $maxlength;
var $readonly ;
function display()
{
echo '<input type="text"';
Class_form_elements :: display();
if (isset($this->value)) {echo ' value="'.$this->value.'"';}
if (isset($this->align)) {echo ' align="'.$this->align.'"';}
if (isset($this->size)) {echo ' size="'.$this->size.'"';}
if (isset($this->maxlength)) {echo ' maxlength="'.$this->maxlength.'" ';}
if (isset($this->readonly)) {echo ' readonly="'.$this->readonly.'" ';}
echo ' />';
}
}
class form extends Class_form_elements
{
var $action;
var $method="POST";
var $target;
var $enctype;
function display()
{
echo '<form ';
Class_form_elements :: display();
if (isset($this->action)) {echo ' action="'.$this->action.'"';}
if (isset($this->method)) {echo ' method="'.$this->method.'"';}
if (isset($this->target)) {echo ' target="'.$this->target.'"';}
if (isset($this->enctype)) {echo ' enctype="'.$this->enctype.'"';}
echo ' >';
text :: display();
echo '</form>';
}
}
?>
|
тут наверно нужно применить абстрактные методы или интерфейсы, я пока что то не въехал ... | |
|
|
|
|
|
|
|
для: Виктор-тот
(15.07.2007 в 05:42)
| | global $text;
$text->display(); | |
|
|
|
|
|
|
|
для: bronenos
(15.07.2007 в 08:58)
| | <?php
$form=new form();
$text=new text();
$text->value= 3;
$text->name= "name";
$form->display();
?>
мне без $text->display(); надо
что бы все поля и саму форму вывести одним методом $form->display();
Тобишь метод с данными из одного объекта должны попасть в другой метод. | |
|
|
|