208

__construct授業で気づいたことはたくさんあります。ちょっと読んだりネットサーフィンしたりしましたが、納得できる説明が見つかりませんでした。私はOOPを始めたばかりです。

誰かがそれが何であるかについての一般的な考えを私に教えてくれるかどうか疑問に思っていました.PHPでどのように使用されるかの簡単な例はありますか?

4

15 に答える 15

307

__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 マニュアルで説明されています:ここをクリック

于 2009-01-18T21:28:26.507 に答える
52

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

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 はコンストラクターのオーバーロード (つまり、異なるパラメーターを受け入れる複数のコンストラクターを持つこと) をサポートしていません。この効果は、静的メソッドを使用して実現できます。

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

于 2009-01-18T22:08:03.120 に答える
18

コンストラクターを宣言する別の方法です。クラス名を使用することもできます。例:

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

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

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

$cat = new Cat();
于 2009-01-18T21:27:57.007 に答える
16

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

class_cat.php

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

somepage.php

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

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

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

于 2011-05-22T16:51:19.590 に答える
12

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

于 2014-08-24T17:00:46.693 に答える
10

私はこの助けを願っています:

<?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にアクセスする必要があります。

于 2016-05-03T13:34:17.233 に答える
7
class Person{
 private $fname;
 private $lname;

 public function __construct($fname,$lname){
  $this->fname = $fname;
  $this->lname = $lname;
 }
}
$objPerson1 = new Person('john','smith');
于 2012-04-09T19:42:16.407 に答える
5

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

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

//
  $testObject  =  new Test('abc','123');
于 2017-02-07T10:38:58.320 に答える
3

function__construct () {...}は、 の代わりに何度でも再利用できるコードだと思いますTheActualFunctionName () {...}。クラス名を変更する場合、コード内で変更する必要はありません。ジェネリック __construct は常に実際のクラス名を参照するためです...それが何であれ。あなたはより少ないコード...または?

于 2011-04-12T21:25:37.690 に答える
3

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

于 2015-11-18T09:34:45.827 に答える
0

最初にメソッドを使用せずに説明させてください__construct()...知っておくべきことの1つ__construct()は、それが組み込み関数であることです.PHPではメソッドと呼びましょう。print_r()手続き型の場合と同様に、は__construct()OOP 用に組み込まれています。

そうは言っても、 と呼ばれるこの関数を使用する理由を調べてみましょう__construct()

  /*=======Class without __construct()========*/
  class ThaddLawItSolution
   {
      public $description;
      public $url;
      public $ourServices;

      /*===Let us initialize a value to our property via the method set_name()==== */
     public function setName($anything,$anythingYouChoose,$anythingAgainYouChoose)
     {
      $this->description=$anything;
      $this->url=$anythingYouChoose;
      $this->ourServices=$anythingAgainYouChoose;
    }
    /*===Let us now display it on our browser peacefully without stress===*/
    public function displayOnBrowser()
    {
       echo "$this->description is a technological company in Nigeria and our domain name is actually $this->url.Please contact us today for our services:$this->ourServices";
    }
 
 }

         //Creating an object of the class ThaddLawItSolution
$project=new ThaddLawItSolution;
        //=======Assigning Values to those properties via the method created====//
$project->setName("Thaddlaw IT Solution", "https://www.thaddlaw.com", "Please view our website");
      //===========Let us now display it on the browser=======
$project->displayOnBrowser();

__construct()そのメソッドを使用してこれらのプロパティに値を割り当てるのにかかった時間を想像してみてください。上記のコードから、最初にオブジェクトを作成し、2 番目のプロパティに値を割り当ててから、最終的にブラウザに表示します。ただし__construct()、オブジェクトの作成中に使用$project= new ThaddLawItSolution;すると、つまり、オブジェクトの作成中にそのメソッドに値を割り当てるために行ったことをすぐに実行できます。つまり、

$project=new ThaddLawItSolution("Thaddlaw IT Solution", "https://www.thaddlaw.com","Please view our website");

//===__constructor===== を使ってみましょう

呼び出されたメソッドを削除して配置するだけでsetName__construct();オブジェクトを作成するときに値を一度に割り当てることができます。__construct()それがメソッド全体の背後にあるポイントです。ただし、これは組み込みのメソッドまたは関数であることに注意してください

于 2021-07-06T14:20:39.500 に答える