W pracy programisty czasem zdarzają się sytuacje, kiedy pomyłka nie wynika z niewiedzy ani braku doświadczenia osoby piszącej, ale zwykłego zagapienia się i postawienia “innego znaczka” w miejsce tego poprawnego. Tego typu błędy potrafią być bardzo uciążliwe, ponieważ wydaje nam się, że napisaliśmy wszystko poprawnie i bezskutecznie szukamy błędu wpatrując się w kilka linijek, które po prostu “muszą działać”. W dzisiejszym wpisie chciałbym przedstawić problem, który może utrudnić pracę, szczególnie, jeśli jesteśmy już zmęczeni i nie dostrzegamy wszystkich szczegółów na ekranie.

Błąd: Can’t use function return value in write context.

Weźmy pod uwagę poniższy kod:

<?php
if(true == empty($_POST('input')))
	{
	echo 'empty';
	}
else
	{
	echo 'full';
	}

Na pierwszy rzut oka nie widać błędu - szybkie skanowanie powoduje, że widzimy jedynie prosty warunek i dwie instrukcje echo. Wprawne oko zapewne zauważy, o co chodzi, ale w moim przypadku minęło dobrych kilkanaście sekund, zanim zauważyłem źródło problemu. Powyższy kod spowoduje wyrzucenie na ekran błędu:

Fatal error: Can’t use function return value in write context in [path]/write_context.php on line [line]
O co chodzi? W linijce nr 2 odczytanie indeksu “input” z tablicy $_POST odbywa się przy użyciu nawiasów okrągłych, które oczywiście nie są tutaj “stosowne”. Poniżej zamieszczony został poprawny kod z zaznaczoną “błędną” linijką:

[code lang=“php” highlight=“2”] <?php if(true == empty($_POST[‘input’])) { echo ‘empty’; } else { echo ‘full’; } ```

Niniejszy wpis sponsoruje kilkanaście minut wpatrywania się tępym wzrokiem w ekran kilka tygodni temu. Pomimo tego, że błąd jest stosunkowo prosty, to chcę najzwyczajniej w świecie przypomnieć o jego istnieniu i zachęcić do wolniejszego pisania kodu, szczególnie, kiedy jesteśmy zmęczeni. ;]