This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

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:
1
2
3
4
5
6
7
8
9
<?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”]

wolniejszego pisania kodu, szczególnie, kiedy jesteśmy zmęczeni. ;]