2

コンストラクターまたは統合コンストラクターに違いはありますか。コンストラクターと統合コンストラクターを持つクラスがあります。クラスのオブジェクトを初期化すると、統一されたコンストラクターが通常のコンストラクターではない理由を呼び出します。

<?php 

class test {

    function __construct() {
       print "In BaseClass constructor\n";
    }

    function test() {
        echo 'Class loeaded';                   
    }
}

$obj = new test();

?>

出力

BaseClass コンストラクター内

PHP バージョン 5.2.6

4

4 に答える 4

2

PHP 5 以降、クラスでコンストラクター メソッドを宣言する最良の方法は、標準化されたメソッドを使用することです。

__construct()

だからあなたが持っているなら

class myA {

  public function __construct() {
    echo "hello construct myA";
  }

  public function myA() {
    echo "hello basic way myA";
  }
}

$myA = new myA();

反響します

hello construct myA

__constructor()が優先されるので

ただし、互換性の理由から、メソッドがない場合は古い方法で動作する可能性があり__construct()ます。と:

class myA {

  //public function __construct() {
  //  echo "hello construct A";
  //}

  public function myA() {
    echo "hello basic way myA";
  }
}

$myA = new myA();

あなたに与える:

hello basic way myA

いずれの場合も、使用することをお勧めします__construct()

于 2013-04-03T04:09:16.643 に答える
1

古いコンストラクター (クラス名を持つメソッド) は、互換性の理由からのみ存在します。そのため、クラス php に新しいコンストラクター (__construct) がある場合、わざわざ古いコンストラクターを呼び出す必要はありません。

編集

興味深いことにparent::__construct、拡張されるクラスに古いコンストラクター型しかない場合の呼び出しは引き続き機能します (実際のコンストラクターのエイリアスのようになります)。

于 2013-04-03T04:00:51.827 に答える
1

コンストラクター メソッドを持つクラスは、新しく作成されたオブジェクトごとにこのメソッドを呼び出すため、オブジェクトが使用される前に必要な初期化に適しています。

コンストラクターのドキュメントを読む (リンク)


クラスのインスタンスは new キーワードを使用して作成されます。new 呼び出し中に何が起こるかというと、要求したクラスで定義されたプロパティの独自のコピーが新しいオブジェクトに割り当てられ、オブジェクトが定義されている場合はそのオブジェクトのコンストラクターが呼び出されます。コンストラクターは という名前のメソッドで__construct()、オブジェクトの作成後に new キーワードによって自動的に呼び出されます。通常、プロパティの初期化など、さまざまな初期化を自動的に実行するために使用されます。コンストラクターは引数を受け入れることもできます。その場合、新しいステートメントを作成するときに、コンストラクターに括弧内の関数パラメーターも送信する必要があります。

PHP 4 では、コンストラクターの名前として を使用する代わりに、__construct()C++ のようにクラスの名前を使用してメソッドを定義する必要がありました。これは PHP 5 でも機能しますが、新しいアプリケーションには新しい統一されたコンストラクターの命名規則を使用する必要があります。

次のクラスの例では、改行で人々の名前を渡すことができます。

class Person {

function __construct($name)

{

$this->name = $name;

}

function getName()

{

return $this->name;

}

private $name;

};

$judy = new Person("Judy") . "\n";

$joe = new Person("Joe") . "\n";

print $judy->getName();

print $joe->getName();

ヒント: コンストラクターは値を返すことができないため、コンストラクター内からエラーを発生させる最も一般的な方法は、例外をスローすることです。

于 2013-04-03T04:01:53.400 に答える
1

ドキュメントによると、PHP 5.3.3以降、クラスと同じ名前のメソッドはコンストラクターとして扱われなくなります..それらは通常のメソッドのようです...

 <?php

 class myclass 
  {
     public function myclass() 
    {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
    }
   }
     ?>

`

下位互換性のために、PHP 5 が特定のクラスの __construct() 関数を見つけることができず、クラスが親クラスから継承していない場合、クラスの名前で古いスタイルのコンストラクター関数を検索します。

つまり、コンストラクター myclass() と __construct がある場合、__construct が最初に検索され、myclass() の代わりにコンストラクターとして使用されます。

         class myclass 
          {
             public function myclass() 
            {
               echo 'hello';
            }

            function __construct() {
               print "new constructor"
           }

           }
     $obj = new myclass();  // will echo new constructor
于 2013-04-03T04:02:16.743 に答える