2012-10-21 105 views
0

是否可以在不同類的對象中存儲對象的屬性(包含諸如字符串或整數等標量數據的類成員變量)的引用?將php對象的屬性存儲在另一個對象中作爲參考

我想要以下兩個回聲語句產生相同的結果。

<?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

您可以在構造函數中傳遞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; 
1

$這個 - > OBJ =新的屬性($這個 - >名稱);

在創建對象時調用。在分配之前執行哪個。 即 當您調用$ 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/>'; 
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​​方法,這是超級方便的。

相關問題