我从一本书中了解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 和 方法
lock
与Lock进行交互unlock
,这将相应地更改状态。该isLocked
方法将给我锁的当前状态。现在,当您从该蓝图创建对象(通常也称为
instance )时,它将封装唯一状态,例如
$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 的类,例如Door:
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()
方法进入“胸锁”或“门锁” 。我将其留作练习,以供您锻炼(或添加其他人)。
问题内容: 什么是PHP中的抽象类? 如何使用? 问题答案: 抽象类是至少包含一个抽象方法的类,该方法中没有任何实际代码,只是名称和参数,并且已标记为“抽象”。 这样做的目的是提供一种模板,以从其继承并强制继承类实现抽象方法。 因此,抽象类介于常规类和纯接口之间。接口也是抽象类的特殊情况,其中所有方法都是抽象的。 有关更多参考,请参见PHP手册的这一部分。
问题内容: 该符号在PHP中是什么意思? 问题答案: PHP提供了一些控制结构的替代语法。即,是否,for,foreach和switch。在每种情况下,替代语法的基本形式都是将左大括号更改为冒号(:),将右大括号更改为endif;,endwhile;,endfor;,endforeach;或endswitch;。
问题内容: 请定义什么。 问题答案: 是PHP的通用空类,有点像Java或Python( 编辑: 但实际上并未用作通用基类;感谢 @Ciaran 指出这一点)。 对于匿名对象,动态属性等很有用。 考虑StdClass的一种简单方法是替代关联数组。请参见下面的示例,该示例显示如何允许获取StdClass实例或关联数组。同样(但未在此示例中显示)返回StdClass实例。
问题内容: 在PHP中,我在许多PHP项目中都看到了cURL一词。它是什么?它是如何工作的? 参考链接:cURL 问题答案: cURL是一个库,可让您使用PHP发出HTTP请求。您需要了解的所有内容(以及大多数其他扩展)都可以在PHP手册中找到。 为了使用PHP的cURL函数,您需要安装»libcurl软件包。PHP要求您使用libcurl 7.0.2-beta或更高版本。在PHP 4.2.3中,
本文向大家介绍PHP中的.htaccess是什么?,包括了PHP中的.htaccess是什么?的使用技巧和注意事项,需要的朋友参考一下 .htaccess是用于在Web apache服务器软件上运行的Web服务器上使用的配置文件。如果将.htaccess文件放在通过Apache Web服务器依次加载的目录中,则.htaccess文件将由Apache服务器软件检测并执行。 .htaccess文件可
问题内容: 所有外部URL都类似于“模块/操作?key1 = param1”。无法进行自定义- 但速度很快。区别在于,第一个使用PHP的GET,第二个使用PATH_INFO。 我已经看过好几次了,但仍然不知道它到底是什么。它有什么作用? 问题答案: 实际上,它与服务PHP页面的Apache Web服务器有关,而与PHP本身无关。 是在启用指令后由Apache设置的环境变量。它将包含尾随路径名信息,