如何在php中定义类的属性?

时间:2012-06-14 13:38:29

标签: php database class function

我收到了混合回复,取决于我阅读的内容,

我已经定义了一个包含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);
                        }
            }
?>

6 个答案:

答案 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)

您必须使用函数外部的变量并使用constructdestruct函数,它们将确保您正确地打开和关闭连接

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)

变量仅可在其创建的范围内调用。

如果在函数中创建变量,它只能在该函数中使用,但在梯形图中定义的越高,它可用的越多。

全局 上市 私人的 功能