gpt4 book ai didi

php - 是否可以在 PHP 中链式重载构造函数?

转载 作者:可可西里 更新时间:2023-10-31 22:14:28 25 4
gpt4 key购买 nike

这是一个虚构的例子,当有很多参数时它会变得更有用。

这会让调用者使用 new Person("Jim", 1950, 10, 2)new Person("Jim", datetimeobj)。我知道可选参数,这不是我在这里寻找的。

在 C# 中我可以这样做:

public Person(string name, int birthyear, int birthmonth, int birthday)
:this(name, new DateTime(birthyear, birthmonth, birthday)){ }

public Person(string name, DateTime birthdate)
{
this.name = name;
this.birthdate = birthdate;
}

我可以在 PHP 中做类似的事情吗?像这样的东西:

function __construct($name, $birthyear, $birthmonth, $birthday)
{
$date = new DateTime("{$birthyear}\\{$birthmonth}\\{$birthyear}");
__construct($name, $date);
}

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

如果这不可能,什么是好的替代方案?

最佳答案

为此,我将使用命名/替代构造函数/工厂或您想要调用它们的任何其他名称:

class Foo {

...

public function __construct($foo, DateTime $bar) {
...
}

public static function fromYmd($foo, $year, $month, $day) {
return new self($foo, new DateTime("$year-$month-$day"));
}

}

$foo1 = new Foo('foo', $dateTimeObject);
$foo2 = Foo::fromYmd('foo', 2012, 2, 25);

应该有一个规范的构造函数,但您可以有尽可能多的替代构造函数作为方便的包装器,它们都引用回规范的构造函数。或者,您可以在这些替代构造函数中设置您通常不会在常规构造函数中设置的替代值:

class Foo {

protected $bar = 'default';

public static function withBar($bar) {
$foo = new self;
$foo->bar = $bar;
return $foo;
}

}

关于php - 是否可以在 PHP 中链式重载构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com