0

Phpオブジェクトを実行しようとしているときに、小さな問題が発生しました。

私はこれらのクラスを持っています:

class a
{
    public $day;

    function __construct(){
        $this->day = new DateTime("now");
    }
}

class b
{
    public $test;

    function __construct(){
        $this->test = new a()
    }
    function myFunc(){
        $this->test->day->format('Y-m-d');
    }
}

myFuncを呼び出すと、次のエラーが発生します。

致命的なエラー:非オブジェクトでのメンバー関数format()の呼び出し

クラス'b'からクラス'a'に含まれるオブジェクト属性のメソッドを呼び出すにはどうすればよいですか?

編集:さて、私は実際に上記のコードをここに投稿するために実際に持っているものよりも単純にしました、そしてそうすることでエラーはうまくいきませんでした...これは私が持っているものに近いコードであり、エラーを表示します私が話していた

<?php
date_default_timezone_set('America/Chicago');
class a
{
    public $day;
}

function __construct($day = "now")
{
    $this->day = new DateTime($day);
}

class b
{
public $test;

function __construct(){
    $this->test = new a();
    }   
function myFunc(){
    echo $this->test->day->format("Y-m-d");
    }   
}
$bclass = new b();
$bclass->myFunc();
?>

これはまさに私がそれを実行したときに得られるものです:

( ! ) Fatal error: Call to a member function format() on a non-object in C:\wamp\www\axpo\newPHPClass.php on line 21
Call Stack
# Time    Memory  Function    Location
1 0.0023  256080  {main}( )   ..\newPHPClass.php:0
2 0.0024  257128  b->myFunc( )    ..\newPHPClass.php:25

なぜ機能しないのかわかりません...確かに愚かで基本的なものだとは思いますが、私にはわかりません...

4

2 に答える 2

0

でセミコロンがありません

$ this-> test = new a();

そして、クラスbのmyFunc()内の値を返すかエコーして、それを使って何かを実行できるようにする必要があります。これを見てください:

<?php
class a
{
    public $day;

    function __construct(){
        $this->day = new DateTime("now");
    }
}

class b
{
    public $test;

    function __construct(){
        $this->test = new a(); // Added a semicolon !
    }
    public function myFunc(){
       return $this->test->day->format('Y-m-d'); // Return the value
    }
}

$b= new b();
echo $b->myFunc(); // echo the returned value from the function

?>
于 2013-02-09T20:22:58.827 に答える
0

新しいコードの問題は、 public$dayを定義した後にクラス定義を閉じることです。

クラスa{public$ day; } //クラスは最後の中括弧で閉じられます!

したがって、__コンストラクター関数はまったく呼び出されません!「public$day;」の後の中括弧を削除します。__construct関数の定義の後に追加します。その後、それは動作するはずです!

ルシアン

于 2013-02-10T11:08:48.730 に答える