PHP中的自定义Object数组,如Java

时间:2016-03-11 09:59:28

标签: java php

在Java中,

我可以创建如下内容:

public class A {
    private final SomeCustomClass[] nodes;

    public A() {
        //create new SomeCustomClass
        node1 = new SomeCustomClass(100, 200);

        //create the more SomeCustomClass as array
        nodes = new SomeCustomClass[100]; //this is a array of type "SomeCustomClass"

        //fill these nodes
        for (int i = 0; i < 100; i++) {
            nodes[i] = new SomeCustomClass(1, 5);
        }

    }
}

以下是否满足其PHP实现?我对Java的nodes = new SomeCustomClass[100]部分感到困惑。

class A {

    private $node1;
    private $nodes;

    public function __construct() {
        //create new SomeCustomClass
        $this->node1 = new SomeCustomClass(100, 200);

        //create the more SomeCustomClass as array
        $this->nodes = new ArrayObject();

        //fill these SomeCustomClass
        for ($i = 0; $i < 100; $i++) {
            $this->nodes[$i] = new SomeCustomClass(1, 5);
        }

    }
}

我有SomeCustomClass这是我自己定义的类。

3 个答案:

答案 0 :(得分:0)

你可以做这样的事情,可能是更好的方式,但现在,我只能考虑这个。

class Customer 
{
    var $item;

    function __construct($arg){
        $this->item = $arg;
        $customer[] = $this->item;
    }
}

$customer = new Customer(1234);
var_dump($customer);
    ?>

输出

  

object(Customer)[1] public'itet'=&gt; int 1234

另一个是实现收集可能就像

class Collection 
{
    private $items = array();

    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;
            }
        }
    }

    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.");
        }
    }
}
class Salut
{
    private $name;
    private $number;

    public function __construct($name, $number) {
        $this->name = $name;
        $this->number = $number;
    }
}
$c = new Collection();
$c->addItem(new Salut("Steve", 14), "steve");
$c->addItem(new Salut("Ed", 37), "ed");
$c->addItem(new Salut("Bob", 49), "bob");
try {
    $c->getItem("steve");
}
catch (KeyInvalidException $e) {
    print "The collection doesn't contain Steve.";
}
var_dump($c);

输出

  

object(Collection)[1] private'itements'=&gt;       数组(大小= 3)         'steve'=&gt;           对象(萨吕)[2]             私人'名字'=&gt;字符串'Steve'(长度= 5)             私人'号码'=&gt; int 14         'ed'=&gt;           对象(萨吕)[3]             私人'名字'=&gt;字符串'Ed'(长度= 2)             私人'号码'=&gt; int 37         'bob'=&gt;           对象(萨吕)[4]             私人'名字'=&gt;字符串'Bob'(长度= 3)             私人'号码'=&gt;第49页

答案 1 :(得分:0)

通常在PHP中你会创建一个像:

这样的数组
$this->nodes = array();

您可以使用以下代码将其余代码添加到数组的末尾:

$this->nodes[] = new SomeCustomClass(1, 5);

答案 2 :(得分:0)

我想我遇到了你的问题。在PHP中编程时,您不能认为Java方式,因为它们在类型系统上是不同的。

虽然Java是statically typed,但PHP是dynamically typed。他们是两个不同的世界。

在Java中,在编译时检查变量的类型,在运行时检查PHP中的所有内容(特别是在使用PHP类型检查时)。

另外,Java中的数组数据结构与数组PHP数据结构不同。

在java中,数组是同类的,即当你输入

int a = new int[10]

此数组的所有值必须是int的类型。

然而,在PHP中,数组(这是一种类似哈希的结构,可以作为多个数据结构合并在一起)是异构的。这意味着可以包含所有类型。

$array = [1, "a", new stdClass(), []];

将其视为Object的Java数组。所以你的实现在语义上是正确的。 (我本来会使用原生数组)