web-dev-qa-db-ja.com

__construct関数は何に使用されますか?

私はクラスで__constructに多く気づいています。ウェブを少し読んでサーフィンしたが、理解できる説明を見つけることができなかった。私はちょうどOOPから始めています。

私は誰かがそれが何であるかの一般的なアイデアを教えてくれて、それがPHPでどのように使用されているのか簡単な例を教えてくれないかと思っていましたか?

181
Levi

__constructはPHP5で導入されたもので、コンストラクターを定義する正しい方法です(PHP4では、コンストラクターにクラスの名前を使用しました)。クラスでコンストラクターを定義する必要はありませんが、オブジェクトの構築時にパラメーターを渡す場合は、コンストラクターが必要です。

例は次のようになります。

class Database {
  protected $userName;
  protected $password;
  protected $dbName;

  public function __construct ( $UserName, $Password, $DbName ) {
    $this->userName = $UserName;
    $this->password = $Password;
    $this->dbName = $DbName;
  }
}

// and you would use this as:
$db = new Database ( 'user_name', 'password', 'database_name' );

他のすべてはPHPマニュアルで説明されています: ここをクリック

274
Jan Hančič

__construct()constructor のメソッド名です。コンストラクターは、オブジェクトの作成後に呼び出され、初期化コードなどを置くのに適した場所です。

class Person {

    public function __construct() {
        // Code called for each new Person we create
    }

}

$person = new Person();

コンストラクターは、通常の方法でパラメーターを受け入れることができます。パラメーターは、オブジェクトの作成時に渡されます。

class Person {

    public $name = '';

    public function __construct( $name ) {
        $this->name = $name;
    }

}

$person = new Person( "Joe" );
echo $person->name;

他の言語(Javaなど)とは異なり、PHPはコンストラクターのオーバーロードをサポートしません(つまり、異なるパラメーターを受け入れる複数のコンストラクターを持つこと)。静的メソッドを使用してこの効果を実現できます。

:(この記事の執筆時点で)受け入れられた回答のログからこれを取得しました。

46
Rob

コンストラクタを宣言する別の方法。たとえば、クラス名を使用することもできます。

class Cat
{
    function Cat()
    {
        echo 'meow';
    }
}

そして

class Cat
{
    function __construct()
    {
        echo 'meow';
    }
}

同等です。クラスの新しいインスタンスが作成されるたびに呼び出されます。この場合、次の行で呼び出されます。

$cat = new Cat();
19
Logan Serman

これは、コンストラクタの目的を理解する上で重要だと思います。
ここで回答を読んだ後でも、気づくまでに数分かかりました。その理由がここにあります。
開始または発生するすべてのものを明示的にコーディングする習慣になりました。言い換えれば、これは私の猫のクラスであり、私はそれをどのように呼ぶのでしょう。

class_cat.php

class cat {
    function speak() {
        echo "meow";  
    }
}

somepage.php

include('class_cat.php');
mycat = new cat;
$speak = cat->speak();
echo $speak;

@Logan Sermanの「class cat」の例では、「cat」クラスの新しいオブジェクトを作成するたびに、関数を呼び出してニャーにするために待機するのではなく、「ニャー」にすることを想定しています。

このように、私の考えでは、コンストラクターメソッドが暗黙を使用する場所を明示的に考えていたため、最初は理解するのが難しくなりました。

16
ian

コンストラクターは、クラスのインスタンス化で自動的に呼び出されるメソッドです。つまり、コンストラクターの内容は、個別のメソッド呼び出しなしで処理されます。クラスキーワードの括弧の内容は、コンストラクターメソッドに渡されます。

12
Jimmy James

このヘルプを願っています:

<?php
    // The code below creates the class
    class Person {
        // Creating some properties (variables tied to an object)
        public $isAlive = true;
        public $firstname;
        public $lastname;
        public $age;

        // Assigning the values
        public function __construct($firstname, $lastname, $age) {
          $this->firstname = $firstname;
          $this->lastname = $lastname;
          $this->age = $age;
        }

        // Creating a method (function tied to an object)
        public function greet() {
          return "Hello, my name is " . $this->firstname . " " . $this->lastname . ". Nice to meet you! :-)";
        }
      }

    // Creating a new person called "boring 12345", who is 12345 years old ;-)
    $me = new Person('boring', '12345', 12345);

    // Printing out, what the greet method returns
    echo $me->greet(); 
    ?>

詳細については、 codecademy.com にアクセスする必要があります

10
Zaman

__constructメソッドは、firstオブジェクトを作成するときにパラメーターを渡すために使用されます。これは「コンストラクターメソッドの定義」と呼ばれ、よく行われることです。

ただし、コンストラクターはoptionalです。したがって、オブジェクトの構築時にパラメーターを渡したくない場合は、必要ありません。

そう:

// Create a new class, and include a __construct method
class Task {

    public $title;
    public $description;

    public function __construct($title, $description){
        $this->title = $title;
        $this->description = $description;
    }
}

// Create a new object, passing in a $title and $description
$task = new Task('Learn OOP','This is a description');

// Try it and see
var_dump($task->title, $task->description);

コンストラクターの詳細については、「 マニュアル 」を参照してください。

9
James
class Person{
 private $fname;
 private $lname;

 public function __construct($fname,$lname){
  $this->fname = $fname;
  $this->lname = $lname;
 }
}
$objPerson1 = new Person('john','smith');
7
Hussein

__constructは、新しいオブジェクトを作成するときに常に呼び出されるか、初期化が行われるときに呼び出されます。オブジェクトが使用される前に必要な初期化に適しています。 __constructメソッドは、クラスで実行される最初のメソッドです。

    class Test
    {
      function __construct($value1,$value2)
      {
         echo "Inside Construct";
         echo $this->value1;
         echo $this->value2;
      }
    }

//
  $testObject  =  new Test('abc','123');
5
yasir kk

関数__construct () {...}は、TheActualFunctionName () {...}の代わりに何度も再利用できるコードの一部であると考えています。クラス名を変更する場合、汎用__constructは常に実際のクラス名を参照するため、コード内で変更する必要はありません。コーディングを減らす...または?

3
walter

注:子クラスがコンストラクターを定義している場合、親コンストラクターは暗黙的に呼び出されません。親コンストラクターを実行するには、子コンストラクター内でparent::__construct()を呼び出す必要があります。子がコンストラクタを定義しない場合、通常のクラスメソッドのように親クラスから継承されます(プライベートとして宣言されていない場合)。

3
Vignesh

__constructは、新しいオブジェクトを使用する前に初期化するためのメソッドです。
http://php.net/manual/en/language.oop5.decon.php#object.construct

3
Seyedan

__constructは単にクラスを開始します。次のコードがあるとします。

Class Person { 

 function __construct() {
   echo 'Hello';
  }

}

$person = new Person();

//the result 'Hello' will be shown.

Word 'Hello'をエコーする別の関数は作成しませんでした。キーワード__constructがクラスまたはオブジェクトを開始するのに非常に役立つことを単に示しています。

0
Harris