存储php对象';将另一个对象中的属性作为引用

存储php对象';将另一个对象中的属性作为引用,php,Php,是否可以在不同类的对象中存储对对象属性(类成员变量,该变量保存标量数据,如字符串或整数)的引用 我试图让下面两个echo语句产生相同的结果 <?php $x = new Type; $x->name = 'abcd'; echo "x.name=" . $x->name . '<br/>'; echo "x.obj.name=" . $x->obj->value . '<br/>'; class Type { public $o

是否可以在不同类的对象中存储对对象属性(类成员变量,该变量保存标量数据,如字符串或整数)的引用

我试图让下面两个echo语句产生相同的结果

<?php

$x = new Type;
$x->name = 'abcd';

echo "x.name=" . $x->name . '<br/>';
echo "x.obj.name=" . $x->obj->value . '<br/>';

class Type
{
    public $obj; //Instance of Property (Property class defined below)
    public $name;

    function __construct()
    {
        $this->obj = new Property($this->name);
    }
}

class Property
{
    public $value;

    function __construct($v)
    {
        $this->value = $v;
    }
}

您可以在构造函数中传递
名称

$x = new Type('abcd');
如果不这样做,您的构造函数将不知道
$this->name
是什么。因此,我们在构造函数中使用它,并在使用它之前设置classes属性

function __construct($p_name){
  $this->name = $p_name;
  $this->obj = new Property($this->name);
}

您可以在调用构造函数后轻松设置值,然后初始化引用-

class Type {
  public $obj;
  public $name;

  function setProperty(){
    $this->obj = new Property($this->name);
  }
}

$x = new Type;
$x->name = 'abcd';
$x->setProperty();

echo "x.name=" . $x->name;
echo "x.obj.name=" . $x->obj->value;
$this->obj=新属性($this->name)

在创建对象时调用。在分配之前执行。 即 当您调用$x=新类型时; 构造函数被调用,您尝试复制“name”,此时该名称为空

可能是您希望它遵循的,而不是传递值,传递$this并保留引用

<?php


class Type
{
    public $obj; //Instance of Property (Property class defined below)
    public $name;

    function __construct()
    {
        $this->obj = new Property($this);
    }
}

class Property
{
    public $value;

    function __construct($ref)
    {
        $this->value = $ref;
    }
}


$x = new Type;
$x->name = 'abcd';

echo "x.name=" . $x->name . '<br/>';
echo "x.obj.name=" . $x->obj->value->name . '<br/>';

这是一个老问题,只是为了补充一下

您可以在另一个对象中拥有一个具有方法和属性的对象

范例

$obj1 = new class1();

$obj2 = new class2($obj1); // you just grabbed $obj1 and stuck it inside $obj2
现在可以使用存储对象的方法,如下所示:

$obj2->obj1->method_from_obj1();
$obj2->obj1->property_of_obj1; 
或访问存储对象的属性,如下所示:

$obj2->obj1->method_from_obj1();
$obj2->obj1->property_of_obj1; 
如果您实例化了某个API的对象,并且希望在自己的对象内部使用API方法,那么这将非常方便