Создание универсальной функции с использованием isset () для использования в конструкторе?- PHP - PullRequest
0 голосов
/ 12 декабря 2011

В настоящее время я создаю класс для обработки всех моих данных формы, которые затем будут помещены в базу данных для дальнейшего использования.

В настоящее время в конструкторе моего класса я использую функцию isset () индивидуально, когда создаю свои переменные из POST.

function __construct()
    {
            if (isset($_POST['first_name']))
            {
                 $this->first_name = $_POST['first_name'];
            }
            else
            {
                 $this->first_name = "NULL";
            }

    }

Хотя этот пример только для одной переменной, я делаю это еще для 12 в моем приложении php.

Как гласит старая пословица: «Вы не можете повторить код».

Поэтому я пытаюсь создать функцию-член в своем классе, которая сможет обрабатывать все переменные, например, функцию get / set.

Так что в моем конструкторе все, что мне нужно сделать, это:

function __construct()
    {
            //first parameter is the member variable to be set, second parameter is the element name that the value will be POST from
           $firstname = $this->setter($firstname, "first_name");

    }

//what do I put here?
    function setter(first parameter, second parameter)
        {
                //checks the post variable has been set
                if ( isset($_POST[second_parameter]))
                return $_POST['second_parameter'];  
                else
                return "NULL";

        }

Может ли кто-нибудь указать мне правильное направление или с примером кода.

В аспекте, в котором я не уверен, как настроить функцию для обработки двух параметров с помощью общего дескриптора?

Спасибо!

Ответы [ 4 ]

1 голос
/ 12 декабря 2011

Надеюсь, я не ошибаюсь - вы это имеете в виду?

function __construct() {
       $firstname = $this->setter("first_name");
}

function setter($postKey) {
            if (isset($_POST[$postKey])) {
              return $_POST[$postKey];  
            }
            return NULL;
}

Edit:

Если вы хотите установить свойства класса, как насчет этого?

function __construct() {
      $this->setter("first_name", "firstName"); // Post key, class property
}

function setter($postKey, $classProperty) {
            if (isset($_POST[$postKey])) {
              return $this->{$classProperty} = $_POST[$postKey];
            }
            return $this->{$classProperty} = NULL;
}
0 голосов
/ 12 декабря 2011

Вот что я могу сделать.

class Person {
  function __construct(){
    $keystomatch = array("fname", "lname", "addr1", "addr2");
    foreach($_POST as $k => $v){
        if(!in_array($k,$keystomatch)) continue;
        $this->$k = $v;
    }
    foreach($keystomatch as $p) 
        if(!isset($this->$p)) $this->$p = "NULL";
  }
}
0 голосов
/ 12 декабря 2011

Это долго, но это поможет наверняка .. здесь я опишу все функции и добавлю с помощью общего файла lib.

вызов класса:

    <?php

     if(isset($_POST) && isset ($_POST["form_submit"])){
     $valArr=array("first name"=>$_POST['first_name '],"2nd paremeter"=>$_POST['2nd value']..and more);
     $per_obj = new Performance();
    $per_obj->addPreformance($valArr, "employee_performance");

   }
  ?>

страница класса производительности сотрудника:

   <?php 

   class Performance extends DataAccess{

       var $db_obj = null;
     public function  __construct() {
         $this->db_obj = new DataAccess();
    }

   public function  addPreformance($key_values = array(), $table = null) {
    $this->db_obj->table_name = $table;
    $this->db_obj->addRecord($key_values);
  $msg=$this->db_obj->msg;
header("Location: performance.php?msg=$msg");
}
   }

?>

общая функция:

     function addRecord($key_values)
    {

        $cols="";
        $vals="";
        foreach($key_values as $key=>$value)
        {
            if ($key!="submit" and $key!="PHPSESSID" and $key!="image_name" and $key!="submit_button" and $key!="ext" and $key!="ext2" and $key!="img_name" and $key!="mode" and $value!="" and $key!="gpl" and $key!="ip1" and $key!="ip2" and $key!="ip3" and $key!="ip4"){
                $cols .= "`".$key."`,";
                is_string($value)? $vals .= "'".addslashes($value)."'," : $vals .= "'".$value."',";

            }
        }


        $cols = substr($cols, 0, -1);
        $vals = substr($vals, 0, -1);

        $insert_qry="insert into ". $this->table_name ."(". $cols .") values(". $vals   .")";

        $r=mysql_query($insert_qry);
        $this->msg = (!$r) ? f_add_msg : s_add_msg;
        return $r;
    }
0 голосов
/ 12 декабря 2011

Прежде всего, это синтаксическая ошибка (думаю, вы знаете)

function setter(first parameter, second parameter)

также, это должно выдавать предупреждение и приводить к поведению, отличному от того, что вы хотите

isset($_POST[second_parameter]

вы используете неопределенную константу, которая после того, как предупреждение оценивается как строка "second_parameter", вы должны использовать также переменную

, здесь вы используете строку, а не переменную:

return $_POST['second_parameter']; 

Другая проблема заключается в том, что вы возвращаете значения и не устанавливаете их в качестве членов в своем классе

 if ( isset($_POST[second_parameter]))
                return $_POST['second_parameter'];  
                else
                return "NULL";

, поэтому, возможно, что-то вроде

function setter($first_parameter, $second_parameter)
{
        //checks the post variable has been set
        if ( isset($_POST[$second_parameter]))
        {
            $this->$first_parameter = $_POST[$second_parameter];  
        }
        else
        {
            $this->$first_parameter = NULL;
        }
}

может бытьближе к тому, что вам нужно

...