Jak poprawnie umieścic tablice?

0

Witam,

Musze wygenerowac raport sprzedazy format CSV. Mam jakies tak nagłówki kolumm. I teraz zastanawiam się gdzie zapisać stałą tablice tych nagłówkę?

Opcja 1:

const HEADERS = [
    'Column 1',
    'Column 2',
    'Column 3',
    'Column 4',
    'Column 5',
    'Column 6',
    'Column 7',
    'Column 8',
];

**
Opcja 2:**

public function getHeaders()
{
    return [
      'Column 1',
      'Column 2',
      'Column 3',
      'Column 4',
      'Column 5',
      'Column 6',
      'Column 7',
      'Column 8',
    ];
}

Opcja 3:

static protected $headers = [
    'Column 1',
    'Column 2',
    'Column 3',
    'Column 4',
    'Column 5',
    'Column 6',
    'Column 7',
    'Column 8',
];

Która opcja jest najlepsza i dlaczego?

0

Na pewno odrzuciłbym opcję 3, z tej racji, że wartość nie jest stała i można ją nadpisać.

Odnośnie opcji 1 vs. 2, to zdaje mnie się, że główną różnicą jest kwestia dziedziczenia, tzn. jeżeli będziesz chciał dziedziczyć po tej klasie i będziesz odwoływał się do tej tablicy - w opcji 2, $this->getHeaders() zawsze będzie wołać przeładowaną funkcję, natomiast self::HEADERS będzie odwoływać się do wartości stałej z klasy bazowej - jeżeli chcesz dostać przeładowaną wersję, musisz stosować static::HEADERS.

0

Klasa nie bedzie dziedziczona. Klasa tylko generuje CSV i tylke. Ale chodzi mi o wydajność. Wydaje mi się, że opcja 2 jest lepsza. Kiedyś czytałem coś, ze te const to wcale nie są takie dobre. Ale kurła nie wiem.

0

Przeglądałem trochę dokumentację PHP przed udzieleniem odpowiedzi i o ile dobrze rozumiem temat, w PHP wszystkie wartości są copy-on-write, więc same operacje na tablicy powinny iść tak samo szybko w opcji 1 oraz opcji 2. Skoro mówimy o wydajności, to spodziewałbym się jednak, że opcja 2 może być wolniejsza z powodu narzutu związanego z wywołaniem funkcji.

2

ja stosuje opcje 2

2

@mr_jaro: yep, też z tego korzystam, przydaje się, bo można np szybko podmienić wersję językowa albo robić inne czary mary.

0

Spoko, dzieki. Zostaje przy 2. Tak miałem. Super.

1 użytkowników online, w tym zalogowanych: 0, gości: 1