2010-04-26 32 views
3

这段代码有什么问题?哪里是PHP类函数中的致命错误“无法访问空属性”?

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

的错误是:

Fatal error: Cannot access empty property in C:\xampp\htdocs\jordan_pagaduan\class.php on line 15.

+2

要使用代码格式,请将源代码缩进4个空格。不要滥用HTML。 – kennytm 2010-04-26 17:51:35

+1

哦,人道...... – 2010-04-26 19:40:54

回答

14

从一个类的方法内部访问一个class-property,你必须使用$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将使用default value - 在您的情况下,从错误消息来看,它似乎是ODBC

(与其他性质相同的事情 - 但我把这个当作一个范例,为ODBC默认值是出现在您发布的错误信息:这是最明显的选择)

相关问题