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

Rozwój języka PHP był, a właściwie cały czas jest, dosyć ciekawym “procesem technologicznym”, w trakcie którego powstało wiele funkcjonalności, o których statystyczny programista tego języka praktycznie nie wie. Nie są to aż tak kluczowe dla naszej pracy rzeczy, aczkolwiek czasem mogą pomóc w zaprojektowaniu bardzo interesujących rozwiązań, niemożliwych do realizacji w innych językach programowania. W dzisiejszym wpisie chciałbym przedstawić jedną z takich możliwości - zwracanie wartości z… pliku.

Wstęp: zwracanie wartości.

Zwracanie wartości nam, programistom, kojarzy się głównie z funkcjami i metodami, poprzez które możemy istotnie zwiększyć "reużywalność" tworzonego kodu:
1
2
3
4
function foo($arg)
	{
	return $arg;
	}

Co bardziej świadomi wspomną jeszcze o wyrażeniach, które także “zwracają wartości”, pomimo tego, że nie jest to aż tak widoczne “gołym okiem”:

1
2
3
$val = (true == $test)
	? true
	: false;

No dobrze - na pewno napiszecie w komentarzach, że to proste, ale zwracanie wartości z pliku? Jak miałoby się to odbywać?

PHP: Zwracanie wartości z pliku.

Bardzo prosto. ;] Rozważmy prosty skrypt [that_first_file.php]:
1
2
<?php
return 42;

I drugi, wcale nie trudniejszy [second_file.php]:

1
2
<?php
var_dump(include('that_first_file.php'));

Jaki będzie wynik? Dokładnie taki:

1
int(42)

Dziwne? Jak mówi manual PHP:

Furthermore, if the current script file was include()ed, then the value given to return() will be returned as the value of the include() call. If return() is called from within the main script file, then script execution ends

Oznacza to, że możemy robić mniej więcej takie sztuczki jak:

1
2
3
4
5
6
7
<?php
$arr = array();
$arr['one'] = 'two';
$arr[3] = 5;
return $arr;

// array(2) { ["one"]=> string(3) "two" [3]=> int(5) }
1
2
3
4
<?php
return new XMLReader();

// object(XMLReader)#1 (0) { }

I wiele innych.

Ciekawe? Jak najbardziej. Przydatne? W dobrze zaprojektowanych aplikacjach pewnie nie bardzo, aczkolwiek zawsze warto mieć na uwadze, że jest taka możliwość. Może to np. posłużyć do dynamicznego generowania skryptów i odczytywania ich wartości wynikowych.

Jeśli znacie jakiś inny sposób wykorzystania tej konstrukcji albo macie doświadczenie w faktycznym wykorzystaniu zwracania wartości z pliku - podzielcie się nimi w komentarzach! Dziękuję za lekturę i do zobaczenia w niedzielę. ;]