2012-12-28 138 views
2

我只是不明白爲什麼我不能調用這樣的對象。爲什麼不能在另一個對象中加載對象?

<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ 
    function __construct() {} 

    function something() 
    { 
     echo "Hello World\n"; 
     echo $obj->sad; 
    } 
} 

$class = new MyClass(); 
echo $obj->happy; 
$class->something(); 

輸出看起來像

:) Hello World 

,這不是我所期望的。即

:) Hello World :(

我該怎麼做這個工作?編輯: 這是我將實施這個例子。 passing objects from the global scope to a model

+0

打開錯誤顯示,閱讀了關於可變範圍。 'something()'不能看到'$ obj'。 – DCoder

+0

問題@DCoder不是錯誤,我只想讓$ obj在MyClass裏面的所有函數中都可見:) – Matias

回答

2
<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ 
    function __construct(){ 
    } 

    function something() 
    { 
     global $obj; 
     echo "Hello World\n"; 
     echo $obj->sad; 
    } 
} 

$class = new MyClass(); 
echo $obj->happy; 
$class->something(); 

?> 

這將是做這件事的方式。 obj不在這裏範圍,你必須要麼全球化,要麼通過它。

它傳遞給構造函數和保存instance..as這裏

<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ private $obj; 
    function __construct ($obj) { 
    $this->obj=$obj; 

    } 

    function something() 
    { 
     echo "Hello World\n"; 
     echo $this->obj->sad; 
    } 
} 

$class = new MyClass($obj); 
echo $obj->happy; 
$class->something(); 

但你必須從所有的功能訪問$ OBJ通過$ this-> OBJ

+0

很酷。但我仍然需要在MyClass的每個函數內聲明'global $ obj'。我在課堂上有〜23個功能:P。我知道這只是複製和粘貼。沒有其他方法可以在每個範圍內使$ obj可見? – Matias

+0

是的..看到編輯 – geekman

+0

你仍然必須改變所有功能...沒有出路 – geekman

4

$obj沒有在something函數的範圍內定義。您可以通過在函數內部添加global $obj來將其全球化,但將它作爲參數傳遞給函數會更好。

編輯:

<?php 
$obj = (object) Array(
    "happy" => " :) ", 
    "sad" => " :(" 
); 
class MyClass { 
    function something($obj) { 
    echo "Hello World\n".$obj->sad; 
    } 
} 
$class = new MyClass(); 
echo $obk->happy; 
$class->something($obj); 
+0

使$ obj全局變爲全部代碼:/我已經嘗試過了。編輯:在哪個函數裏面? – Matias

+0

Global不安全任何方式,應始終避免不惜一切代價 –

+0

爲「傳遞參數」選項添加代碼。 –

0

這是因爲你的情況$obj是在全球範圍內,並且不可withing類的範圍。

打開你的錯誤報告,這將立即變得明顯,「試圖獲得一個非對象的屬性」類型的錯誤。

1

通OBJ的參數設置爲構造函數或方法本身,這裏是使用該方法的例子:

<?php 

$obj = (object) array (
     "happy" => " :) ", 
     "sad" => " :(" 
); 

class MyClass 
{ 
    function __construct() {} 

    function something ($obj) 
    { 
     echo "Hello World\n"; 
     echo $obj->sad; 
    } 
} 

$class = new MyClass(); 
echo $obj->happy; 
$class->something($obj); 
相關問題