コンストラクターで複数の値を渡す必要があり、毎回渡される値の数が固定されない可能性があるため、コードは次のようになります。渡さない場合、スイートポテトコンストラクターのデフォルト値が設定されます。以下では、配列を implode で文字列に分割し、「,」で接続しています。結果は、なぜ $host 変数に転送されるのでしょうか? :192.168.1.1,1212
port:80
また、つまり、ポストは $host に渡されますが、ポートはデフォルトの
class test{ public function __construct($host="127.0.0.1",$port="80") { echo 'host:'.$host."<br>"; echo 'port:'.$port; }}$data['host']='192.168.1.1';$data['port']='1212';$str=implode(',',$data);$obj=new test($str);
host:192.168.1.1,1212port:80
$str はただの変数ですが、どうすればプログラムが自動的に 2 つとして理解できます
class test{ public function __construct($host="127.0.0.1",$port="80") { echo 'host:'.$host."<br>"; echo 'port:'.$port; } }$data['host']='192.168.1.1';$data['port']='1212';$ref = new ReflectionClass('test');$obj = $ref->newInstanceArgs($data);
port:1212
<?phpclass test{ public static function new_object($data = array()) { switch(count($data)) { case 2: return new self($data['host'], $data['port']); case 1: return new self($data['host']); default: return new self(); } } public function __construct($host="127.0.0.1",$port="80") { echo 'host:'.$host."<br>"; echo 'port:'.$port; } } $data['host']='192.168.1.1';$data['port']='1212';//$str=implode(',',$data);//$obj=new test($str);$obj = test::new_object($data);
port:1212
$ref = new ReflectionClass('test'); と記述するには、クラスのデフォルト 80 を使用する必要があります。
$ obj = $ref->newInstanceArgs($data);