refactor three level indentation

 avatar
decayingMind
php
2 years ago
1.7 kB
6
Indexable
<?php 
// Three levels of indentation
class BankAccounts {
    protected $accounts;

    function __construct($accounts)
    {
        $this->accounts = $accounts;
    }
    // refactoring 3 levels of indentation
    // public function filterBY($accountType)
    // {
    //     $filtered = [];
    //     
    //     foreach ($this->accounts as $key => $account) {
    //         
    //         if ($account->type() == $accountType) 
    //         {   
    //             if ($account->isActive())
    //             {   
    //                 $filtered[] = $account;
    //             }
    //         }
    //     }

    //     return $filtered;
    // }

    public function filterBY($accountType) : array {

        return array_filter($this->accounts, function ($account) use($accountType) {

            return $this->isOfType($accountType, $account);

        });

    }

    private function isOfType($accountType, $account) {
        return $account->type() == $accountType && $account->isActive();
    }
}

class Account {
    protected $type;

    function __construct($type)
    {
        $this->type = $type;
    }

    public static function open($type)
    {
        return new static($type);
    }

    public function type()
    {
        return $this->type;
    }
    
    public function isActive()
    {
        return true;
    }
}

$accounts = [
    Account::open('checking'),
    Account::open('savings'),
    Account::open('checking'),
    Account::open('savings')
];

$bankAccounts = new BankAccounts($accounts);

$savings = $bankAccounts->filterBY('savings');

print_r($savings);
Editor is loading...