PHP Sınıfı diğer işlevine bir işlevi VAR Paylaşım

2 Cevap php

Well, I am not good at scripting, and I am kinda Photoshop guy. I am also new at PHP, so please bear with me. I am currently creating web form generation class which needs to be reusable and flexible for localization.

Ne ben burada sormak için umut:

How I can pass var from one function($avInq->textFeild) to the other function($avInq->JStextField).

What I need to let the functions share are:
$field_name ('form_note'),
$max_length ('250'),
$cols ('2'),
$rows ('30'),
$value

Ben $ avInq-> JStextField için bu değişkenler geçemeyeceği, bu yüzden strtr () gibi kullanılır:

$trans = array('%field_name%'=>$field_name,'%max_length%'=>$max_length,'%cols%'=>$cols,'%rows%'=>$rows, '%value%'=>$value);
      $field = strtr($js,$trans);

Ve ben daha iyi bir yolu olmalı hissediyorum.

İşte benim tüm kodu ve ben ne konuşuyorum elde edilecektir:

class formGenerator {

  public function textFeild ($field_label=true, $field_name, $cols, $rows, $max_length, $js=true){

    $escName = htmlentities($field_name);
    $value = $this-> getValue($field_name);
    $non_req = $this->getNotRequiredData($locale);//Get what non-reuired form is from languages
    $req = (in_array($field_name,$non_req)) ? '' : '*' ; //If non-req is in the field_name, then check it.
    $label = $field_label ? "$req$field_label" : "";

    if(isset($js)){
      $trans = array('%field_name%'=>$field_name,'%max_length%'=>$max_length,'%cols%'=>$cols,'%rows%'=>$rows, '%value%'=>$value);
      $field = strtr($js,$trans);
    } else {
      $field = "$value";
    }

    $output = $label.$field;
    print "".$output."";
  }


  public function JStextField ($js_action,$js_func,$input_guid_txt){

    if(isset($js_action)){
      $js_call = $js_action.'="'.$js_func.'"';
      $field = "%value%";
      $html_guid = "$input_guid_txt
Max:%max_length%"; $field = $field.$html_guid; return $field; } else { die('dont do anything'); } } }; // Call php class $avInq = new formGenerator; $varfooo = $avInq->JStextField ('onkeyup','return checklength(this,contact_max_warning)','Characters typed:'); $avInq->textFeild('Note','form_note','2','20','250',$varfooo);

Teşekkürler.

2 Cevap

Sen sınıf içinde değişkenleri tanımlayabilirsiniz:

class myclass
 {

   public $varname;  // If you want public access
   private $varname2;  // access only for members of this class
   protected $varname3;  // access for members of this class and descendants

ve böylece gibi yöntemleri kullanabilirsiniz:

echo $this->varname;

iki işlev arasındaki iletişim için yalnızca, onları en iyi şekilde beyan protected.

Ben ile geldi, bu kodu bir göz atın. Bu mevcut kod yapısını değiştirmek gerekebilir rağmen, aradığınız tam olarak ne olmalıdır.

class TextField
{
    var $form;

    var $field_label;
    var $field_name;
    var $cols;
    var $rows;
    var $max_length;

    function __construct($form, $field_label, $field_name, $cols, $rows, $max_length)
    {
        $this->form = $form;

        $this->field_label = $field_label;
        $this->field_name = $field_name;
        $this->cols = $cols;
        $this->rows = $rows;
        $this->max_length = $max_length;
    }

    function getValue()
    {
        return $this->form->getValue($this->field_name);
    }

    function getLabel()
    {
        $non_req = $this->form->getNotRequiredData($this->form->locale);
        $req = in_array($this->field_name, $non_req) ? '' : '*';
        return $this->field_label ? $req . $this->field_label : '';
    }

    function __toString()
    {
        $label = $this->getLabel();
        $value = $this->getValue();

        return $label . $value;
    }
}

class JsTextField
{
    var $textField;

    var $js_action;
    var $js_func;
    var $input_guid_txt;

    function __construct($textField, $js_action, $js_func, $input_guid_txt)
    {
        $this->textField = $textField;

        $this->js_action = $js_action;
        $this->js_func = $js_func;
        $this->input_guid_txt = $input_guid_txt;
    }

    function __toString()
    {
        $textField = $this->textField;

        $js_call = sprintf('%s="%s"', $this->js_action, $this->js_func);
        $html_guid = sprintf('%s Max:%s', $this->input_guid_txt, $textField->max_length);

        $field = $textField->getValue() . $html_guid;
        return $textField->getLabel() . $field;
    }
}



$form = new FormGenerator();

$textField = new TextField($form, 'Note', 'form_note', '2', '20', '250');
$js = new JsTextField($textField, 'onkeyup', 'return checklength(this,contact_max_warning)', 'Characters typed:');

echo $textField;
echo $js;