工法の問題

WBOY
リリース: 2016-06-23 13:29:58
オリジナル
814 人が閲覧しました

オブジェクトの作成後にコンストラクターが自動的に呼び出されることを常に理解していました テストが失敗しました

class o{ 	public function __construct(){		var_dump($object);	}}$object = new o;
ログイン後にコピー


エラー メッセージ: Notice: 未定義の変数: object


ディスカッション (解決策) への返信

コンストラクターは次のようにする必要があります。変数
クラス o{

public function __construct($object){
var_dump($object)
}
}
$str = "" new

クラス; o{


public function __construct(){
var_dump($object); }
}

クラスには $object 変数がないため、出力は次のようになります初期化中に $object を渡すことができます。例:

<?phpclass o{      public function __construct($object){        var_dump($object);    }}$oo = new stdClass();$oo->name = 'fdipzone';$object = new o($oo);?>
ログイン後にコピー


エラーは、変数が存在せず、コードが変数スコープ規則に準拠していないためです
global $object を追加するだけです

ことがわかります。出力が NULL であること

これは new o の後に追加されます オブジェクトは $object; に割り当てられ、オブジェクトの作成時にコンストラクターが実行されます

class o{  public function __construct(){    global $object; //加上这个    var_dump($object); //输出 NULL  }} $object = new o;var_dump($object); //输出 object(o)#1 (0) { } 
ログイン後にコピー


古代の答えは 2 階から来ます

@xuzuning 新しい o の後にオブジェクトにアクセスすると、コンストラクター メソッドが自動的に呼び出され、オブジェクトの参照が $object に当てはまりますか?モデレーター Daniel

new o はアクションであり、クラス o からオブジェクトを作成します

オブジェクトを作成するとき、php はコンストラクターを呼び出します (そのため、独自の処理をいくつか実行する機会があります)

注:
$object = new o;
$object が取得するのは new o の参照ではなく、new o そのものです

一つだけ、php4 であっても php5 であっても同じです



@xuzuning ああ、構築方法は知っていますが、いつ呼び出されるのかがわかりません。 new o がオブジェクトを取得すると、コンストラクターが自動的に呼び出され、オブジェクト参照が $object に割り当てられます。

@xuzuning そうですか? PHP でリソースとオブジェクトを割り当てる方法は参照によるものですか?

new は代入ではありません

それはオブジェクトと変数を一緒にバンドルすることです

@xuzuning つまり、それが引用文の意味ですか?教えてください

class T {  public $v = 1;  function see() {    echo $this->v, PHP_EOL;  }}$a = new T;$b = new T;$a->v = 2;$a->see(); //2$b->see(); //1 如果 new 传递的是引用,那么为什么是1 而不是 2 呢?$c = $b; //对象赋值传递的是引用$c->v = 100;$b->see(); //100$c->see(); //100 所以 $b->v 变了,$c->v 也跟着变了
ログイン後にコピー

@xuzuning わかりました

クラスのコンストラクターメソッドについて十分に理解していないようです コンストラクターメソッドの役割はオブジェクトを初期化することです。新しいオブジェクト When を作成する場合、代入なしでは、コンストラクター メソッドは無意味です

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート