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

如何在php中定义类的属性?,php,database,class,function,Php,Database,Class,Function,我收到了不同的回应,这取决于我阅读的内容 我定义了一个包含2个函数的类 我希望这两个函数都可以访问DB凭据 目前,除非我将变量复制并粘贴到每个函数中,否则此代码不起作用 我做错了什么 <?php class database { function connect() { var $username="my_username"; var $servername="localhost"; var $database="my_DB"; var $password="An_Awesome_Pa

我收到了不同的回应,这取决于我阅读的内容

我定义了一个包含2个函数的类

我希望这两个函数都可以访问DB凭据

目前,除非我将变量复制并粘贴到每个函数中,否则此代码不起作用

我做错了什么

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

要访问对象属性,您需要使用$this->property\u 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);
    }
}
?>

此块:

var $username="my_username";
var $servername="localhost";
var $database="my_DB";
var $password="An_Awesome_Password";
var $con;
应该在
函数()之前,而不是在函数内部;但是仍然在
类的定义中

添加显式可见性是一种很好的形式;首先是私人的:

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


更理想的情况是,除了了解代码样式之外,还需要在类方法之外定义变量,但仍然在类内部定义变量。比如:

class database {
    var $username = "my_username";
    // etc.

    function connect() {
        // connect code
        // $this->username == "my_username"
    }
}

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

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

将类属性和方法分配给它们的作用域是一种很好的做法,它可以是“public”、“protected”或“private”,而不是使用“var”。此外,类属性在类内部但在任何函数外部分配(也称为“方法”)。下面是重构后的类:

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

变量只能在创建它们的范围内调用

如果在函数中创建变量,则该变量只能在该函数中使用,但在阶梯上定义的变量越高,可用于的变量就越多

全球的 公开的 私有的
功能

理想情况下,那些
var
s应替换为
private
。。。这不再是PHP4了。考虑到值是硬编码的(因此每个实例都有相同的值),可能也是静态的。@Dan大注释不起作用,但是,如果您有其他与主题相关的问题,您可以更新您的问题。@Jack那么,如果我构建该构造-所有函数都会收到这些变量吗?@dan yes,它们将能够访问它们。因此,我需要在每个函数中再次引用该变量?首先我在类根中列出var$username,然后我必须在任何时候都有$this->username,我不能调用它吗?是的,大致就是这样。您在类范围中定义变量,因此使用
$this->username
访问它
var
被标记为弃用已有一段时间,定义这些变量的“正确”方法实际上是执行
public$username
,这相当于
var$username