$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