我正在研究登录功能,但遇到了一个我无法弄清楚的错误。
这是我的模型登录类:
class Login {
private $username;
private $password;
private $cxn; //database object
function __construct($username,$password)
{
//set data
$this->setData($username, $password);
//connect DB
$this->connectToDB();
// get Data
}
function setData($username, $password)
{
$this->username = $username;
$this->password = $password;
}
private function connectToDB()
{
include 'Database.php';
$connect = '../include/connect.php';
$this->cxn = new database($connect);
}
function getData()
{
$query = "SELECT * FROM anvandare WHERE anvandarnamn = '$this->username' AND losenord ='$this->'password'";
$sql = mysql_query($query);
if(mysql_num_rows($sql)>0)
{
return true;
}
else
{
throw new Exception("Användarnamnet eller Lösenordet är fel. Försök igen.");
}
}
function close()
{
$this->cxn->close(); //Here is the error it says "Method 'close' not found in class
}
}
最后一个函数给出错误"在类中找不到方法'关闭'","在主题类中找不到引用的方法。
这是我的数据库类:
class Database {
private $host;
private $user;
private $password;
private $database;
function __construct($filename)
{
if(is_file($filename)) include $filename;
else throw new exception("Error!");
$this->host=$host;
$this->user=$user;
$this->password=$password;
$this->database=$database;
$this->connect();
}
private function connect()
{
//Connect to the server
if(!mysql_connect($this->host, $this->user, $this->password))
throw new exception("Error, not connected to the server.");
//Select the database
if(!mysql_select_db($this->database))
throw new exception("Error, no database selected");
}
function close()
{
mysql_close();
}
}
路径是正确的,所以不是它。可能是什么错误?
> PhpStorm 无法确定您的$this->cxn
字段是什么类型。您可以通过简单的 PHPDoc 注释提供类型提示来提供帮助:
/** @var Database */
private $cxn; //database object
这个提示也帮助PHPstorm正确识别方法
如果您有这样的代码:
foreach( $myEntity as $entity ) {
$entity->myValidMethod();
}
只需添加此提示:
/* @var $entity 'My'Name'Space'Path'MyEntity */
foreach( $myEntity as $entity ) {
$entity->myValidMethod();
}
感谢 http://mossco.co.uk/symfony-2/how-to-fix-method-not-found-in-class-orange-warning-in-phpstorm/
我认为
代码中不存在可见性问题。PHP 手册指出:
Class methods may be defined as public, private, or protected. Methods declared without any explicit visibility keyword are defined as public.
我想你可能有两个数据库类。 本主题中描述了类似的问题:从扩展类调用函数的最佳方法
你可以尝试function __destruct() {}
引用而不是close()函数
问题在于缺少公共/受保护/私有
恕我直言,您只需在数据库类中的方法声明中添加"public"关键字
public function close()