$user->Phonenumbers[]->phonenumber = '123 123';
$user->Phonenumbers[]->phonenumber = '456 123';
$user->Phonenumbers[]->phonenumber = '123 777';
我從來沒有見過這種語法爲什麼這種聲明可以在PHP中工作?
編輯
這似乎更可能是一個要素,你們知道我怎麼能實現這樣的功能?
$user->Phonenumbers[]->phonenumber = '123 123';
$user->Phonenumbers[]->phonenumber = '456 123';
$user->Phonenumbers[]->phonenumber = '123 777';
我從來沒有見過這種語法爲什麼這種聲明可以在PHP中工作?
編輯
這似乎更可能是一個要素,你們知道我怎麼能實現這樣的功能?
看來,像下面與物業PHONENUMBER創建stdClass的對象,並將其推入$user->Phonenumbers
數組:
$user->Phonenumbers[]->phonenumber = 12345;
我從來沒有見過這種語法了。
濃湯是正確的,這裏是一個工作示例:
<?php
class Test
{
public $arr = array();
public $obj = null;
}
$a = new Test();
$a->arr[]->foo = 1234;
$a->arr[]->bar = 'test';
var_dump($a->arr);
// even more weird on null objects
$a->obj->foobar = 'obj was null!';
var_dump($a->obj);
回報:
array(2) {
[0]=>
object(stdClass)#2 (1) {
["foo"]=>
int(1234)
}
[1]=>
object(stdClass)#3 (1) {
["bar"]=>
string(4) "test"
}
}
object(stdClass)#4 (1) {
["foobar"]=>
string(13) "obj was null!"
}
編輯:好吧,我發現在PHP手冊中有關這個東西:
如果一個對象被轉換爲一個對象,它不會被修改。如果任何其他類型的值被轉換爲對象,則會創建stdClass內置類的新實例。如果該值爲NULL,則新實例將爲空。 (source)
因此,使用->
語法事情轉換爲對象。在上面的示例中$obj
是null,因此創建了一個新的空實例,並設置了foobar
成員。
查看數組示例時,arr[]
首先創建一個新的(空)數組元素,然後由於->
語法而將其轉換爲空對象,並設置了成員變量。
當在未定義的變量上使用[]和 - >運算符時,「隱含地」創建數組和對象。
$does_not_exist->foo = 1;
這裏php創建一個stdclass對象並拋出一個「strict」警告「從空值創建默認對象」。與陣列
$does_not_exist[] = 1;
的類似的事情,奇怪的是沒有工作的警告,有些人consider是一個錯誤,這錯誤。
PHP會將類型NULL
轉換爲使用它的上下文。
var_dump((bool) NULL);
var_dump((int) NULL);
var_dump((float) NULL);
var_dump((string) NULL);
var_dump((array) NULL);
var_dump((object) NULL);
會給
bool(false)
int(0)
float(0)
string(0) ""
array(0) {}
object(stdClass)#1 (0) {}
因此,在做的時候:
$a = NULL;
$a[] = NULL; // used in array context `[]`
$a[0]->foo = NULL; // object context `->`
$a[0]->foo++; // number context `++`
所產生的結構將是
array(1) {
[0]=>
object(stdClass)#1 (1) {
["foo"]=>
int(1)
}
}
就像我在評論中所提到的,這樣做是反對E_STRICT
標準,但會提出通知。
更具體嗎?你看不到什麼語法的部分? – 2010-02-21 17:19:51
我想這是phonenumbers [] - > phonenumber部分 – Htbaa 2010-02-21 17:20:40
這是否實際上不會引發錯誤? :o您能否提供更多的代碼,特別是班級中「Phonenumbers」的定義? – poke 2010-02-21 17:24:29