私はいくつかの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
_の宣言がないのはなぜですか?
PHPは、クラスプロパティ宣言の要求について厳密ではありません。
E_STRICT
有効になっています。NULL
です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;
}
}
$this->dbh
の値が何であるかを知ることはできません。$dbh
は、現在のオブジェクトのプロパティです。 $this
は、現在のオブジェクトのメンバーへのアクセスに使用されます。$this->dbh
はクラス内の任意の関数で使用できます。$ this-> dbhの値は何ですか
それ以外に「null」が割り当てられている場合、デフォルト値になります
関数select()のローカル変数ですか?もしそうなら、なぜget()関数はこの変数を使用できますか?
ローカル変数ではなく、fooクラスのプロパティであるため、fooクラスのすべてのメソッドで使用できます
クラスfooのデータメンバーに属しますか?もしそうなら、なぜこのクラスに$ dbhの宣言がないのですか?
はい、fooのデータメンバーに属します。宣言は表示されません。PHPはクラスプロパティ宣言の要求について厳密ではありません。
PHPはクラスプロパティの宣言を強制しませんが、最初にアクセスしたときにそれらを作成します。これが良いか悪いかに関係なく、PHPにようこそ。
もう1つ確認すべきことは、継承が発生していないことです。あなたのでしたか $dbh
プロパティは親クラスで定義されていますか?あなたが投稿した単純なコードには何もありませんが、私はあなたが公共の消費のために少し単純化したと想像できます。 :-)
class foo {
function select($p1, $dbh=null) {
if ( is_null($dbh) )
$this->dbh = $dbh ;
return;
}
function get() {
return $this->dbh;
}
}