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

时间:2012-10-21 00:04:01

标签: 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 $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;
    }
}

3 个答案:

答案 0 :(得分:1)

$ this-&gt; obj = new Property($ this-&gt; name);

在创建对象时调用。哪个在分配之前执行。 即 当你拨打$ x = new Type时; 调用构造函数,然后尝试复制“名称”,该名称为

时为空

可能是你想要它跟随的,而不是传递值,传递$ this并保持referance。

<?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/>';

答案 1 :(得分:0)

您可以在构造函数中传递name值。

$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;

答案 2 :(得分:0)

这是一个老问题,但只是为此添加。

你可以在另一个对象中拥有一个包含方法和属性的对象。

实施例

$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; 

如果您实例化某个API的对象并希望在您自己的对象中使用API​​方法,那么这非常方便。