如何在php中定义类的属性?
我收到了不同的回应,这取决于我阅读的内容 我定义了一个包含2个函数的类 我希望这两个函数都可以访问DB凭据 目前,除非我将变量复制并粘贴到每个函数中,否则此代码不起作用 我做错了什么如何在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
<?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
。