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