PHP对象和类
在本教程中,我们将学习基本的面向对象编程(OOP)。介绍PHP OOP中最重要的概念:对象和类。
在面向对象编程中,我们使用对象对问题和流程建模。因此,面向对象的应用程序由相互协作以解决问题的相关对象组成。
面向对象编程的基本构件是类和对象。在深入研究面向对象编程方法之前,理解对象和类以及对象和类之间的区别是非常重要的。
PHP对象 VS 类
在现实世界中,一个物体有它自己的特征和行为。我们可以将具有相同特征和行为的相似对象分组到一个类中。所以我们可以说类是对象的蓝图。
例如,一个类是一个房子的蓝图。蓝图在纸上定义了房子的特征。
根据蓝图,我们可以建造很多我们想要的房子。
我们说对象是类的实例,或者房子是蓝图的实例。

定义类和对象
在创建任何新对象之前,您需要一个类或对象的蓝图。
在PHP中定义一个新类非常简单。要在PHP中定义一个新类,可以使用class关键字。如下面的示例所示:
<?php
class BankAccount{
}
我们定义了一个新的空类BankAccount。在BankAccount类中,我们可以使用new关键字创建新的BankAccount对象,如下所示:
<?php
class BankAccount{
}
// 创建一个新的银行帐户对象
$account = new BankAccount();
var_dump($account);
对象属性
在面向对象的术语中,对象的特征称为属性。例如,银行账户有账号和总余额。
让我们将这些属性添加到BankAccount类中:
<?php
class BankAccount{
private $accountNumber;
private $totalBalance;
}
可以看到,我们在属性前面使用了private关键字。
这称为属性可见性。每个属性可以有三种可见性级别,即私有的private、受保护的protected和公共的public。
- private:类的私有属性只能由类内部的方法访问。
- protected:受保护的属性类似于私有属性,只是受保护的属性可以被子类访问。
- public:公共属性不仅可以通过类内部的方法访问,还可以通过类外部的代码访问。
在BankAccount类中,我们只能在类中访问银行帐户的那些属性。
方法
对象或类的行为称为方法。
与类属性类似,这些方法可以具有三个不同的可见性级别:private、protected和public。
有了银行账户,我们可以存钱,取款,查询余额。另外,我们需要设置银行账号和获取银行账号的方法。
银行账号是用来区分一个银行账户和另一个银行账户的。
要为类创建方法,请使用function关键字,后面跟着类名和括号。
方法类似于函数,只是方法是与类相关联的,并且具有可见性级别。
与函数一样,方法可以有一个或多个参数并可以返回一个值。
让我们添加一些方法到BankAccount类中:
<?php
class BankAccount{
/**
* 银行账户号码
* @var string bank account number
*/
private $accountNumber;
/**
* 总余额
* @var float total balance
*/
private $totalBalance;
/**
* 把钱存入银行账户
* @param float $amount amount to deposit
*/
public function deposit($amount){
$this->totalBalance += $amount;
}
/**
* 从银行账户里取钱
* @param double $amount
*/
public function withdraw($amount){
if($amount > $this->totalBalance)
die('余额不足');
$this->totalBalance -= $amount;
}
/**
* 返回总余额值
* @return float total balance
*/
public function getBalance(){
return $this->totalBalance;
}
/**
* 返回银行账号
*/
public function getAccountNumber(){
return $this->accountNumber;
}
/**
* 设置银行账号
* @param string $accountNumber
*/
public function setAccountNumber($accountNumber){
$this->accountNumber = $accountNumber;
}
}
注意,我们使用了一个特殊的$this变量来访问对象的属性。PHP使用$this变量来引用当前对象。
要访问属性,需要使用箭头操作符(->), 如下所示:
object->property
调用方法
要调用对象的方法,可以使用(->)操作符,后跟着方法名和括号。
// 创建一个新的银行帐户对象
$account = new BankAccount();
$account->setAccountNumber('1234578');
echo sprintf("银行账号 # %s<br/>",$account->getAccountNumber());
echo sprintf("把2000元存入银行账户。<br/>");
$account->deposit(2000);
echo sprintf("余额: %0.2f<br/>", $account->getBalance());
echo sprintf("从银行账户中支取100元。<br/>");
$account->withdraw(100);
echo sprintf("余额: %0.2f<br/>", $account->getBalance());
echo sprintf("从银行账户中支取2000元。<br/>");
$account->withdraw(2000);

