Nowości z php.internals – str_slice

We wczorajszym wpisie Dan Birken przedstawił propozycję dodania do biblioteki standardowej języka php funkcji str_slice($string, $start, $end = null);. Funkcja ta była by alternatywą dla substr dla tych osób, dla których argumenty przekazywane do substr wydają się niezbyt logiczne czy też niewygodne.

Przy okazji rozpoczęła się dyskusja o wprowadzeniu innych funkcji łańcuchów znaków, które często używane są w różnych projektach np. startsWith($search) czy endsWith($search).

Osobiście chętnie widziałbym te funkcje w php oraz gdzieś w dalekiej przyszłości zmianę string z typu prostego na obiekt, oczywiście w sposób transparentny dla starszego kodu.

Jakie jest Wasze zdanie ?

  1. batman pisze:

    Najwyraźniej ludziom odpowiedzialnym za rozwój PHP bardzo się nudzi, skoro wymyślają takie bzdury. Skoro substr źle działa, to lepiej byłoby poprawić tę funkcję.
    Ciekawe kiedy wpadną na pomysł mysql_real_real_escape_real_string…

  2. To akurat nikt z „core” teamu. Nikt nie mówi, że substr źle działa, tylko, że nie zawsze sposób w jaki oczekuje ona argumentów jest wygodny w danym przypadku. Zresztą weźmy np. Javascript – są dwie funkcje – substr i substring które właśnie różnią się kwestii parametrów.

  3. Robert Gawron pisze:

    Taka funkcja to w sumie nic nowego, zgadzam się tu z batmanem. Swoją drogą, ciekawie jest to rozwiązane w Pythonie, np:

    >>> x = „ala ma kota”
    >>> x[4:]
    ‚ma kota’
    >>> x[::-1]
    ‚atok am ala’
    >>> x[4:6]
    ‚ma’

  4. Nie wiem, jak dla mnie lista argumentów wygląda sensownie: weź fragment $tekstu od $startu $liczbę znaków. Przydałby się jeszcze wariant który pobierałby od – do, ale coś takiego można sobie napisać bez problemu we własnym zakresie.

  5. Diabl0 pisze:

    @Tomasz
    Przecież substr też to umożliwia. substr( $tekst, 2,2) zwróci ci znaki od 2 do 4. Po co do tego osobna funkcja?

    A wracając do obiektów – też chętnie bym to zobaczył w PHP. Jakoś zapis w stylu

    $tekst = ‚to jest test’;
    $tekst = $tekst->substr(0, 7)->replace(‚jest’, ‚był’) . ‚przykład’;

    jest dla mnie czytelniejszy niż
    $tekst = „to jest test”;

    $tekst = str_replace(substr($tekst, 0,7), ‚jest’, ‚był’) . ‚przykład’;

    W połączeniu z rzutowaniem i możliwością rozszerzania takich standardowych obiektów mogło by to znacznie ułatwić poprawić czytelność kodu.

  6. @tomasz: sensem funkcji str_slice jest własnie od – do 😉
    @diablo: też tak uważam, ale chyba nie mamy szans…

  7. Panowie, nic nie stoi na przeszkodzie, żebyście taką klasę stworzyli – a jak faktycznie będzie lekka, łatwa i przyjemna – może się przyjmie… i może wtedy wskoczy do SPL.

  8. Sebastian Tarach pisze:

    Też się zgadzam z batmanem. Przecież to tylko zamiast ilości znaków do wycięcia wprowadza numer znaku do którego funkcja ma wyciąć.
    substr($string, $start, $length)
    str_slice($string, $start, $end);

    substr($string, $start, $end – $start)
    I mamy to samo…

  9. @sebastian: niby tak, ale często by się przydały parametry w rodzaju str_slice, to właściwie czemu nie dodać tej funkcji, nikomu to nie zaszkodzi.
    @marcin: najpierw muszę napisać wszystkie te wpisy na bloga, które obiecałem a potem się mogę zająć obiektowym stringiem 😉

  10. Sebastian Tarach pisze:

    @wojciech: Owszem nam nie zaszkodzi, bo już znamy większość tych funkcji na pamięć. Jednak nowi użyszkodnicy PHP mogą się trochę pogubić.

  11. eRIZ pisze:

    Zajmują się pierdołami zamiast czymś konkretnym…

    Chętnie bym widział jakiś rozwój SPL albo żeby przysiedli nad tym, co już mają, ale sensownie – np. problem z tablicami wielowymiarowymi przy ArrayAccess, czy też konieczność każdorazowego kompilowania skryptów przy odpalaniu ich via FastCGI…

    Komu potrzebne funkcje-aliasy…? O.o’

  12. Widocznie tym, którzy je zgłaszają ;P. Każdy ma swój punkt widzenia i inne rzeczy uważa za istotne :> Tak jak ktoś zauważył, jeżeli chcemy coś zmienić to musimy sami się tym zająć.

  1. There are no trackbacks for this post yet.

Leave a Reply

Informuj mnie o odpowiedziach poprzez e-mail. Możesz również subskrybować wpis bez zostawiania komentarza.