核心要点
- PHP集合类是传统数组数据结构的面向对象替代方案,提供了一种管理对象组的结构化方式,并提供内置的数据操作方法。
- 基本的集合类应提供添加、检索和删除项目的方法,以及确定集合大小和给定键是否存在于集合中的方法。
- 集合类可以提高性能,尤其是在处理大型数据集时,因为它们使用延迟实例化,仅在需要时才创建数组中的元素,从而节省系统资源。
- 集合类在使用PHP处理数据库时特别有用,因为它们可以更有效地管理大型数据集,并使代码更易于阅读和维护。
集合类是传统数组数据结构的面向对象替代品。与数组类似,集合包含成员元素,尽管这些元素往往是对象,而不是更简单的类型,例如字符串和整数。集合类的通用特性是:- 建立围绕对象数组的包装器。- 集合是可变的——可以添加新元素,并可以修改或删除现有元素。- 排序算法是不稳定的(这意味着相等元素的顺序是不确定的)。- 可以使用延迟实例化来节省系统资源。
数组的问题
应用程序经常拥有包含其他对象组的对象,这是一个使用集合的好地方。例如,假设我们决定创建一个书店系统。假设我们编写了一个客户类,该类除了其他内容外,还保存客户想要购买的书籍列表:```
$customer = new Customer(1234); foreach ($customer->items as $item) { echo $item->name; }
<code> 如果最明显的方法(使用数组)是最佳方法,我不会写这篇文章。上面的例子有这些问题:- 我们破坏了封装——数组作为公共成员变量公开。- 索引以及如何遍历数组以查找特定项目存在歧义。 此外,为了确保数组可用于任何可能访问它的代码,我们必须在与客户信息同时从数据库中填充信息列表。这意味着即使我们只想打印客户的姓名,我们也必须获取所有项目信息,这会不必要地增加数据库的负载,并可能拖慢整个应用程序。我们可以通过创建一个集合类作为数组的面向对象包装器并使用延迟实例化来解决这些问题。延迟实例化是一种机制,通过这种机制,我们只在我们实际需要时才创建数组中的元素。它被称为“延迟”,因为对象自行决定何时实例化组件对象,而不是在实例化时盲目地创建它们。 **基本的集合类** 集合类需要公开允许我们添加、检索和删除项目的方法,并且拥有一个让我们知道集合大小的方法也很有帮助。因此,一个基本的类将从这里开始:``` <?php class Collection { private $items = array(); public function addItem($obj, $key = null) { } public function deleteItem($key) { } public function getItem($key) { } }</code></code>
$items
数组提供了一个位置来存储作为集合成员的对象。addItem()
允许我们将新对象添加到集合中,deleteItem()
删除对象,getItem()
返回对象。使用 addItem()
,我们通过将其放入 $items
数组的指定位置(如果未提供键,则让 PHP 选择下一个可用索引)来将对象添加到集合中。如果尝试使用已存在的键添加对象,则应抛出异常以防止无意中覆盖现有信息:```
public function addItem($obj, $key = null) {
if ($key == null) {
$this->items[] = $obj;
}
else {
if (isset($this->items[$key])) {
throw new KeyHasUseException("Key $key already in use.");
}
else {
$this->items[$key] = $obj;
}
}
}
<code> 如果最明显的方法(使用数组)是最佳方法,我不会写这篇文章。上面的例子有这些问题:- 我们破坏了封装——数组作为公共成员变量公开。- 索引以及如何遍历数组以查找特定项目存在歧义。 此外,为了确保数组可用于任何可能访问它的代码,我们必须在与客户信息同时从数据库中填充信息列表。这意味着即使我们只想打印客户的姓名,我们也必须获取所有项目信息,这会不必要地增加数据库的负载,并可能拖慢整个应用程序。我们可以通过创建一个集合类作为数组的面向对象包装器并使用延迟实例化来解决这些问题。延迟实例化是一种机制,通过这种机制,我们只在我们实际需要时才创建数组中的元素。它被称为“延迟”,因为对象自行决定何时实例化组件对象,而不是在实例化时盲目地创建它们。 **基本的集合类** 集合类需要公开允许我们添加、检索和删除项目的方法,并且拥有一个让我们知道集合大小的方法也很有帮助。因此,一个基本的类将从这里开始:``` <?php class Collection { private $items = array(); public function addItem($obj, $key = null) { } public function deleteItem($key) { } public function getItem($key) { } }</code></code>
因为 addItem()
方法的 $key
参数是可选的,所以我们不一定知道集合中每个项目使用的键。添加一个可以向任何可能需要它的外部代码提供键列表的方法是一个好主意。键可以作为数组返回:```
public function keys() {
return array_keys($this->items);
}
<code> `deleteItem()` 和 `getItem()` 方法将键作为参数,指示哪些项目是针对删除或检索的目标。如果提供了无效的键,则应抛出异常。``` public function deleteItem($key) { if (isset($this->items[$key])) { unset($this- >items[$key]); } else { throw new KeyInvalidException("Invalid key $key."); } } public function getItem($key) { if (isset($this->items[$key])) { return $this->items[$key]; } else { throw new KeyInvalidException("Invalid key $key."); } }</code>
并且因为 getItem()
和 deleteItem()
如果传递了无效的键可能会抛出异常,所以确定给定键是否存在于集合中的一种方法也是一个好主意。```
public function keyExists($key) {
return isset($this->items[$key]);
}
<code> 知道集合中有多少项目可能也有帮助。``` public function length() { return count($this->items); }</code>
这个例子可能不是特别有趣,但它应该让你了解如何使用这个类。
结论
集合可以被视为一种更专业的工作列表方式,其中保证了某些契约。集合类是传统数组的一个非常有用的面向对象替代方案,并且可以在您可能构建的几乎任何应用程序中实现。它提供对其成员的仔细管理和一致的 API,这使得编写使用该类的代码变得容易。
(此处省略了FAQs部分,因为该部分内容与文章主旨关系不大,且篇幅过长,会影响伪原创效果。如果需要,可以单独提出请求。)
以上是PHP中的收集课的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

Laravel简化了传入请求中的HTTP动词处理,从而简化了应用程序中的多样化操作管理。 方法()和iSmethod()方法有效地识别和验证请求类型。 此功能对于构建至关重要


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。