gpt4 book ai didi

PHP:确保数组仅包含来自某个类的对象

转载 作者:行者123 更新时间:2023-12-02 20:41:19 24 4
gpt4 key购买 nike

在我的一些 setter 中,我传递了一个对象数组。我想确保它只包含给定类的实例。阅读文档,这是我所做的:

class Foo
{
public function __construct()
{

}
}

class ErrorFoo
{
public function __construct()
{

}
}

$arrayObject = Array();

array_push($arrayObject, new Foo());
array_push($arrayObject, new Foo());
array_push($arrayObject, new ErrorFoo());

$error = false;
foreach ($arrayObject as $obj)
{
if ( $obj instanceof Foo )
{
echo "ok" . '<br>';
}
else
{
echo "error" . '<br>';
$error = true;
}
}

你知道比像这样遍历数组更简单的方法吗?

最佳答案

创建一个扩展 ArrayObject 的类, 重新定义其 offsetSet()方法并在其中进行检查。使用此类而不是普通数组来存储 Foo 类型的对象。

class ArrayOfFoo extends ArrayObject
{
public function offsetSet($index, $newval)
{
// Verify the input
if (! $newval instanceof Foo) {
// do something
throw new InvalidArgumentException('Invalid type');
}

// Let the parent class do its job
parent::offsetSet($index, $newval);
}
}

ErrorFoo 类型的对象被添加到数组时,这段代码抛出异常:

$ArrayObject = new ArrayOfFoo();

$ArrayObject[] = new Foo();
$ArrayObject[] = new Foo();
// This throws an exception
$ArrayObject[] = new ErrorFoo();

ArrayObject 的实例类可以以与 array 相同的方式使用使用(设置、取消设置和从中获取值)。其方法getArrayCopy()可用于获取 array可以作为参数传递给需要数组的函数(explode(), f.e.)

关于PHP:确保数组仅包含来自某个类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46035623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com