Ponieważ jest teraz sezon wakacyjny i wszyscy składają życzenia, zastanawiam się - jakie funkcje językowe chciałbyś dodać PHP? Interesują mnie praktyczne sugestie / życzenia dotyczące języka. Przez praktyczne rozumiem:
- Coś, co można praktycznie zrobić (nie: „Chciałbym, żeby PHP odgadł, co oznacza mój kod i naprawił dla mnie błędy” lub „Chciałbym, aby każdy kod wykonał się poniżej 5 ms”)
- Coś, co nie wymaga zmiany PHP na inny język (nie: „Chciałbym, aby upuściły znaki $ i używały spacji zamiast nawiasów klamrowych” lub „Chciałbym, aby PHP były skompilowane, wpisane statycznie i miały # w nazwie”)
- Coś, co nie wymagałoby zerwania całego istniejącego kodu (nie: „Zmieńmy nazwy 500 funkcji i zmień ich kolejność parametrów”)
- Coś, co zmienia język lub jakiś interesujący jego aspekt (nie: „Chciałbym, aby istniało rozszerzenie obsługi protokołu XYZ” lub „Chciałbym, aby błąd # 12345 został w końcu naprawiony”)
- Coś, co jest czymś więcej niż tylko rantem (nie: „Chciałbym, żeby PHP nie ssał tak bardzo”)
Czy ktoś ma jakieś dobre życzenia?
Edycja modów: Stanislav Malyshev jest głównym programistą PHP.
Odpowiedzi:
Nie miałbym nic przeciwko nazwanym parametrom.
Niestety deweloperzy PHP zestrzelili już ten pomysł .
źródło
[]
operator JavaScript ).Więcej dereferencji:
Inni wspominali o nazwanych parametrach i krótszej składni tablicy. Nie miałbym też nic przeciwko krótszej składni obiektów.
źródło
function something_that_returns_array() { return array( 'a', 'b', 'c', 'd', 'e' ); }
()->
składnią polega na tym, że działa ona tylko wtedy, gdy obiekt jest zwracany, co gorsza, obiekt jest nawet wymagany, posiada właściwość / metodę o określonej nazwie, która optymalnie robi to, co masz nadzieję, że to zrobi , akceptując podane parametry i modląc się, aby nie wymagało to już więcej ... itd. itd.Po pracy z PHP przez około 13 lat, a głównie z JS przez około 4, jest kilka rzeczy, które moim zdaniem PHP dobrze byłoby pożyczyć od JS:
1) skrótowa notacja tablic i obiektów. Wierzę, że mogło to być omówione i zestrzelone na wewnętrznych elementach (więc słyszę - nie lubię patrzeć, jak powstaje kiełbasa), ale naprawdę, naprawdę uważam, że dosłowna notacja tablic i obiektów w JS jest duża wygrana produktywność.
Na przykład:
Czy (IMHO) jest po prostu łatwiejsze do napisania i czystsze niż
Słyszałem, że pojawiły się pewne obawy o potencjalne zamieszanie, ale czy rzeczywiście jest to bardziej mylące niż, powiedzmy, notacja heredoc? Wydaje mi się, że przynajmniej tworzenie obiektu stdClass w PHP jest wystarczająco szczegółowe, aby zniechęcić do praktyki.
2) Przydałoby się ponowne zdefiniowanie wcześniej zdefiniowanych funkcji i metod. Szczególnie uprościłoby to sytuacje przedłużania klasy i tworzenia nowej klasy jest albo zbyt skomplikowane, albo niepraktyczne. Uważam jednak, że powinniśmy unikać przedefiniowywania podstawowych funkcji i metod innych niż przestrzeń użytkownika.
Oprócz tych dwóch, myślę, że PHP musi transparentnie obsługiwać Unicode . Staje się to coraz większym problemem dla programistów, a rozwiązania oferowane obecnie w PHP są mylące i często nie działają. Uczynienie wszystkich standardowych funkcji ciągów przyjaznymi dla Unicode po wyjęciu z pudełka byłoby ogromną wygraną dla programistów PHP.
Dzięki, że pytasz!
źródło
Czego chciałbym, jako były wieloletni apologeta PHP:
some_array_method($argity, array('key' => $value));
. Uważam, że ta propozycja została już niestety wypatroszona na liście mailingowej PHP.finally
wsparcieAuthorizeAttribute
, który wskazywałby, że kontroler lub metoda działania wymaga autoryzacji użytkownika. Sama struktura byłaby odpowiedzialna za poszukiwanie atrybutów i odpowiednie działanie na nich. Wierzę, że PHPUnit już używa pewnego rodzaju atrybutu, umieszczając je w komentarzach docblock, które można odczytać za pomocą refleksji, ale faktyczna funkcjonalność w komentarzach docblock to z pewnością włamanie.function($x){ return $x*2;}
, może mógłbym napisać$x => return $x*2
coś takiego. To znowu coś, co po prostu sprawia, że korzystanie z tej funkcji jest trudne. Na przykład w$results = array_filter(array(1,2,3), function($a) { return $a % 2; }):
porównaniu z$results = array_filter(array(1,2,3), $a => return $a % 2 );
poprzednim jest o wiele więcej hydrauliki, która w zasadzie nie ma znaczenia dla rzeczywistej pracy, którą próbujesz wykonać.Decimal
(matematyka o stałym punkcie), która wspierała operacje matematyczne przez normalnych operatorów, byłaby całkiem przyjemna, ponieważ nie mamy przeciążenia operatora.źródło
Ustaw PHP w pełni obiektowo.
slap on another global function
Ewolucja PHP musi się skończyć.Trudno mi to przeczytać. Muszę stworzyć własny stos mentalny i samemu go skompilować. Zasadniczo powinien on czytać na odwrót.
$dog->wakeup()->bark();
jest łatwy do odczytania w porównaniu dobark(wakeup($dog))
Zrobiłeś krok w kierunku włączenia obsługi obiektów / metod, użyj go w rzeczywistych podstawowych funkcjach PHP.
Przeniesienie tej funkcji na metody umożliwiłoby zmianę ich nazw przy użyciu niektórych konsekwentnie. Czy złamałby jakąkolwiek zgodność wsteczną, gdyby łańcuchy i tablice miały własne metody?
źródło
dog_wake_up($dog); bark_dog($dog);
Świetny byłby silnik zapytań zintegrowany z językiem. Coś w rodzaju tego, co jest dostępne w .NET o nazwie LINQ. Pomoże to w sortowaniu ogromnych tablic danych i ustandaryzuje dostęp do bazy danych, tak aby mniej udanych ataków typu SQL-injection.
źródło
O. Podpowiedzi do prymitywów. To byłoby miłe.
źródło
Naprawdę chcę lepszej obsługi Unicode po wyjęciu z pudełka. Większość języków zmierza w tym kierunku, ale PHP wciąż ma dziwne polecenia.
http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/
źródło
Spraw, aby ciągi były podobne do obiektów, dzięki wbudowanym metodom zastępowania niekonsekwentnie nazwanych i parametryzowanych obiektów nieprzedmiotowych. na przykład
itp.
Edycja: jeszcze jedno: metody te powinny zawsze oczekiwać i emitować UTF-8, z wyjątkiem tych specjalnie przeznaczonych do kodowania. Jeśli dane wejściowe są niepoprawne UTF-8, należy zgłosić wyjątek, nawet jeśli kodowanie nie wpłynie na wyjście funkcji.
źródło
subject->verb(object)
, ułatwia zapamiętanie kolejności parametrów.is_object($string)
wróci? Spowodowałoby to albo przerwanie kompatybilności wstecznej, albo spowodowanie wprowadzenia naprawdę nieintuicyjnych prawie-ale-niezupełnie-obiektów.1) Chciałbym, aby nowo tworzone obiekty zwracały „$ this”, dzięki czemu mogę metodować łańcuch, $ user = new User ('john') -> setLastName ('Doe') -> save ();
2) Jeśli kiedykolwiek używałeś ruby, a ostatnio węzeł, mają świetną interaktywną powłokę (IRB). Chciałbym, aby PHP miał taki, który byłby naprawdę użyteczny.
3) Cechy / Mixiny, ale słyszę, że są już w drodze.
4) Chcę wstawić drugą krótką tablicę $ myArray = ['my', 'array'];
5) Spójne nazewnictwo / kolejność (np. Stóg siana z igłą)
źródło
create()
metody, która nie robi nic specjalnego, tylko do obejścia # 1!1) pozbyć się obejmuje (). Odniesienia do innych plików powinny być odniesieniami, a nie umieszczać zawartości jednego pliku kodu źródłowego w innym. Zdecydowanie zbyt wielu programistów PHP używa () jako rodzaju wywołania funkcji, a nie jako środka odwoływania się do biblioteki. Prowadzi to do wszelkiego rodzaju niejednoznaczności w stanie zmiennej i niestabilnym kodzie. Zastąp to poleceniem „use” podobnym do Perla.
2) proszę podać gotową metodę kompilacji aplikacji PHP w pojedynczy plik kodu bajtowego lub plik wykonywalny. To znacznie zwiększy atrakcyjność PHP jako komercyjnego języka programowania. Powinno to być podstawowym składnikiem języka. Nie martw się o pliki HTML używane w interfejsie GUI aplikacji, ponieważ ...
3) pozbądź się możliwości osadzania znaczników PHP w HTML. Lub przynajmniej zapewnić tryb „bez osadzania”. Jest to absolutny bałagan i zachęca do złego projektowania poprzez połączenie logiki aplikacji i prezentacji. Programiści powinni używać szablonów do wyświetlania, a nie splatać pliki PHP razem i mieć nadzieję na najlepsze.
Podpisany,
Grandmaster B.
ps: nie słuchaj tego, co mówią inni tutaj, byłem miły przez cały rok
źródło
Dyrektywa ini
E_ERROR
dotycząca nieokreślonych stałych, zamiast zakładać, że jest to ciąg znakówE_NOTICE
.źródło
E_ERROR
alboE_PARSE
.Normalizuj globalną przestrzeń nazw za pomocą dobrze przemyślanej konwencji nazewnictwa, która ma sens dla początkujących!
Cytując naszego ukochanego Jeffa Atwooda: PHP jest do bani, ale to nie ma znaczenia !
źródło
Łańcuchy powinny być obiektami
źródło
1) Krótsza składnia tablicy / obiektu, a la JavaScript (jak wspomniano wcześniej)
2) Zezwól
const
zmiennym, aby zezwoliły na wynik obliczeń, tak jakdefine()
robi.3) Łączenie łańcuchów bezpośrednio z konstruktora:
new User()->name('Ryan');
4) Dereferencje tablicowe:
something_that_returns_array()[4];
5) Rozszerzona obsługa SPL. SPL wykonuje przyzwoitą robotę, przekształcając funkcje łańcuchów i tablic (między innymi) jako obiekty. Rozszerzenie SPL może rozwiązać wiele problemów związanych z tym, że język jest tak szalony.
6) Używanie
ArrayObject()
powinno być tak przejrzyste jak używaniearray()
. Powinieneś być w stanie robić rzeczyarray_filter($array_object_instance)
bez robieniaarray_filter($array_object_instance->getArrayCopy())
. Oczywiście byłoby jeszcze lepiej$array_object_instance->filter()
.7) Przydałby się pełny Unicode.
8) Przestań robić dziwne automatyczne konwersje typów. Na przykład nie powinno być możliwe
echo
utworzenie obiektu SimpleXMLElement bez uprzedniego jawnego typowania go jako ciąg znaków. A przynajmniej rzuć coś, kiedy to się stanie (np. W trybie ścisłym lub w jakimkolwiek innym trybieerror_reporting(-1)
).9) Wsparcie dla wielu wątków lub jakiegoś zdarzenia / asynchronicznego wywołania zwrotnego. Ma to największe znaczenie podczas próby przesyłania dużych plików za pomocą cURL. Zamiast wątków old skool, byłoby coś takiego jak Grand Central Dispatch firmy Apple. Lub nawet coś w stylu JavaScript, w którym można wysyłać żądania asynchroniczne i definiować połączenia zwrotne.
10) Spójne nazewnictwo / porządek (np. Stóg siana z igłą) byłoby fajne, ale myślę, że można to lepiej rozwiązać za pomocą SPL.
11) Oficjalnie obsługiwana interaktywna powłoka PHP, taka jak IRB. Facebook ma taki,
phpsh
który został napisany w Pythonie, ale brakuje mu polskiego, który chciałbym zobaczyć.12) W przypadku interfejsu API Reflection dodaj obsługę (a) komentarzy docblock na temat stałych (globalne i klasowe) oraz (b) obsługę analizowania komentarzy podobnych do PHPDoc w rozsądnej strukturze danych. Istnieje pakiet PECL o nazwie „docblock”, który próbuje to zrobić, ale nie wydaje się, aby autor zaszedł bardzo daleko.
EDYCJA: 13) Chciałbym również zobaczyć możliwość używania
!
i?
nazw funkcji - jak Ruby może.źródło
1) Zrozumienie tablic w stylu rozumienia listy w języku Python:
2) Składnia krótkiej tablicy
3) Ustaw puste (), aby nie traktować ciągu „0” jako prawdziwego
źródło
empty()
jest logicznym przeciwieństwemif ($x)
, więc ma sens, żeempty('0')
to prawda, ponieważif ('0')
jest fałszem. Jedyną różnicą jest to,empty()
że nie rzuca uwagi, jeśli zmienna nie jest ustawiona.Chciałbym zobaczyć wiarygodną metodę tworzenia / definiowania tablic CONSTANT. Istnieje kilka hackerskich sposobów symulowania tego rodzaju funkcjonalności, ale byłoby miło, gdyby była to tylko prosta funkcja PHP. Byłoby miło, gdybyś mógł utworzyć tablicę w sposób podobny do „ostatecznej” deklaracji Javy.
Stworzyłem system logowania, który można bardzo szybko skonfigurować. Wszystko, co musisz zrobić, to zmienić zawartość tablicy w pliku tekstowym, aby określić pola, które mają zawierać informacje o użytkowniku. Korzystając z szeregu pętli for, obsługuje wszystko, od generowania formularzy i sensytyzacji danych wejściowych, po wywołania bazy danych, ale wszystko zależy od tej oryginalnej tablicy.
Plik z tablicą jest zablokowany z uprawnieniami, ale gdy tablica porusza się w eterze, jest zmienna. Chociaż uważam, że system jest dość bezpieczny, nie lubię zostawiać niczego przypadkowi. Metoda finalizacji tablic byłaby przydatna w takiej sytuacji.
Nowy pomysł!!
Ohhh, myślałem o czymś innym, co naprawdę bardzo lubię w php. Chciałbym, aby jakiś system kontrolował operacje na plikach php i operacje na katalogach podobne do działania .htaccess.
Plik .phpaccess powinien uruchamiać jakieś zasady dotyczące tej samej domeny / pochodzenia.
Na przykład, jeśli hostowałem wiele witryn z wirtualnymi hostami, mógłbym mieć plik .phpaccess w katalogu, który powiedziałby php, aby sprawdził początek wykonywanych skryptów, które próbują działać w moim chronionym katalogu. Jeśli skrypt nie pochodzi z tego katalogu lub jego podkatalogów, operacje na plikach lub operacje na gniazdach zostaną odrzucone.
Myślę, że taki system uczyniłby wirtualny hosting o wiele bezpieczniejszym środowiskiem. Jeśli umieścisz jeden z nich u góry każdego wirtualnego hosta, zmniejszy to szansę znalezienia sposobu na wkroczenie się z sąsiedniego wirtualnego hosta.
Także jeśli dobrze byłoby mieć metodę zabezpieczenia go w odwrotny sposób. tj. ograniczenie zasięgu skryptów w jednym katalogu do tego katalogu.
To yin i yang ya wiedzą!
źródło
final
. Wyjaśnienie:final
oznacza, że wartość zmiennej można ustawić w czasie wykonywania (w przeciwieństwie do stałych, które muszą być stałymi wyrażeniami), ale można ją ustawić tylko raz. Zobacz także C #readonly
.Moje dwa największe życzenia jako zapalonego programisty PHP:
źródło
Składnia języka : W pihipi i phpreboot jest kilka dobrych wskazówek na temat tego, czym interesują się programiści (chociaż phpreboot zbyt daleko posuwa się w JS).
Metodologia programowania: Gdyby takie ankiety zostały wzięte pod uwagę, znacznie poprawiłoby żywotność PHP.net. Nie podejmuj więcej decyzji dotyczących składni sesji IRC.
Indywidualne cechy : Niektóre zostały wspomniane wcześniej, ale z radością spalę trochę karmy, aby być bardziej tępym:
str::toupper()
)\
składnia przestrzeni nazw gówno gówna , popraw parser i zastosuj::
jako alternatywę. Wiesz, jak prawdziwy język.Chociaż, jeśli nie jest to oczywiste, chętnie sfinansowałbym kogoś innego, aby zrobił to drugie, i zabiłbym php.net jako główną implementację.
:P
Och, właśnie zauważyłem, że to wiki społeczności. Jest więc szansa, że nie jesteś tutaj po karmę, ale prawdziwe zainteresowanie. Jeśli tak, zajrzyj do <b> problemu </b>, który poważnie szkodzi językowi (dyrektoritis).
źródło
::
Byłoby to bardziej naturalne dla każdego zamkniętego języka składni C / C ++. A `\ 'jest nie tylko nienormalny wśród wszystkich języków programowania, ale ma niesprawdzone skojarzenia. Niektóre wcześniejsze dyskusje: stackoverflow.com/questions/238550/… lub developers.slashdot.org/article.pl?sid=08/10/26/1610259 i reddit.com/r/programming/comments/79cut/… - Ale w szczególnie podejmowanie decyzji w tej sprawie bez informacji zwrotnej i sygnalizowanie społeczności programistów, aby ją wciągnęło, nie było bardzo pożądanym krokiem.Bardzo chciałbym zobaczyć połączenie błędów i wyjątków w jedną koncepcję (wyjątki). Wspaniale jest móc wychwytywać wyjątki i zapisywać je w dzienniku, aby w ten sposób znajdować i naprawiać błędy. Ale jeśli coś jest zasadniczo nie tak (czytaj: błąd PHP) w ścieżce kodowej, która jest bardzo rzadko trafiana, nie ma dobrego sposobu na umieszczenie tych informacji w tej samej bazie danych problemów.
Proszę, Mikołaj, wprowadź przełącznik w php.ini, który zamienia wszystkie błędy w wyjątki - idealnie, wyjątki, które mogę przechwycić w moim kodzie.
źródło
PHP mi odpowiada, ponieważ służy do podrzucania małych i średnich stron internetowych; Muszę być trochę niewyobrażalny, jedyną rzeczą, o której mógłbym pomyśleć w odpowiedzi na to pytanie, byłoby coś, co sprawiłoby, że lepiej skaluje się w witrynach o dużym ruchu.
Mam na myśli odrodzenie procesów do innych rdzeni, na przykład aktualizację bazy danych w jednym procesie podczas tworzenia strony wyjściowej w innym procesie. Szybkie wyszukiwanie w Google wskazuje, że można to zasymulować, ale obecnie nie jest obsługiwane bezpośrednio w php.
źródło
Naprawdę tęskniłem za tym, że typy skalarne nie są traktowane jako obiekty, a rzeczywiste obiekty nie mogą zachowywać się jak każdy inny typ lub obiekt (z wyjątkiem łańcucha wynikającego z __toString ()).
źródło
źródło
Oczyść „Notatki przesłane przez użytkownika” na stronie http://php.net . Czasami są prawdziwym bałaganem, ale ogólnie stanowią wielką wartość.
źródło
W PHP jest kilka całkiem przyzwoitych funkcji tablicowych, zapewniających zdolność przetwarzania list, wywołań zwrotnych i
create_function()
zapewniających podstawowy rachunek lambda.Głównym problemem jest to, że w PHP jest on zbyt rozwlekły, system stenografii byłby doskonały, szczególnie w przypadku poleceń mapowania / zmniejszania.
Co ważniejsze, funkcje listy nie są całkowicie kompletne:
foldr
funkcji,array_reduce()
zapewniafoldl
array_map()
powinien przekazać klucz w drugim argumencie, podobniearray_walk()
jakarray_map_keys()
mogą być użyteczne dla kluczowych modyfikacjirange()
,array_fill()
aarray_fill_keys()
jedynie obsługiwać tak wiele przypadków, iarray_filter()
jest oddzielonyNie zamierzam wprowadzać PHP w Haskell, ale PHP jest często używane do manipulacji strukturą danych typu listy i przydatne byłoby posiadanie pełnego zestawu narzędzi w tym zakresie.
źródło
Przeciążenie operatora:
źródło
Dodaj wyjątki zamiast tworzenia E_WARNING ... To bardzo denerwujące, że nie mogę użyć czegoś takiego jak:
Oczywiście obecnie nie jest to zbyt praktyczne, ale otrzymywanie:
OSTRZEŻENIE
OSTRZEŻENIE
OSTRZEŻENIE
i nie mogę kontrolować przepływu kodu bez pisania własnego modułu obsługi błędów i wykrywania łańcucha, który został wygenerowany (pozwolenie, niepoprawna nazwa pliku lub cokolwiek innego; nie mam nic przeciwko innym źródłom błędów tutaj) w celu zgłoszenia poprawnego wyjątku .
Mam nadzieję, że nie muszę wyjaśniać, dlaczego jest to ważne.
PHP już dawno temu zorientowało się na obiekt, a my, programiści korzystający z PHP, czekamy na funkcje OO, nie wprowadzając „goto” ... Kiedy dowiedziałem się, że to się naprawdę wydarzyło, pomyślałem, że to prima aprilis.
źródło
Skonsoliduj model obiektowy - spraw, aby wszystkie obiekty rozszerzały podstawową klasę Object. Klasa Object implementowałaby (między innymi) wszystkie magiczne metody (aby nie były już magią!)
Przenieś rozszerzenia do własnych przestrzeni nazw - uporządkuj globalną przestrzeń nazw
$conn = new \MySQLi\Connection();
Odzyskaj
spl_autoload()
funkcję! Poważnie, jest to prawdopodobnie jedna z największych funkcji PHP i jednocześnie najbardziej bezużyteczna w tym samym czasie.spl_autoload
jest domyślnym autoloaderem, który obsługuje przestrzenie nazw i wiele rozszerzeń plików, ale z nieznanych powodów wymaga, aby nazwy plików były pisane małymi literami. Jest wypełniony raport o błędzie , ale pracownicy odpowiedzieli, że nie naprawią go z powodu kompatybilności wstecznej. Racja ... to nie jest tak, że każdy framework jest dostarczany z własnym autoloaderem, ponieważ domyślny jest sparaliżowany!źródło
Obsługa dużych plików. Pięknie proszę?
Zobacz http://bugs.php.net/bug.php?id=27792 (chociaż może być więcej obszarów / funkcji, które również wymagają uwagi).
źródło
Doprowadź obsługę taint do najnowszej wersji i dołącz do standardowej kompilacji, najlepiej włączonej w domyślnej konfiguracji http://wiki.php.net/rfc/taint
Zapobiegnie to atakom typu XSS i SQL wstrzykiwanie poprzez poprawne kodowanie ludzi.
źródło