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会在创建过程中复制对象一次,在分配给
    $a
    过程中复制另一次,情况不再如此
  • PHP中的正则变量是写时复制的,所以即使
    $a='fred'$b=一美元尚未将内存使用率提高一倍
  • 一般来说,对于PHP,在遇到问题之前,最好让该语言来完成工作,而不是试图超越它:)
      • 从PHP5开始,对象总是通过引用传递。在PHP4中,
        $a=newobj会在创建过程中复制对象一次,在分配给
        $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
      是正确的方法,还是我应该将它分成两个单独的赋值?完全去掉“&”可以更好地理解语言的工作方式,避免在代码审查期间出现屈尊俯就的样子,但这两种方法都可以(:谢谢!我不再使用
      &
      了。谢谢你清除了这个。所以说