【问题标题】:Undefined variable: user_created_date in php when using __get Method未定义变量:使用 __get 方法时 php 中的 user_created_date
【发布时间】:2017-07-21 21:00:41
【问题描述】:

我尝试从另一个类创建对象并从第二个类访问它。对象已创建,当我使用第一个类打印对象时,它将打印。但是当我使用第二类并调用getter方法并尝试打印时,它会报错。

当我尝试在第二个类中创建第一个类的对象并尝试调用getter方法时,它会给出未定义变量$any_varible的错误。

头等舱:

<?php 
    namespace pages;
    class User { 
    private static $first_name; 
    private static $last_name;
    private static $nic;
    private static $email;
    private static $password;
    private static $tel;
    private static $address;
    private static $city;
    private static $postal_code;
    private static $dob;
    private static $food;
    private static $pet;
    private static $smoke;
    private static $chat;
    private static $music;
    private static $gender;
    private static $user_created_date;




    public function __construct($first_name,$last_name,$nic,$email,$password,$tel,$address,$city,$postal_code,$dob,$food,$pet,$smoke,$chat,$music,$gender,$user_created_date) {
        $this->$first_name=$first_name;
        $this->$last_name=$last_name;
        $this->$nic=$nic;
        $this->$email=$email;
        $this->$password=$password;
        $this->$tel=$tel;
        $this->$address=$address;
        $this->$city=$city;
        $this->$postal_code=$postal_code;
        $this->$dob=$dob;
        $this->$food=$food;
        $this->$pet=$pet;
        $this->$smoke=$smoke;
        $this->$chat=$chat;
        $this->$music=$music;
        $this->$gender=$gender;
        $this->$user_created_date=$user_created_date;


    } 
    public function __get($property) {
        if (property_exists($this, $property)) {
          return $this->$property;
        }
      }

     public function __set($property, $value) {
        if (property_exists($this, $property)) {
          $this->$property = $value;
        }

     }


} ?>


<?php
    namespace pages;
    include '../Model/User.php';
    include 'Database.php';
    {

        $cars = array(0,0,0,0,0);
        $availableChoice=$_POST['choice'];
        $today=date('Y/m/d');
        $count=0;
        foreach ($availableChoice as $name){
            $cars[$count]=1;
            $count++;
        }

        $usernew=new User($_POST['fName'],$_POST['lName'],$_POST['nic'],$_POST['email'],$_POST['password'],$_POST['mobile'],$_POST['address'],$_POST['city'],$_POST['postalCode'],$_POST['dob'],$cars[0],$cars[1],$cars[2],$cars[3],$cars[4],$_POST['gender'],$today);
        //echo $_POST['email'];
        //echo $user->$email;
        echo $usernew->__get($user_created_date);
        /*$newDatabase=new Database();
        $connection=$newDatabase->CreateConnection();
        $newDatabase->InsertUser($user,$connection);*/


    }


?>

【问题讨论】:

    标签: javascript php html database


    【解决方案1】:

    尝试像这样更新你的 getter 和 setter:

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    
    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null;
    }
    

    http://php.net/manual/en/language.oop5.overloading.php#object.get

    实际上试试这个..

    class User { 
    
        private $data = array();
    
        public function __construct($data) {
            $this->data = $data;
        }
    
        public function __set($name, $value) {
            $this->data[$name] = $value;
        }
    
        public function __get($name) {
            if (array_key_exists($name, $this->data)) {
                return $this->data[$name];
            }
            return null;
        }
    
    }
    
    $u = new User($_POST);
    echo $u->fName;
    

    您必须确保将要传递给 User 类的所有数据添加到 $data 数组中。

    您的 User 类可能应该传递一个 $id 而不是实际数据。使用 $id 来提取数据。更像这样:

    class User { 
    
        private $data = array();
    
        public function __construct($id = null) {
            if (!is_null($id) && $id > 0) {
                $this->id = $id;
                $this->data = array(); # query user data..
            } else {
                $this->id = 0;
            }
        }
    
        public function __set($name, $value) {
            $this->data[$name] = $value;
        }
    
        public function __get($name) {
            if (array_key_exists($name, $this->data)) {
                return $this->data[$name];
            }
            return null;
        }
    
        public function save() {
            if ($this->id > 0) {
                # UPDATE user data..
            } else {
                # INSERT user data..
            }
        }
    
    }
    
    # add new user (no ID provided)..
    $u = new User();
    $u->fName = $_POST['fName'];
    $u->lName = $_POST['lName'];
    $u->save();
    
    # get/update user data (ID provided)..
    $u = new User(1);
    echo $u->fName; # get
    $u->fName = 'NewName'; # update
    $u->save();
    

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 2012-02-28
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      相关资源
      最近更新 更多