php数组只有一种类型

时间:2009-07-20 11:42:33

标签: php arrays

我正在寻找使用某种类型的元素创建数组或列表(例如,实现某个接口的对象)。我知道我可以创建一个对象来实现Traversable和Iterator,或者覆盖ArrayObject。但也许我错过了另一种方式。

5 个答案:

答案 0 :(得分:4)

你的意思是:

$array=Array();
foreach ($itemsToAdd as $item) {
    if ($item instanceof NameOfwantedInterface) {
     Array_push($array,$item);
    }
}

如果你不这样做,我很抱歉 - 这只是你的问题不太清楚。

答案 1 :(得分:3)

如果你试图分配一个不正确类型的变量,我会编写一个扩展ArrayObject的自定义类并抛出异常,实际上没有更好的方法可以解决这个问题。

答案 2 :(得分:1)

PHP作为语言在类型处理和类型转换方面非常灵活。如果你想要任何类型的强类型检查,你可能需要手动检查,一个简单的if语句就可以了。

数组对象的设计特别灵活(延迟键分配,自动增量,字符串或整数键等),因此您应该使用自己的自定义对象。

答案 3 :(得分:0)

您可以使用类型提示:

<?php

interface Shape
{
    function draw();
}

class MyArray
{
    private $array = array();

    function addValue(Shape $shape) //The hinting happens here
    {
        $array[] = $shape;
    }
}

?>

这个例子并不完美,但你会明白这一点。

答案 4 :(得分:0)

基本上,您将要执行一个函数来检查您插入到数组中的变量是否为对象。

function add($var)
{
    if(is_object($var))
    {
       $this->array[] = $var;
    }
}

如果你想确保它有一个特定的类名,你可以这样做(对于PHP5):

function add(className $var)
{
   $this->array[] = $var;
}

或以前的PHP版本:

function add($var)
{
    if($var instanceOf className)
     {
        $this->array[] = $var
     }
}

您可能希望在不构建对象的情况下查看array_filter()来执行此操作。

查看该页面,我发现您可以将array_filter与is_object等常用函数一起使用。所以做这样的事情:

$this->array = array_filter($this->array ,'is_object');

会过滤数组以仅包含对象。