web-dev-qa-db-ja.com

PHP $ this変数

私はいくつかのPHP私が理解できなかったコードを読んでいます:

_class foo {
  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $dbh = $this->dbh ; 
    return; 
  }

  function get() {
    return $this->dbh; 
  }
}
_

クラスから$this->dbh ($dbh)宣言が見つかりません。私の質問は:

  • _$this->dbh_の値は何ですか?

  • 関数select()のローカル変数ですか?

  • _$this_は_class foo_のデータメンバーに属しますか?このクラスに_$dbh_の宣言がないのはなぜですか?

26

PHPは、クラスプロパティ宣言の要求について厳密ではありません。

  • 割り当ての場合、プロパティはサイレントに作成されます。
  • 読み込み元​​=存在しないプロパティは、E_STRICT 有効になっています。
  • 未定義のプロパティのデフォルト値はNULLです
18
Unsigned

PHPは宣言に厳密ではありません。 $ this-> dbhはクラスメンバーです。概念を理解するために、次のコードを実行しました。

class foo {

 function foo(){
     $this->dbh = "initial value"; 
 }

 function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $dbh = $this->dbh ; 
    return; 
 }

 function get() {
     return $this->dbh; 
 }

}

以下と同じです:

class foo {
  var $dbh = "initial value"; 

  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
       $dbh = $this->dbh ; 
    return; 
  }

  function get() {
     return $this->dbh; 
  }

}
22
  1. 投稿したコードでは、$this->dbhの値が何であるかを知ることはできません。
  2. $dbhは、現在のオブジェクトのプロパティです。 $thisは、現在のオブジェクトのメンバーへのアクセスに使用されます。
  3. この変数は関数の外部で定義されているため、特定の関数ではなくクラスに属する変数です。このため、$this->dbhはクラス内の任意の関数で使用できます。
  4. PHPは、使用するすべての変数を定義する必要はありません。
2
EmCo

$ this-> dbhの値は何ですか

それ以外に「null」が割り当てられている場合、デフォルト値になります

関数select()のローカル変数ですか?もしそうなら、なぜget()関数はこの変数を使用できますか?

ローカル変数ではなく、fooクラスのプロパティであるため、fooクラスのすべてのメソッドで使用できます

クラスfooのデータメンバーに属しますか?もしそうなら、なぜこのクラスに$ dbhの宣言がないのですか?

はい、fooのデータメンバーに属します。宣言は表示されません。PHPはクラスプロパティ宣言の要求について厳密ではありません。

1
Chetan Sharma

PHPはクラスプロパティの宣言を強制しませんが、最初にアクセスしたときにそれらを作成します。これが良いか悪いかに関係なく、PHPにようこそ。

もう1つ確認すべきことは、継承が発生していないことです。あなたのでしたか $dbhプロパティは親クラスで定義されていますか?あなたが投稿した単純なコードには何もありませんが、私はあなたが公共の消費のために少し単純化したと想像できます。 :-)

1
Icode4food
class foo {
  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $this->dbh = $dbh ; 
    return; 
  }

  function get() {
    return $this->dbh; 
  }
}
0
Pritesh Loke