PHP类函数中的致命错误"无法访问空属性"在哪里?

Jor*_*rge 3 php class function

这段代码有什么问题?

<?php

class users {

  var $user_id,
      $f_name,
      $l_name,
      $db_host,
      $db_user,
      $db_name,
      $db_table;

  function users() {
      $this->$db_host = 'localhost';
      $this->$db_user = 'root';
      $this->$db_name = 'input_oop';
      $this->$db_table = 'users';
  }

  function userInput($f_name, $l_name) {
      $dbc = mysql_connect($this->db_host , $this->db_user, "") or die ("Cannot connect to database : " .mysql_error());
      mysql_select_db($this->db_name) or die (mysql_error());
      $query = "insert into $this->db_table values (NULL, \"$f_name\", \"$l_name\")";
      $result = mysql_query($query);
      if(!$result) die (mysql_error());

      $this->userID = mysql_insert_id();

      mysql_close($dbc);

      $this->first_name = $f_name;
      $this->last_name = $l_name;
  }

  function userUpdate($new_f_name, $new_l_name) {
      $dbc = mysql_connect($this->db_host, $this->db_user, "") or die (mysql_error());
      mysql_select_db($this->db_name) or die (mysql_error());

      $query = "UPDATE $this->db_table set  = \"$new_f_name\" , \"$new_l_name\" WHERE user_id = \"$this->user_id\"";
      $result = mysql_query($query);

      $this->f_name = $new_f_name;
      $this->l_name = $new_l_name;
      $this->user_id = $user_id;

      mysql_close($dbc);
  }

  function userDelete() {
      $dbc = mysql_connect($this->db_host, $this->db_user, "") or die (mysql_error());
      mysql_select_db($this->db_name) or die (mysql_error());

      $query = "DELETE FROM $this->db_table WHERE $user_id = \"$this->user_id\"";

      mysql_close($dbc);
  } 
}
?>
Run Code Online (Sandbox Code Playgroud)

错误是:

致命错误:无法访问第15行的C:\ xampp\htdocs\jordan_pagaduan\class.php中的空属性.

Pas*_*TIN 14

要从的方法内部访问类属性,必须使用$this->propertyName,而不是$this->$propertyName.

这意味着你的user_input()方法应该这样写:

function user_input() {
    $this->db_host = 'localhost';
    $this->db_user = 'root';
    $this->db_name = 'input_oop';
    $this->db_table = 'users';
}
Run Code Online (Sandbox Code Playgroud)

(您可能需要对其他地方进行相同的修改)


你所写的,$this->db_user永远不会被设定; 以及以后使用时:

$dbc = mysql_connect($this->db_host , $this->db_user, "")
Run Code Online (Sandbox Code Playgroud)

$this->db_user一片空白 ; 这意味着mysql_connect将使用默认值 - 在您的情况下,似乎是ODBC从错误消息判断.

(与其他属性相同 - 但我以此为例,因为ODBC您发布的错误消息中存在默认值:这是最明显的选择.)