Drukowana wersja tematu
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:
<?php
const LICZBA = 3;
const TEKST = LICZBA." tekst";
const WYRAŻENIE = (2*3)." tekst";
http://www.php.net/echo LICZBA, "<br>";
http://www.php.net/echo TEKST, "<br>";
http://www.php.net/echo WYRAŻENIE, "<br>";
?>
Powyższy przykład wyświetli:
3
3 tekst
6 tekstZmienna liczba argumentów funkcjiZa 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:<?php
function f($a, ...$b)
{
http://www.php.net/echo "<br>Pierwszy argument: $a, pozostałe argumenty: ";
foreach($b as $argument)
{
http://www.php.net/echo "$argument, ";
}
}
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4, 5);
?>
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 5Przekazywanie argumentów funkcji w tablicyW 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:<?php
function suma($a, $b, $c, $d)
{
http://www.php.net/echo $a+$b+$c+$d;
}
$argumenty = [3, 4];
suma(1, ...$argumenty, 5); #Wyświetli 13 (1+3+4+5)
?>
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ą
function suma($a, $b, $c, $d)
{
http://www.php.net/echo $a + $b + $c + $d;
}
$argumenty = [3, 4];
suma(1, ...$argumenty, 5);
Ciekawe co się stanie w takim przypadku:
$argumenty = [3, 4, 5, 6];
suma(1, ...$argumenty, 7);
Albo w jeszcze ciekawszym:
function suma2($a, $b, $c, ...$d)
{
http://www.php.net/echo $a + $b + $c + $d;
}
$argumenty = [3, 4, 5, 6];
suma2(1, ...$argumenty, 7);
Ode mnie
+1 dla przeciążeń.
Napisany przez: Tuminure 30.01.2014, 10:48:08
suma2(1, ...$argumenty, 7);
Może od razu:
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
!*! 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:
$argumenty = [3, 4, 5, 6];
suma(1, ...$argumenty, 7);
...
Funkcja weźmie pierwsze 4 parametry?
Cytat(sowiq @ 30.01.2014, 10:28:03 )
...
Albo w jeszcze ciekawszym:
function suma2($a, $b, $c, ...$d)
{
http://www.php.net/echo $a + $b + $c + $d;
}
$argumenty = [3, 4, 5, 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)
Napisany przez: tomxx 30.01.2014, 11:55:34
Cytat(sowiq @ 30.01.2014, 10:28:03 )
Ciekawe co się stanie w takim przypadku:
$argumenty = [3, 4, 5, 6];
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:
function suma2($a, $b, $c, ...$d)
{
http://www.php.net/echo $a + $b + $c + $d;
}
$argumenty = [3, 4, 5, 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:
$argumenty = [3, 4, 5, 6];
suma2(1, ...$argumenty, 7);
Zostanie rozwinięte do:
$argumenty = [3, 4, 5, 6];
suma2(1, 3, 4, 5, 6, 7);
To wszystko staje się proste
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?
Napisany przez: tomxx 30.01.2014, 14:50:59
Cytat
No tak, logiczne. Biorąc pod uwagę, że:
$argumenty = [3, 4, 5, 6];
suma2(1, ...$argumenty, 7);
Zostanie rozwinięte do:
$argumenty = [3, 4, 5, 6];
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
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
Fajnie, że poprawili stałe, ale co do tych trzech kropeczek mam złe przeczucia
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
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
Co do parametrów opcjonalnych w funkcji, to też znalazłem taki pomysł (który być może zostanie zrealizowany), mianowicie:
<?php
function suma($a=1, $b=2, $c=3, $d=4) {
http://www.php.net/echo $a+$b+$c+$d;
}
suma(1, 3, 5, 5); #14
suma(1, default, default, 6); #12 (1+2+3+6)
suma(default, 3, 3, default); #11 (1+3+3+4)
?>
Napisany przez: buliq 3.02.2014, 09:10:05
@up to zastosowanie default jest akurat dobrym pomysłem, nie pogardziłbym gdyby wprowadzili
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.
<?=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)