PHP 的 SPL:涉及数组的接口是否涵盖了所有数组属性?

发布于 2024-07-07 01:35:00 字数 144 浏览 8 评论 0原文

通过实现所有必要的 SPL 接口,是否可以编写一个与实际 PHP 数组几乎没有区别的类? 他们是否遗漏了任何重要的东西?

我想构建一个更高级的 Array 对象,但我想确保如果我用自定义 Array 类替换它们,我不会破坏到处使用数组的现有应用程序。

Would it be possible to write a class that is virtually indistinguishable from an actual PHP array by implementing all the necessary SPL interfaces? Are they missing anything that would be critical?

I'd like to build a more advanced Array object, but I want to make sure I wouldn't break an existing app that uses arrays everywhere if I substituted them with a custom Array class.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无妨# 2024-07-14 01:35:05

除了上面提到的几点之外,您将无法使用户空间数组类型提示与您的类的实例一起使用。 例如:

<?php
function f(array $a) { /*...*/ }

$ao = new ArrayObject();
f($ao); //error
?>

输出:

Catchable fatal error: Argument 1 passed to f() must be an array, object given 

In addition to the points made above, you would not be able to make user-space array type hints work with instances of your class. For example:

<?php
function f(array $a) { /*...*/ }

$ao = new ArrayObject();
f($ao); //error
?>

Output:

Catchable fatal error: Argument 1 passed to f() must be an array, object given 
衣神在巴黎 2024-07-14 01:35:05

其他差异包括数组的“+”运算符(合并)以及整个 array_* 函数的失败,包括常用的 array_mergearray_shift >。

Other differences include the '+' operator for arrays (merging) and the failure of the entire array_* functions, including the commonly used array_merge and array_shift.

尸血腥色 2024-07-14 01:35:04

我能想到的唯一问题是 gettype() 和 is_array() 函数。
检查您的代码,因为

gettype($FakeArray) == 'array' 
is_array($FakeArray)

虽然您可以像数组一样使用该对象,但它仍然会被识别为对象。

The only problems i can think of are the gettype() and the is_array() functions.
Check your code for

gettype($FakeArray) == 'array' 
is_array($FakeArray)

Because although you can use the object just like an array, it will still be identified as an object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文