什么是PHP中的类?
我在理解一本书中的PHP类时遇到了严重的问题。他们似乎很难。它们的用途是什么?它们是如何工作的?我知道您要求的是资源,而不是解释,但以下是我对类的基本实现的理解: 将类想象为建筑的模板。一个建筑应该是什么样子的基本草图。当您要实际构建它时,您会更改一些东西,使它看起来像您的客户机想要的(类的属性)。现在,您必须设计建筑物内部的行为(方法)。我将在一个简单的例子中展示它 建筑类别:什么是PHP中的类?,php,class,Php,Class,我在理解一本书中的PHP类时遇到了严重的问题。他们似乎很难。它们的用途是什么?它们是如何工作的?我知道您要求的是资源,而不是解释,但以下是我对类的基本实现的理解: 将类想象为建筑的模板。一个建筑应该是什么样子的基本草图。当您要实际构建它时,您会更改一些东西,使它看起来像您的客户机想要的(类的属性)。现在,您必须设计建筑物内部的行为(方法)。我将在一个简单的例子中展示它 建筑类别: /** * Constructs a building. */ class Building { pri
/**
* 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( );
调用类:
/**
* 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( );
只需复制它,在本地主机上运行它,并尝试进行一些更改。如果有任何问题,就问我。如果你觉得这没什么用,只需使用之前海报的链接,这些都是非常可靠的教程。简而言之,类是对象的蓝图。对象封装了应用程序中与概念相关的状态和责任,通常提供一个编程接口,用于与这些状态和责任进行交互。这促进了代码重用并提高了可维护性
想象一下一把锁:
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;
}
}
立即忽略名称空间
、私有
和公共
声明
Lock类是应用程序中所有锁的蓝图。锁可以被锁定或解锁,由属性$isLocked
表示。因为它只能有这两种状态,所以我使用布尔值(true
或false
)来指示哪个状态适用。我可以通过锁的方法Lock
和unlock
与锁交互,这将相应地改变状态。isLocked
方法将提供锁的当前状态。现在,当您从这个蓝图创建一个对象(通常也称为实例)时,它将封装唯一的状态,例如
$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类中。您不必每次锁定某个对象时都重新构建它,如果您想更改锁的工作方式,您可以在锁的蓝图中更改它,而不是在所有具有锁的类中,例如门:
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;
}
}
}
现在,创建门对象时,可以为其指定锁对象。由于Lock对象处理某个对象是锁定还是解锁的所有责任,因此门不必关心这一点。事实上,任何可以使用锁的物体都不必在意,例如一个箱子
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;
}
}
}
正如你所看到的,胸部的敏感度不同于门的敏感度。箱子里装着战利品,门把房间隔开。您可以将锁定或解锁状态编码到这两个类中,但是使用单独的锁类,您不必也可以重用锁
$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()
方法打开箱子或门的锁。我把这作为一个练习留给你去做(或者其他人去补充)
还要检查类和对象以及如何使用它们的更深入的解释
有关其他资源,请查看
只要我的两分钱 类是对象的蓝图。有汽车的名称。我们在类中定义变量和方法。类是用大括号定义的。在大括号内可以定义变量、方法、属性和函数。函数和方法都是相同的。您可以根据需要定义方法和变量为类花括号 班车{ } foreach(获取声明的类()作为$class){
echo($class)。“
”;
}
get_declared_classes()是php中的预定义函数。它返回已声明类的名称数组