Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Newsy _ PHP 5.6.0 alpha1

Napisany przez: tomxx 29.01.2014, 13:38:53

Kilka dni temu PHP udostępniło publicznie wersję testową PHP 5.6.0alpha1.

wersja do pobrania -> http://windows.php.net/qa
dokumentacja -> http://docs.php.net/manual/en/migration56.php

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. http://www.php.net/echo LICZBA, "<br>";
  7. http://www.php.net/echo TEKST, "<br>";
  8. http://www.php.net/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. http://www.php.net/echo "<br>Pierwszy argument: $a, pozostałe argumenty: ";
  5. foreach($b as $argument)
  6. {
  7. http://www.php.net/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. http://www.php.net/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()
- http://docs.php.net/manual/en/function.oci-get-implicit-resultset.php
- openssl_x509_fingerprint()
- ZipArchive::setPassword()
- ponadto http://docs.php.net/manual/en/function.crypt.php 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 http://docs.php.net/manual/en/migration56.php.

Napisany przez: !*! 30.01.2014, 09:02:34

Nic szczególnego, można to podsumować krótko:

Cytat
...

Napisany przez: tomxx 30.01.2014, 09:22:40

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ć.

Napisany przez: buliq 30.01.2014, 10:16:43

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...

Napisany przez: sowiq 30.01.2014, 10:28:03

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. http://www.php.net/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. http://www.php.net/echo $a + $b + $c + $d;
  4. }
  5. $argumenty = [3, 4, 5, 6];
  6. suma2(1, ...$argumenty, 7);


Ode mnie +1 dla przeciążeń.

Napisany przez: Tuminure 30.01.2014, 10:48:08

  1. suma2(1, ...$argumenty, 7);


Może od razu:
  1. suma2(...$argumenty, ...$argumenty, ...$argumenty);

Napisany przez: Spawnm 30.01.2014, 11:28:48

... to totalna porażka -__-

Napisany przez: !*! 30.01.2014, 11:42:01

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);

Napisany przez: buliq 30.01.2014, 11:48:18

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. http://www.php.net/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!

Napisany przez: mar1aczi 30.01.2014, 11:54:51

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

Napisany przez: tomxx 30.01.2014, 11:55:34

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. http://www.php.net/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...

Napisany przez: 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

Napisany przez: !*! 30.01.2014, 12:14:17

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.

Napisany przez: sowiq 30.01.2014, 12:25:18

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

Napisany przez: buliq 30.01.2014, 12:56:25

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

Napisany przez: tomxx 30.01.2014, 14:50:59

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.

Napisany przez: Spawnm 30.01.2014, 15:00:04

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

Napisany przez: freemp3 30.01.2014, 15:26:49

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

Napisany przez: 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);.

Napisany przez: abjk 2.02.2014, 01:28:15

Składnia variadic functions daje czytelność. Samo zastosowanie func_get_args() nie jest przejrzyste.

Napisany przez: widmo_91 2.02.2014, 18:51:14

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.

Napisany przez: tomxx 2.02.2014, 21:12:31

*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. http://www.php.net/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. ?>

Napisany przez: buliq 3.02.2014, 09:10:05

@up to zastosowanie default jest akurat dobrym pomysłem, nie pogardziłbym gdyby wprowadzili smile.gif

Napisany przez: Dejmien_85 12.02.2014, 19:13:41

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. ; )

Napisany przez: tomxx 14.02.2014, 23:04:16

No i została wydana nowa alpha.

Został dodany operator potęgowania.

  1. <?=8**3?>
Powyższy skrypt powinien wyświetlić 512.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)