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 :(

どうすればこれを機能させることができますか??

編集:これは、この例を実装するものです。オブジェクトをグローバル スコープからモデルに渡す

4

4 に答える 4

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);
于 2012-12-28T18:54:46.550 に答える
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はここではスコープに含まれていません。グローバルにするか、渡す必要があります。

それをコンストラクターに渡し、インスタンスを保存します。ここに

<?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();

ただし、すべての関数から$this->objとして$objにアクセスする必要があります

于 2012-12-28T19:03:14.363 に答える
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);
于 2012-12-28T19:02:20.797 に答える
0

あなたの場合$objはグローバルスコープにあり、クラスのスコープ内では利用できないためです。

エラー報告をオンにすると、これは「オブジェクト以外のプロパティを取得しようとしている」タイプのエラーですぐに明らかになります。

于 2012-12-28T18:56:58.613 に答える