是否可以在不同类的对象中存储对象的属性(包含字符串或整数等标量数据的类成员变量)的引用?
我试图让以下两个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;
}
}
答案 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方法,那么这非常方便。