PHPで複数のコンストラクタを設定する

PHPでは複数のコンストラクタを、例えば引数の数に応じて使い分けるということができません。(´ω`)

下記みたいにやりたいじゃないですか。

<?php
class A
{
   function __construct()
    {
    }
   
    function __construct($a1)
    {
        echo('引数が1個のコンストラクタ');
    }
   
    function __construct($a1,$a2)
    {
        echo('引数が2個のコンストラクタ');
    }
   
}


でもできません。(´ω`)

「そんなの不便じゃーん」

もちろんそうですが、ググっても「できません」とかあまりいいやり方出てこなかったので、下記のPHP本家サイトに載っているコードですが、再掲させて頂きます。

https://www.php.net/manual/ja/language.oop5.decon.php

みんな!PHPの本家マニュアルサイトで大事なのは、下の方にある、

User Contributed Notes

だよ!ここ読むと、いいこと書いてあるので読み得です。
英語なのが玉にキズ。(´ω`)

<?php
class A
{
  //要はコンストラクタを使って、引数の数でメソッド振り分けしている
    function __construct()
    {
        $a = func_get_args();
        $i = func_num_args();
        if (method_exists($this,$f='__construct'.$i)) {
            call_user_func_array(array($this,$f),$a);
        }
    }
   
    function __construct1($a1)
    {
        echo('__construct with 1 param called: '.$a1.PHP_EOL);
    }
   
    function __construct2($a1,$a2)
    {
        echo('__construct with 2 params called: '.$a1.','.$a2.PHP_EOL);
    }
   
    function __construct3($a1,$a2,$a3)
    {
        echo('__construct with 3 params called: '.$a1.','.$a2.','.$a3.PHP_EOL);
    }
}
$o = new A('sheep');
$o = new A('sheep','cat');
$o = new A('sheep','cat','dog');

// results:
// __construct with 1 param called: sheep
// __construct with 2 params called: sheep,cat
// __construct with 3 params called: sheep,cat,dog
?>
カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です