0

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

我试图让以下两个 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;
    }
}
4

3 回答 3

1

$this->obj = new Property($this->name);

在创建对象时调用。这是在分配之前执行的。即当你调用 $x = new Type; 构造函数被调用,您尝试复制到那时为空的“名称”

可能是您希望它遵循的,而不是传递值,而是传递 $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/>';
于 2012-10-21T00:10:30.280 回答
0

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

$x = new Type('abcd');

如果不这样做,您的构造函数将不知道现在$this->name是什么。所以我们在构造函数中使用它并在使用它之前设置类属性。

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;
于 2012-10-21T00:10:24.277 回答
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 方法,这将非常方便。

于 2018-02-02T01:10:56.590 回答