где фатальная ошибка «Не удается получить доступ к пустому свойству» в функции класса PHP? - PullRequest
3 голосов
/ 26 апреля 2010

Что не так с этим кодом?

<?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);
  } 
}
?>

Ошибка:

Неустранимая ошибка: невозможно получить доступ к пустому свойству в C: \ xampp \ htdocs \ jordan_pagaduan \ class.php в строке 15.

1 Ответ

14 голосов
/ 26 апреля 2010

Чтобы получить доступ к свойству класса из метода класса, вы должны использовать $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';
}

(возможно, вам придется сделать такую ​​же модификацию для других мест)


С тем, что вы написали, $this->db_user никогда не устанавливается; и позже, при использовании этого:

$dbc = mysql_connect($this->db_host , $this->db_user, "")

$this->db_user равно нулю; это означает, что mysql_connect будет использовать значение по умолчанию - которое, в вашем случае, кажется, ODBC, судя по сообщению об ошибке.

(то же самое с другими свойствами - но я взял это в качестве примера, так как значение по умолчанию ODBC присутствовало в опубликованном вами сообщении об ошибке: это был наиболее очевидный выбор.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...