0

私は、まだ慣れていないクラスで作業しなければならないサイトをデバッグしています。

このサイトには、を処理するこのクラスがありますが$this、クラスに渡される変数はないようです。クラスはこんな感じ

class myclass extends otherclass{

    function dosmthtomyclass{
        print_r($this);
    }
}

function dosmttomyclass配列を出力します。

クラスで保護されて定義された変数の束がありますが、それらの変数のいずれにも特定の値が指定されていないようであり、値を渡すコンストラクターがクラスにありません。

変数がどこから渡されたに違いないかについて、私は真剣に混乱しています。これは本当に基本的なことかもしれませんが、どんな助けもいただければ幸いです。クラスに変数を渡すための可能な方法は何ですか

4

5 に答える 5

1

$this現在のオブジェクトを参照します。PHPのドキュメントによると

疑似変数$thisは、オブジェクトコンテキスト内からメソッドが呼び出されたときに使用できます。$ thisは、呼び出し元のオブジェクト(通常はメソッドが属するオブジェクトですが、メソッドが2次オブジェクトのコンテキストから静的に呼び出される場合は別のオブジェクト)への参照です。

ここにそれについてのいくつかの詳細な説明があります。理解するのに役立つかもしれません

PHPで変数$thisはどういう意味ですか?

于 2012-07-24T08:47:01.603 に答える
0

OOPのマニュアルやチュートリアルを読む必要があります。これがOOPを理解する唯一の方法だからです。これから始めましょう:http ://www.php.net/manual/en/language.oop5.basic.php

$ thisは、オブジェクトの現在のインスタンスを参照します。PHP +の可視性について読んで、プライベート変数/メソッドが子クラス(拡張クラス)に可視でない理由を理解してください。

幸運を!

于 2012-07-24T08:47:09.087 に答える
0

$thisクラスの現在のオブジェクトを参照します。より明確にするために、次のコードを実行します。

<?php
class abc {
    var $val = 3;

    function show()
    {
        print_r($this);
    }
}

$ob = new abc();
$ob->show();
于 2012-07-24T08:48:12.830 に答える
0

これは、myclassがotherClassからデータを取得しているためです...次のようになります。

<?php
class otherclass{
    public $name="Mike";
}

class myclass extends otherclass {
    function dosmthtomyclass() {
        print_r($this);
    }
}

$test=new myclass();
$test->dosmthtomyclass();  //prints "[name] => Mike"
于 2012-07-24T08:50:14.810 に答える
0

たぶん、phpでクラスを使用するためのいくつかの背景があなたを助けることができます:

$ thisは、クラス内の階層を参照するために使用されます。たとえば、次のようなクラスを作成できます。

class Phpclass{

    public function main(){
        echo "public function called<br/>";
        $this->helloworld();
    }

    private function helloworld(){
        echo "hello world";
    }

}

$phpclass=new Phpclass();
$phpclass->main();

このクラスは、変数$phpclassでインスタンス化されるオブジェクトの青写真です。main()はクラス内のplublic関数であるため、クラスの外部から呼び出すことができます。プライベート関数はクラス内からのみ呼び出すことができるため、main()関数は$ thisをクラス自体の識別子として使用して、それ自体の内部でプライベート関数helloworld()を呼び出します。$ thisがないと、オブジェクトは、それ自体の内部の関数を参照していることを認識しません。

最初に、上記は「public function called」、次に「helloworld」をエコーし​​ます。

于 2012-07-24T08:51:41.347 に答える