PHP对象和类

时间:2018-11-15 15:12:08  来源:igfitidea点击:

在本教程中,我们将学习基本的面向对象编程(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);