我收到了混合回复,取决于我阅读的内容,
我已经定义了一个包含2个函数的类。
我希望这两个函数都能访问数据库凭据
目前,除非我将变量复制并粘贴到每个函数中,否则此代码不起作用。
我在这里做错了什么?
<?php
class database {
function connect() {
var $username="my_username";
var $servername="localhost";
var $database="my_DB";
var $password="An_Awesome_Password";
var $con;
$con = mysql_connect($servername,$username,$password);
if (!$con) {
die('Could not connect: ' . mysql_error());
}
}
function disconnect() {
$con = mysql_connect($servername,$username,$password);
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_close($con);
}
}
?>
答案 0 :(得分:10)
这个区块:
var $username="my_username";
var $servername="localhost";
var $database="my_DB";
var $password="An_Awesome_Password";
var $con;
应该在function()
之前,而不是在class
之内;但仍在class database {
private $username="my_username";
private $servername="localhost";
// etc. etc.
定义内。
添加明确的可见性是一种很好的形式;私人开始:
$this->username;
$this->con;
etc.
然后,函数将它们称为:
private $servername;
private $database;
private $username;
private $password;
private $con;
function __construct($host, $user, $password, $dbname)
{
$this->servername = $host;
$this->username = $user;
$this->password = $password;
$this->database = $dbname;
}
理想情况下,您希望将这些凭据传递给构造函数:
{{1}}
更理想的是,了解PDO
答案 1 :(得分:3)
要访问对象属性,您需要使用$ this-&gt; property_name
$this->con = mysql_connect($this->servername,$this->username,$this->password);
类代码将如下所示:
<?php
class database {
var $username="my_username";
var $servername="localhost";
var $database="my_DB";
var $password="An_Awesome_Password";
var $con;
function connect() {
$this->con = mysql_connect($this->servername,$this->username,$this->password);
if (!$this->con) {
die('Could not connect: ' . mysql_error());
}
}
function disconnect() {
$this->con = mysql_connect($this->servername,$this->username,$this->password);
if (!$this->con) {
die('Could not connect: ' . mysql_error());
}
mysql_close($this->con);
}
}
?>
答案 2 :(得分:3)
除了代码样式之外,您需要在类之外定义变量类方法,但仍然在类中。类似的东西:
class database {
var $username = "my_username";
// etc.
function connect() {
// connect code
// $this->username == "my_username"
}
}
答案 3 :(得分:2)
您必须使用函数外部的变量并使用construct和destruct函数,它们将确保您正确地打开和关闭连接
class database {
private $username = 'username';
private $servername = "localhost";
private $database = "my_DB";
private $password = "An_Awesome_Password";
private $conId;
public function __construct(){
$con = mysql_connect($this->servername, $this->username, $this->password);
$this->conId = $con;
//..........
}
public function __destruct(){
mysql_close($this->conId);
}
}
答案 4 :(得分:1)
最好为类属性和方法分配其范围,可以是“公共”,“受保护”或“私有”,而不是使用“var”。此外,类属性在类中指定,但在任何函数之外(a.k.a。“method”)。这是你的课程重构:
class database {
private $username="my_username";
private $servername="localhost";
private $database="my_DB";
private $password="An_Awesome_Password";
private $con;
public function connect() {
if (!$this->con) {
$this->con = mysql_connect(
$this->servername, $this->username, $this->password);
if (!$this->con) {
die('Could not connect: ' . mysql_error());
}
}
}
public function disconnect() {
if ($this->con) {
mysql_close($this->con);
}
}
}
答案 5 :(得分:0)
变量仅可在其创建的范围内调用。
如果在函数中创建变量,它只能在该函数中使用,但在梯形图中定义的越高,它可用的越多。
全局 上市 私人的 功能