Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Jak utworzyć funkcję z { }
Forum PHP.pl > Forum > Przedszkole
colargol
Chciałbym utworzyć funkcję 'loop', aby można ją było użyć w kodzie z { }:

(taką zmodyfikowaną wersję "for(){ }")

loop($x=0;$x<=5){
echo $x.'.';
//do something
}

Która w tym przypadku wyświetli: 0.1.2.3.4.5.

"Loop" to jest tylko przykładowa funkcja, chciałbym się dowiedzieć jak się tworzy tego typu funkcje.

Jak to zrobić?
wookieb
W systemie szablonow?
W php nie zrobisz tak o. Chyba ze zmodyfikujesz kod całego php.
A po co ci to?
colargol
Cytat(wookieb @ 16.03.2009, 01:04:15 ) *
A po co ci to?


Np. bardzo często używam konstrukcji:
Kod
   for($x=0;$x<count($abc);$x++){ }

i mógłbym zamienić ją na choćby:
Kod
   loop($x;$abc){ }


jak dla mnie szybsze w pisaniu i bardziej przejrzyste
wookieb
Nie da się.
zelu
Mozesz napisac wlasna funkcje loop, ktora robi to co chcesz na podstawie okreslonych przez Ciebie danych, pozniej zapisac ja w osobnym pliku. Potem w skrypcie, w ktorym chcesz go uzyc dajesz na poczatku include('plik.php'); i uzywasz tej funkcji jak kazdej innej PHPowej


pozdro
decha-design
Cytat(wookieb @ 16.03.2009, 08:22:12 ) *
Nie da się.


A niby dlaczego? Co za problem do funkcji dać pętle for, i później jej wynik zwrócić w returnie? o.O'
wookieb
Cytat(decha-design @ 16.03.2009, 09:43:48 ) *
A niby dlaczego? Co za problem do funkcji dać pętle for, i później jej wynik zwrócić w returnie? o.O'

A czy ty nie widzisz, że on chce stworzyć nie o tyle co funkcje tylko nową składnię pętli?
decha-design
No tak, racja ... tego nie nie można ...
Mephistofeles
Co do samej pętli - daj liczenie poza pętlę, będzie sporo szybciej przy większej ilości iteracji winksmiley.jpg.
ucho
Dlaczego po prostu nie użyć foreach?
dr_bonzo
Jak wyzej, po prostu foreach, i w php nie da sie przekazywac blokow kodu jako parametru.
Mephistofeles
Foreach jest wolniejsze. Co do bloków kodu - można użyć eval, ale dla mnie to będzie raczej utrudnianie niż ułatwianie sobie życia.
dr_bonzo
Cytat(Mephistofeles @ 16.03.2009, 12:50:34 ) *
Foreach jest wolniejsze.


To zes wymyslil, odpal sobie

  1. <pre><?php
  2.  
  3. $a = range( 0, 100000 );
  4. $s1 = microtime(true);
  5. foreach ( $a as $x )
  6. {
  7.    echo $x . " ";
  8. }
  9. $e1 = microtime(true);
  10.  
  11.  
  12.  
  13. $s2 = microtime(true);
  14. for( $i = 0; $i < count($a); $i++)
  15. {
  16.    echo $a[$i] . " ";
  17. }
  18. $e2 = microtime(true);
  19.  
  20. print('<hr />');
  21. printf('foreach: %.4f<br />', ($e1-$s1) );
  22. printf('for    : %.4f<br />', ($e2-$s2) );
  23. ?>
Mephistofeles
Nie wymyśliłem - tak przeczytałem na jakiejś stronie, jak znajdę to ci pokażę. Poza tym miałem na myśli liczenie elementów tablicy przed pętlą, co ją trochę przyspieszy.
Edit: No dobra, sprawdzałem, chyba masz rację, ja tylko pisałem co czytałem winksmiley.jpg.
Sytuacja natomiast się odwraca gdy foreacha robisz z kluczem, wtedy jest o 10 ms wolniejszy u mnie.
Edit2: A jednak! Wiedziałem, że o czymś zapomniałem biggrin.gif. Trzeba ++ dać przed zmienną, wtedy PHP nie tworzy tymczasowej zmiennej na wartość przed inkrementacją.
Wyniki:
foreach: 0.0612
for ++ : 0.0605
++ for : 0.0500
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.