如何传递特定的可选参数?
How do I pass specific optional arguments?
我有2个案例。
- 案例 1:传递
name
和 age
。
- 情况 2:传递
name
和 gender
。
我该怎么做?
class User {
function __construct($name=NULL, $gender=NULL, $age=NULL) {
...
}
}
// How do I pass specific arguments here?
$case_1 = new User("Bob", 34);
$case_2 = new User("James", "m");
您可以在 PHP 中使用可选参数,但不能使用 either/or 个参数,因为这需要 PHP 不支持的函数重载。鉴于您的示例,您必须按如下方式调用构造函数:
// How do I pass specific arguments here?
$case_1 = new User("Bob", null, 34);
$case_2 = new User("James", "m");
如果要消除可选但必须为 null 的参数,您将需要变得聪明。
选项一:使用工厂。这将需要一个通用的参数构造函数,并结合每个唯一参数的增变器方法。
class UserFactory {
public static function createWithGender($name, $gender)
{
$user = new User($name);
$user->setGender($gender);
return $user;
}
public static function createWithAge($name, $age)
{
$user = new User($name);
$user->setAge($age);
return $user;
}
}
$case_1 = UserFactory::createWithAge("Bob", 34);
$case_2 = UserFactory::createWithGender("James", "m");
工厂不需要是一个单独的 class,如果需要,您也可以将静态初始值设定项添加到用户 class。
class User {
function __construct($name = null)
{
...
}
public static function createWithGender($name, $gender)
{
$user = new static($name);
$user->setGender($gender);
return $user;
}
public static function createWithAge($name, $age)
{
$user = new static($name);
$user->setAge($age);
return $user;
}
}
$case_1 = User::createWithAge("Bob", 34);
$case_2 = User::createWithGender("James", "m");
选项二:进行一些参数检测。这仅在参数都是唯一类型时才有效。
class User {
public function __construct($name, $second = null) {
if (is_int($second)) {
$this->age = $second;
} else {
$this->gender = $second;
}
}
}
$case_1 = new User("Bob", 34);
$case_2 = new User("James", "m");
我有2个案例。
- 案例 1:传递
name
和age
。 - 情况 2:传递
name
和gender
。
我该怎么做?
class User {
function __construct($name=NULL, $gender=NULL, $age=NULL) {
...
}
}
// How do I pass specific arguments here?
$case_1 = new User("Bob", 34);
$case_2 = new User("James", "m");
您可以在 PHP 中使用可选参数,但不能使用 either/or 个参数,因为这需要 PHP 不支持的函数重载。鉴于您的示例,您必须按如下方式调用构造函数:
// How do I pass specific arguments here?
$case_1 = new User("Bob", null, 34);
$case_2 = new User("James", "m");
如果要消除可选但必须为 null 的参数,您将需要变得聪明。
选项一:使用工厂。这将需要一个通用的参数构造函数,并结合每个唯一参数的增变器方法。
class UserFactory {
public static function createWithGender($name, $gender)
{
$user = new User($name);
$user->setGender($gender);
return $user;
}
public static function createWithAge($name, $age)
{
$user = new User($name);
$user->setAge($age);
return $user;
}
}
$case_1 = UserFactory::createWithAge("Bob", 34);
$case_2 = UserFactory::createWithGender("James", "m");
工厂不需要是一个单独的 class,如果需要,您也可以将静态初始值设定项添加到用户 class。
class User {
function __construct($name = null)
{
...
}
public static function createWithGender($name, $gender)
{
$user = new static($name);
$user->setGender($gender);
return $user;
}
public static function createWithAge($name, $age)
{
$user = new static($name);
$user->setAge($age);
return $user;
}
}
$case_1 = User::createWithAge("Bob", 34);
$case_2 = User::createWithGender("James", "m");
选项二:进行一些参数检测。这仅在参数都是唯一类型时才有效。
class User {
public function __construct($name, $second = null) {
if (is_int($second)) {
$this->age = $second;
} else {
$this->gender = $second;
}
}
}
$case_1 = new User("Bob", 34);
$case_2 = new User("James", "m");