2012-12-28 90 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); 
相关问题