Php 通过引用分配失败,出现语法错误
我有一个类实例Php 通过引用分配失败,出现语法错误,php,reference,Php,Reference,我有一个类实例$obj=newclassobj实际上是另一个对象的变量,所以它更像是$obj1->obj2->obj3=newclass。这让我的代码有点混乱,所以我想做一些类似的事情: $var=&$obj1->obj2->obj3=新类 然后开始将此实例用作 $var->method()或$var->name='abc' 当像$var=$obj1->obj2->obj3=新类那样使用它时,它工作得很好,但我考虑了可以保存的内存(因为对象非常大,不建议复制它)。我不确定这是否是一个问题,或者是
$obj=newclass
obj
实际上是另一个对象的变量,所以它更像是$obj1->obj2->obj3=newclass
。这让我的代码有点混乱,所以我想做一些类似的事情:
$var=&$obj1->obj2->obj3=新类
然后开始将此实例用作
$var->method()
或$var->name='abc'
当像$var=$obj1->obj2->obj3=新类那样使用它时,它工作得很好,但我考虑了可以保存的内存(因为对象非常大,不建议复制它)。我不确定这是否是一个问题,或者是否确实需要通过引用进行赋值,或者PHP是否考虑到了这一点
我忘了提到,使用$var=&$obj1->obj2->obj3=newclass
会导致:
分析错误:语法错误,意外的“=”
执行以下操作会将同一对象分配给$obj1->obj2->obj3
和$var
$obj1->obj2->obj3 = new class;
$var = $obj1->obj2->obj3;
执行以下操作会将同一对象分配给$obj1->obj2->obj3
和$var
$obj1->obj2->obj3 = new class;
$var = $obj1->obj2->obj3;
当你这样做的时候
$var = new stdClass();
$var2 = $var;
$var 2
实际上是对$var
的引用。这是因为PHP通过引用传递类。所以你不是在做新的拷贝。因此,您可以将其分配给较短的变量并减少键入 当你这样做的时候
$var = new stdClass();
$var2 = $var;
$var 2
实际上是对$var
的引用。这是因为PHP通过引用传递类。所以你不是在做新的拷贝。因此,您可以将其分配给较短的变量并减少键入 字段初始化应在构造函数或其他类方法中完成
您可以像往常一样进行初始化(这是一次)
之后,在外部代码中,您可以执行以下操作
$var = $obj1->obj2->obj3;
$var->method;
另外请注意,使用嵌套对象会使系统复杂化,不建议嵌套太深。字段初始化应在构造函数或其他类方法中完成
您可以像往常一样进行初始化(这是一次)
之后,在外部代码中,您可以执行以下操作
$var = $obj1->obj2->obj3;
$var->method;
另外请注意,使用嵌套对象会使系统复杂化,不建议嵌套太深。
- 从PHP5开始,对象总是通过引用传递。在PHP4中,
$a=newobj事实上,code>会在创建过程中复制对象一次,在分配给$a
过程中复制另一次,情况不再如此李>
- PHP中的正则变量是写时复制的,所以即使
$a='fred'$b=一美元代码>尚未将内存使用率提高一倍
- 一般来说,对于PHP,在遇到问题之前,最好让该语言来完成工作,而不是试图超越它:)
- 从PHP5开始,对象总是通过引用传递。在PHP4中,
$a=newobj事实上,code>会在创建过程中复制对象一次,在分配给$a
过程中复制另一次,情况不再如此李>
- PHP中的正则变量是写时复制的,所以即使
$a='fred'$b=一美元代码>尚未将内存使用率提高一倍
- 一般来说,对于PHP,在遇到问题之前,最好让该语言来完成工作,而不是试图超越它:)
要回答有关语法错误的问题,出现语法错误的原因是您试图将引用分配给非变量的对象
此代码:
$var =& $obj1->obj2->obj3 = new class
得到如下()的计算结果:
这不起作用,因为无法创建对表达式的引用
至于创建对象的引用而不是副本,这取决于您运行的PHP版本。在PHP5中,.要回答有关语法错误的问题,出现语法错误的原因是因为您试图将引用分配给非变量的对象
此代码:
$var =& $obj1->obj2->obj3 = new class
得到如下()的计算结果:
这不起作用,因为无法创建对表达式的引用
至于创建对象的引用而不是副本,这取决于您运行的PHP版本。在PHP5中,.您能澄清一下您的问题吗?您使用的是什么版本的PHP?使用我想要的方法会抛出一个错误。另外,我不确定这是否是实现我想要的目标的正确方法。谢谢@怀斯盖伊,我不确定$var&=$x
相当于$var=$var&$x
,但这并不完全相同。您正在查找$var=&$x
。但是,正如公认的答案所述,您不需要变量引用,因为您已经有了一个对象引用……您能澄清一下您的问题吗?您使用的是什么版本的PHP?使用我想要的方法会抛出一个错误。另外,我不确定这是否是实现我想要的目标的正确方法。谢谢@怀斯盖伊,我不确定$var&=$x
相当于$var=$var&$x
,但这并不完全相同。您正在查找$var=&$x
。但是,正如公认的答案所述,您不需要变量引用,因为您已经有了对象引用……非常感谢!真正地(我接受了约翰普的回答,因为他速度更快,但我知道你们两个在同一时间打字。)。谢谢!真正地(我接受了约翰普的回答,因为他速度更快,但我确实意识到你们两个在同一时间打字。:)。谢谢你们帮我解决这个问题。因此,可以肯定地说,$var=$obj1->obj2=newclass
是正确的方法,还是我应该将它分成两个单独的赋值?完全去掉“&”可以更好地理解语言的工作方式,避免在代码审查期间出现屈尊俯就的样子,但这两种方法都可以(:谢谢!我不再使用&
了。谢谢你清除了这个。所以说