php中 类是什么,PHP中的类是什么?

我在从书中了解PHP类时遇到了严重的问题。 他们似乎很难。 它们的目的是什么?它们如何工作?

简而言之,类是对象的蓝图。对象封装了应用程序中某些内容在概念上相关的状态和责任,并且通常提供与之交互的编程接口。这促进了代码重用并提高了可维护性。

想象一个锁:

namespace MyExample;

class Lock

{

private $isLocked = false;

public function unlock()

{

$this->isLocked = false;

echo 'You unlocked the Lock';

}

public function lock()

{

$this->isLocked = true;

echo 'You locked the Lock';

}

public function isLocked()

{

return $this->isLocked;

}

}

立即忽略namespace,private和public声明。

Lock类是应用程序中所有Lock的蓝图。锁可以被锁定或解锁,由属性$isLocked表示。由于只能具有这两种状态,因此我使用布尔值(true或false)来指示适用于哪种状态。我可以通过它的方法lock和unlock与Lock进行交互,这将相应地更改状态。 isLocked方法将为我提供Lock的当前状态。现在,当您根据此蓝图创建对象(通常也称为实例)时,它将封装唯一状态,例如

$aLock = new Lock; // Create object from the class blueprint

$aLock->unlock();  // You unlocked the Lock

$aLock->lock();    // You locked the Lock

让我们创建另一个锁,同时封装它自己的状态

$anotherLock = new Lock;

$anotherLock->unlock(); // You unlocked the Lock

但是由于每个对象/实例都封装了自己的状态,因此第一个锁保持锁定状态

var_dump( $aLock->isLocked() );       // gives Boolean true

var_dump( $anotherLock->isLocked() ); // gives Boolean false

现在,在Lock类中包含了保持Lock处于锁定状态或解锁状态的全部责任。您不必每次都想锁定某个东西时就重新构建它,并且如果您想更改Lock的工作方式,则可以在Lock的蓝图中更改它,而不是更改所有具有Lock的类,例如一扇门:

class Door

{

private $lock;

private $connectsTo;

public function __construct(Lock $lock)

{

$this->lock = $lock;

$this->connectsTo = 'bedroom';

}

public function open()

{

if($this->lock->isLocked()) {

echo 'Cannot open Door. It is locked.';

} else {

echo 'You opened the Door connecting to: ', $this->connectsTo;

}

}

}

现在,当您创建"门"对象时,可以为其分配"锁定"对象。由于"锁定"对象负责处理某些事情,无论是锁定还是未锁定,因此"门"不必在意。实际上,任何可以使用锁的物体都不必在意,例如胸部

class Chest

{

private $lock;

private $loot;

public function __construct(Lock $lock)

{

$this->lock = $lock;

$this->loot = 'Tons of Pieces of Eight';

}

public function getLoot()

{

if($this->lock->isLocked()) {

echo 'Cannot get Loot. The chest is locked.';

} else {

echo 'You looted the chest and got:', $this->loot;

}

}

}

如您所见,胸部的责任与门的责任不同。箱子里有战利品,一扇门隔开房间。您可以将锁定状态或解锁状态编码到两个类中,但是有了单独的Lock类,则不必而且可以重用Lock。

$doorLock = new Lock;

$myDoor = new Door($doorLock);

$chestLock = new Lock;

$myChest new Chest($chestLock);

胸部和门现在具有其独特的锁。如果该锁是可以同时存在于多个位置的魔术锁(例如在量子物理学中),则可以将相同的锁分配给胸部和门,例如:

$quantumLock = new Lock;

$myDoor = new Door($quantumLock);

$myChest new Chest($quantumLock);

当您unlock() $quantumLock时,门和柜子都将被解锁。

尽管我承认量子锁是一个不好的例子,但它说明了共享对象的概念,而不是在各处重建状态和责任。一个真实的示例可能是您使用数据库传递给类的数据库对象。

请注意,上面的示例没有显示如何使用lock()和unlock()方法进入胸锁或门锁。我将其留作练习,以供您锻炼(或添加其他人)。

还要检查何时在$ this上使用self?有关类和对象以及如何使用它们的更深入的说明

有关其他资源,请检查

http://zh.wikipedia.org/wiki/面向对象的编程

http://www.php.net/manual/zh/language.oop5.php

http://www.tuxradar.com/practicalphp

http://www.phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html

http://articles.sitepoint.com/article/面向对象-php

我知道您要的是资源,而不是解释,但这是我对类的基本实现的理解:

想象一下将类作为建筑模板。 建筑的基本草图。 当您实际构建它时,您需要进行一些更改,使其看起来像客户想要的(类的属性)。 现在,您必须设计建筑物内部事物的行为方式(方法)。 我将在一个简单的示例上展示它。

建筑等级:

/**

* Constructs a building.

*/

class Building

{

private $name;

private $height;

public function __construct( $name, $height )

{

$this->name = $name;

$this->height = $height;

}

/**

* Returns name of building.

*

* @return string

*/

public function getName( )

{

return $this->name;

}

public function elevatorUp( )

{

// Implementation

}

public function elevatorDown( )

{

// Implementation

}

public function lockDoor( )

{

// Implementation

}

}

叫课:

// Empire State Building

$empireStateBuilding = new Building("Empire State Building", 381 );

echo $empireStateBuilding->getName( );

$empireStateBuilding->lockDoor( );

// Burj Khalifa

$burjKhalifa = new Building("Burj Khalifa", 828 );

echo $burjKhalifa->getName( );

$burjKhalifa->lockDoor( );

只需复制它,在本地主机上运行它,然后尝试进行一些更改。 如有任何疑问,请问我。 如果您觉得这没用,请使用以前的海报链接,这些教程都非常可靠。

如果可以的话,请换一个角度看(基于个人经验)。您必须先感觉到" OOP的需要",然后才能真正了解所有内容-恕我直言,学习资源应紧随其后。

当编写相对较大的以程序方式编写的软件时(与面向对象相反,如果有人不同意该术语,对不起),人们基本上会"陷入困境"。届时,他/她可以尝试将代码重组为对象以更好地组织代码,并且自然可以详细了解OOP。同样,这是我的亲身经历,它使我比任何本书都更快地了解。

只是我的两分钱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值