php로 일등석 모음집 만들기

개요


php로 일등석 소장품을 만들고 싶어도 배열 내용의 유형은 언어 규범에 얽매이지 않는다.
가변 길이 변수를 사용하면 foreach에서 배열 내용을 일일이 확인할 필요가 없다.
다음은 Account류의 제1종 수집Accounts의 실현을 예로 들 수 있다.

모드 1: 구조기의 매개 변수를 가변 길이 변수로 설정하여 유형을 제시합니다


왜냐면 Aray에서 쉽게 만들 수 있으니까fromArray 방법도 만들어지고 있고요.
class Accounts
{
    /** @var Account[]  */
    private array $accounts;

    public function __construct(Account ...$accounts)
    {
        $this->accounts = $accounts;
    }

    static public function fromArray(array $accounts): self
    {
        return new self(...$accounts);
    }

    public function add(Account $account): self
    {
        return new self(...array_merge($this->accounts, [$account]));
    }
}
$account1 = new Account('ichiro');
$account2 = new Account('jiro');
$account3 = new Account('saburo');

$accounts = new Accounts($account1, $account2, $account3);
// もしくは
$accounts = Accounts::fromArray([$account1, $account2, $account3]);

모드2: 가변 길이 변수를 매개 변수로 하는privvate 방법을 정의하고 이 방법을 통해 값을 설정합니다


class Accounts
{
    /** @var Account[]  */
    private array $accounts;

    public function __construct(array $accounts)
    {
        $this->setValue(...$accounts);
    }

    private function setValue(Account ...$accounts): self
    {
        $this->accounts = $accounts;
    }

    public function add(Account $account): self
    {
        return new self(array_merge($this->accounts, [$account]));
    }
}
$account1 = new Account('ichiro');
$account2 = new Account('jiro');
$account3 = new Account('saburo');

$accounts = new Accounts([$account1, $account2, $account3]);

모드 3: 가변 길이 변수를 매개 변수로 하는 무명 함수를 정의하고 이 함수를 통해 값을 설정합니다


비록 방법은 두 번째 모델과 같지만 구조기 안에서 간결하기 때문에 나는 개인적으로 비교적 좋아한다
class Accounts
{
    /** @var Account[]  */
    private array $accounts;

    public function __construct(array $accounts)
    {
        $set_value = function (Account ...$accounts) {
            $this->accounts = $accounts;
        };
        $set_value(...$accounts);
    }

    public function add(Account $account): self
    {
        return new self(array_merge($this->accounts, [$account]));
    }
}
$account1 = new Account('ichiro');
$account2 = new Account('jiro');
$account3 = new Account('saburo');

$accounts = new Accounts([$account1, $account2, $account3]);

좋은 웹페이지 즐겨찾기