Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP 5.6.0 alpha1
Forum PHP.pl > Wortal > Newsy
tomxx
Kilka dni temu PHP udostępniło publicznie wersję testową PHP 5.6.0alpha1.

wersja do pobrania -> kliknij
dokumentacja -> kliknij

Wersja ta na razie jest tylko testowa i nie powinna być używana do celów produkcyjnych.
Poniżej przedstawiono kilka nowych funkcjonalności, jakie zaproponowali twórcy.

Stałe

PHP 5.6 udostępnia dostarczenie wartości stałej z użyciem operatorów, co wcześniej powodowało błąd. Przykład:
  1. <?php
  2. const LICZBA = 3;
  3. const TEKST = LICZBA." tekst";
  4. const WYRAŻENIE = (2*3)." tekst";
  5.  
  6. echo LICZBA, "<br>";
  7. echo TEKST, "<br>";
  8. echo WYRAŻENIE, "<br>";
  9. ?>

Powyższy przykład wyświetli:
3
3 tekst
6 tekst


Zmienna liczba argumentów funkcji

Za pomocą nowego operatora ... funkcje mogą przyjmować więcej argumentów, niż zostało podane przy ich definiowaniu. Operatora ... można użyć tylko przy ostatnim argumencie danej funkcji. W tej sytuacji ostatni argument będzie traktowany jak tablica. Przykład:
  1. <?php
  2. function f($a, ...$b)
  3. {
  4. echo "<br>Pierwszy argument: $a, pozostałe argumenty: ";
  5. foreach($b as $argument)
  6. {
  7. echo "$argument, ";
  8. }
  9. }
  10.  
  11. f(1, 2);
  12. f(1, 2, 3);
  13. f(1, 2, 3, 4, 5);
  14. ?>

Powyższy przykład wyświetli:
Pierwszy argument: 1, pozostałe argumenty: 2
Pierwszy argument: 1, pozostałe argumenty: 2 3
Pierwszy argument: 1, pozostałe argumenty: 2 3 4 5


Przekazywanie argumentów funkcji w tablicy

W PHP 5.6 za pomocą operatora ... będzie także można przekazywać argumenty dla funkcji w formie tablicy. W takim wypadku operator ten należy jednak wstawić przez zmienną z tablicą w momencie wywoływania funkcji. Przykład użycia:
  1. <?php
  2. function suma($a, $b, $c, $d)
  3. {
  4. echo $a+$b+$c+$d;
  5. }
  6.  
  7. $argumenty = [3, 4];
  8.  
  9. suma(1, ...$argumenty, 5); #Wyświetli 13 (1+3+4+5)
  10. ?>

Nowe funkcje

- gmp_root()
- gmp_rootren()
- ldap_escape()
- oci_get_implicit_resultset
- openssl_x509_fingerprint()
- ZipArchive::setPassword()
- ponadto crypt() musi obowiązkowo przyjmować drugi argument

Cała wersja jest oczywiście testowa, nie jest zalecane jej używanie na co dzień. Służy jedynie do przetestowania nowych funkcjonalności, jakie być może pojawią się w oficjalnym wydaniu wersji 5.6.0. Powyższy opis przedstawia tylko najważniejsze nowości, całość można znaleźć w dokumentacji.
!*!
Nic szczególnego, można to podsumować krótko:
Cytat
...
tomxx
Nowa alpha ma być 6 lutego, więc może będą jakieś nowe istotniejsze zmiany, bo na razie rzeczywiście szału nie ma. Z tym, że w oficjalnym wydaniu pojawi się też trochę nowości, więc na razie trzeba czekać.
buliq
Dla niektórych nic szczególnego, ja stwierdzam że całkiem dobre podejście do stałych, z tym wielokropkiem trochę przesada, zrobi się pie*dolnik, zamiast tego można by spokojnie wprowadzić przeciążenia...
sowiq
Już sobie wyobrażam to debugowanie i zastanawianie się przez 3 godziny dlaczego parametry się nie zgadzają facepalmxd.gif
  1. function suma($a, $b, $c, $d)
  2. {
  3. echo $a + $b + $c + $d;
  4. }
  5.  
  6. $argumenty = [3, 4];
  7. suma(1, ...$argumenty, 5);


Ciekawe co się stanie w takim przypadku:
  1. $argumenty = [3, 4, 5, 6];
  2. suma(1, ...$argumenty, 7);


Albo w jeszcze ciekawszym:
  1. function suma2($a, $b, $c, ...$d)
  2. {
  3. echo $a + $b + $c + $d;
  4. }
  5. $argumenty = [3, 4, 5, 6];
  6. suma2(1, ...$argumenty, 7);


Ode mnie +1 dla przeciążeń.
Tuminure
  1. suma2(1, ...$argumenty, 7);


Może od razu:
  1. suma2(...$argumenty, ...$argumenty, ...$argumenty);
Spawnm
... to totalna porażka -__-
!*!
Cytat(Spawnm @ 30.01.2014, 11:28:48 ) *
... to totalna porażka -__-

To dopiero alpha. W wersji beta "..." zamienią na ",,," ponieważ komuś z "dev teamu" kropka będzie się kojarzyła z łącznikiem np. zmiennych i nie będzie chciał wywoływać w ten sposób zamieszania. W wersji końcowej przecinki zamienią na coś głupszego np. @@@, *** lub !*! biggrin.gif

  1. suma2(1, !*!$argumenty, 7);
buliq
Cytat(sowiq @ 30.01.2014, 10:28:03 ) *
...
Ciekawe co się stanie w takim przypadku:
  1. $argumenty = [3, 4, 5, 6];
  2. suma(1, ...$argumenty, 7);

...


Funkcja weźmie pierwsze 4 parametry?

Cytat(sowiq @ 30.01.2014, 10:28:03 ) *
...
Albo w jeszcze ciekawszym:
  1. function suma2($a, $b, $c, ...$d)
  2. {
  3. echo $a + $b + $c + $d;
  4. }
  5. $argumenty = [3, 4, 5, 6];
  6. suma2(1, ...$argumenty, 7);

...


Ty wywali błąd bo $d to tablica.

@up dobre!
mar1aczi
Ten trzykropek to (jest/będzie) trzy razy naciskany klawisz ze znakiem kropki, czy może klawisz kropki naciskany z przytrzymanym prawym altem (jak w Wordzie) biggrin.gif
tomxx
Cytat(sowiq @ 30.01.2014, 10:28:03 ) *
Ciekawe co się stanie w takim przypadku:
  1. $argumenty = [3, 4, 5, 6];
  2. suma(1, ...$argumenty, 7);
W takim przypadku do funkcji zostaną przyjęte argumenty: 1, 3, 4, 5.
Cytat(sowiq @ 30.01.2014, 10:28:03 ) *
Albo w jeszcze ciekawszym:
  1. function suma2($a, $b, $c, ...$d)
  2. {
  3. echo $a + $b + $c + $d;
  4. }
  5. $argumenty = [3, 4, 5, 6];
  6. suma2(1, ...$argumenty, 7);
A tutaj to chyba już nie przeczytałeś do końca mojego pierwszego postu, bo napisałem, że w takim wypadku $d będzie tablicą. Ewentualnie zamiast $d można użyć array_sum($d).
Cytat
To dopiero alpha. W wersji beta "..." zamienią na ",,," ponieważ komuś z "dev teamu" kropka będzie się kojarzyła z łącznikiem np. zmiennych i nie będzie chciał wywoływać w ten sposób zamieszania. W wersji końcowej przecinki zamienią na coś głupszego np. @@@, *** lub !*!
Już nie nabijaj się z tych mądrych deweloperów, którzy po nocach siedzą nad nowymi, bardzo dobrymi wersjami tego języka...
buliq
Każdy ma prawo do własnej oceny czy zmiany są okej czy nie, a wielokropek w tym wypadku w opinii wielu developerów okaże się błędem ze strony Zend'a
!*!
Cytat(buliq @ 30.01.2014, 12:06:52 ) *
Każdy ma prawo do własnej oceny czy zmiany są okej czy nie, a wielokropek w tym wypadku w opinii wielu developerów okaże się błędem ze strony Zend'a

Tylko, że niewiele to zmieni. To idealnie pasuje do dyskusji o przestrzeni nazw, wtedy też był raban jaki znak użyć i dlaczego "\" jako łącznik jest złe.
sowiq
No tak, logiczne. Biorąc pod uwagę, że:
  1. $argumenty = [3, 4, 5, 6];
  2. suma2(1, ...$argumenty, 7);


Zostanie rozwinięte do:
  1. $argumenty = [3, 4, 5, 6];
  2. suma2(1, 3, 4, 5, 6, 7);


To wszystko staje się proste wink.gif
buliq
Cytat(!*! @ 30.01.2014, 12:14:17 ) *
Tylko, że niewiele to zmieni. To idealnie pasuje do dyskusji o przestrzeni nazw, wtedy też był raban jaki znak użyć i dlaczego "\" jako łącznik jest złe.

Po co kłócić się o operator ... skoro to funkcjonalność jest lekko upośledzona? biggrin.gif
tomxx
Cytat
No tak, logiczne. Biorąc pod uwagę, że:
  1. $argumenty = [3, 4, 5, 6];
  2. suma2(1, ...$argumenty, 7);


Zostanie rozwinięte do:
  1. $argumenty = [3, 4, 5, 6];
  2. suma2(1, 3, 4, 5, 6, 7);
Zostanie rozwinięte do suma2(1, 3, 4, 5), ponieważ funkcja ta przyjmuje tylko cztery argumenty.
Spawnm
Cytat
Zostanie rozwinięte do suma2(1, 3, 4, 5), ponieważ funkcja ta przyjmuje tylko cztery argumenty.

Funkcja zawsze przyjmuje wszystkie argumenty, nawet jeśli tego nie widać func_get_args wink.gif
freemp3
Cytat
Funkcja zawsze przyjmuje wszystkie argumenty, nawet jeśli tego nie widać func_get_args

Otóż to wink.gif Fajnie, że poprawili stałe, ale co do tych trzech kropeczek mam złe przeczucia tongue.gif Dodawanie ich na końcu listy parametrów jak najbardziej może się przydać, ale wstawianie tablicy w środku listy parametrów jakoś do mnie nie przemawia. Czas pokaże co z tego wyjdzie smile.gif
tomxx
Czytałem też, że być może pojawi się zmienna kolejność argumentów w tablicy (np. foo("arg4"=>1, "arg1"=>2, "arg2"=>1, "arg3"=>3);.
abjk
Składnia variadic functions daje czytelność. Samo zastosowanie func_get_args() nie jest przejrzyste.
widmo_91
Cytat(tomxx @ 30.01.2014, 16:02:17 ) *
Czytałem też, że być może pojawi się zmienna kolejność argumentów w tablicy (np. foo("arg4"=>1, "arg1"=>2, "arg2"=>1, "arg3"=>3);.



tablicy czy funkcji?
Jeżeli funkcji to trochę to ułatwi bo funkcję w PHP często mają wiele argumentów opcjonalnych.
tomxx
*funkcji oczywiście, literówka biggrin.gif

Co do parametrów opcjonalnych w funkcji, to też znalazłem taki pomysł (który być może zostanie zrealizowany), mianowicie:
  1. <?php
  2. function suma($a=1, $b=2, $c=3, $d=4) {
  3. echo $a+$b+$c+$d;
  4. }
  5.  
  6. suma(1, 3, 5, 5); #14
  7. suma(1, default, default, 6); #12 (1+2+3+6)
  8. suma(default, 3, 3, default); #11 (1+3+3+4)
  9. ?>
buliq
@up to zastosowanie default jest akurat dobrym pomysłem, nie pogardziłbym gdyby wprowadzili smile.gif
Dejmien_85
A czemu tak niektórzy tutaj narzekają na "..." (tj. variadic functions)? Przecież to nie żadna nowinka w świecie programowania wymyślona przez Frankeinstiena, tylko rozwiązanie stosowane w innych językach programowania (od lat), które ma się dobrze i rozszerza spektrum możliwości PHP. ; )
tomxx
No i została wydana nowa alpha.

Został dodany operator potęgowania.
  1. <?=8**3?>
Powyższy skrypt powinien wyświetlić 512.
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.