Wiem, że brzmi to jak dziwaczne pytanie, ale pozwól mi wyjaśnić, skąd pochodzę.
Po ukończeniu college'u dostałem pracę w sklepie PHP. Pracowałem tam półtora roku i pomyślałem, że nauczyłem się wszystkiego o programowaniu.
Potem dostałem pracę jako jednoosobowy wewnętrzny warsztat programistyczny w dużej korporacji, gdzie cała praca była w C #. W moim zaangażowaniu na to stanowisko zacząłem czytać mnóstwo blogów i książek i szybko zdałem sobie sprawę, jak bardzo się myliłem, myśląc, że wiem wszystko. Dowiedziałem się o testach jednostkowych, wzorcach wstrzykiwania zależności i dekoratorach, zasadzie projektowania polegającej na luźnym sprzężeniu, debacie na temat kompozycji nad dziedziczeniem itd., I tak dalej, i tak dalej, i dalej - nadal bardzo to wszystko pochłaniam. Nie trzeba dodawać, że mój styl programowania zmienił się całkowicie w ciągu ostatniego roku.
Teraz łapię projekt php, wykonując kodowanie dla start-upu znajomego i czuję się całkowicie ograniczony w przeciwieństwie do programowania w C #. Naprawdę przeszkadza mi to, że do wszystkich zmiennych w zakresie klasy należy się odwoływać, dodając „$ this->”. Denerwuje mnie, że żadne z IDE, które wypróbowałem, nie ma bardzo dobrej inteligencji i że moje metody testów jednostkowych SimpleTest muszą zaczynać się od słowa „test”. Doprowadza mnie do szału, że dynamiczne typowanie uniemożliwia mi niejawne określanie typu parametru, jakiego oczekuje metoda, i że musisz napisać instrukcję switch, aby wykonać przeciążenie metod. Nie mogę znieść, że nie możesz mieć zagnieżdżonych przestrzeni nazw i musisz użyć operatora :: do wywołania konstruktora klasy bazowej.
Teraz nie mam zamiaru rozpoczynać debaty PHP vs C #, raczej mam na myśli to, że jestem pewien, że są pewne funkcje PHP, o których albo nie wiem, albo o których nie wiem, ale nie używam ich poprawnie. Jestem osadzony w moim wszechświecie C # i mam problemy z widzeniem poza szklaną misą.
Więc pytam, jakie są twoje ulubione funkcje PHP? Jakie rzeczy możesz w nim zrobić, a czego nie możesz lub są trudniejsze w językach .Net?
źródło
Odpowiedzi:
Dokumentacja . Dokumentacja dostaje mój głos. Nie spotkałem się z bardziej szczegółową dokumentacją online dla języka programowania - wszystko, co muszę złożyć razem z różnych witryn internetowych i stron podręcznika.
źródło
Tablice . Sądząc po odpowiedziach na to pytanie, nie sądzę, aby ludzie w pełni doceniali, jak łatwe i użyteczne są tablice w PHP. Tablice PHP działają jednocześnie jako listy, mapy, stosy i ogólne struktury danych. Tablice są zaimplementowane w rdzeniu języka i są używane w dowolnym miejscu, co skutkuje dobrą lokalizacją pamięci podręcznej procesora. Perl i Python używają oddzielnych konstrukcji językowych dla list i map, co powoduje więcej kopiowania i potencjalnie mylących przekształceń.
źródło
[[1, 2], [3, 4]]
porównaj to do wersji PHParray(array(1, 2), array(3, 4))
.Programy obsługi strumienia umożliwiają rozszerzenie „systemu plików” o logikę, która, o ile wiem, jest dość trudna do wykonania w większości innych języków.
Na przykład za pomocą programu obsługi MS-Excel Stream możesz utworzyć plik MS Excel w następujący sposób:
źródło
Metody magiczne to metody awaryjne, które są wywoływane między innymi za każdym razem, gdy wywołujesz metodę, która nie istnieje, przypisujesz lub odczytujesz właściwość, która nie istnieje.
Programista C ++ może zauważyć, że PHP pozwala na przeciążanie niektórych operatorów, np .
()
Lub(string)
. Właściwie PHP pozwala na jeszcze większe przeciążenie, na przykład[]
operator ( ArrayAccess ),foreach
konstrukcja języka ( Iterator i IteratorAggregate ) orazcount
funkcja ( Countable ).źródło
__call()
jest świetny w frameworkach z map domain.com/controller/method/Średnia klasa jest czysty pojemnik. Dopiero niedawno się o tym dowiedziałem.
Zamiast używać tablicy do przechowywania atrybutów serwerowych
Możesz użyć standardowej klasy
Jest to szczególnie przydatne podczas uzyskiwania dostępu do tych zmiennych w ciągu
źródło
Pliki dołączane mogą mieć wartość zwracaną, którą można przypisać do zmiennej.
źródło
Możesz wykorzystać fakt, że
or
operator ma niższy priorytet niż=
to zrobić:Jeśli wartość pierwszego przypisania ma wartość
true
, drugie przypisanie jest ignorowane. Inny przykład:źródło
or
zostanie wykonany, jeśli kod poprzedzający zwrócior
wartość liczbową0
. Tak więc semantycznie może być mniej prawdopodobne w przypadku czegoś takiego$_GET['page']
, ale oczywiście taka okoliczność może się zdarzyć i dobrze jest na to uważać.or
operator jest wersją operatora o niższym precedensie||
. Poza tym +1, ponieważ jest to bardzo wyraziste i często zapominam, że jest to możliwe. Powinien być używany częściej i jest absolutnie jasny w tym, co robi. Nie wiem jednak, jak kodują „prawdziwi mężczyźni”, więc nie mogę tego komentować.__autoload()
(klasowe) pliki wspomagane przezset_include_path()
.W PHP5 nie ma teraz potrzeby określania długich list instrukcji „include_once” podczas wykonywania porządnego OOP.
Po prostu zdefiniuj mały zestaw katalogów, w których pliki bibliotek klas mają rozsądną strukturę i ustaw ścieżkę automatycznego dołączania:
Teraz
__autoload()
rutyna:Teraz PHP zautomatyzuje dołączanie potrzebnych plików na żądanie, oszczędzając czas analizy i pamięć.
źródło
Łatwość . Największą cechą jest to, jak łatwo nowi programiści mogą usiąść i napisać „działające” skrypty i zrozumieć kod.
Najgorszą cechą jest to, jak łatwo nowi programiści mogą usiąść i napisać „działające” skrypty i myśleć, że rozumieją kod.
Otwartość społeczności otaczającej PHP i ogromne ilości projektów PHP dostępne jako open-source jest o wiele mniej skomplikowane dla kogoś wchodzącego świat rozwoju i jak ty, może być odskocznią do bardziej dojrzałych języków.
Nie będę debatował nad kwestiami technicznymi, tak jak wiele osób przede mną, ale jeśli spojrzysz na PHP jako na społeczność, a nie język sieciowy, społeczność, która wyraźnie cię przyjęła, gdy zacząłeś tworzyć, korzyści naprawdę mówią same za siebie.
źródło
Zmienne zmienne i funkcje bez wątpienia!
To samo dotyczy parametrów obiektu ($ jakiś_obiekt -> $ jakaś_zmienna);
Bardzo bardzo dobrze. Kodowanie w Make z pętlami i wzorami jest bardzo łatwe, szybsze i bardziej kontrolowane niż eval (Thanx @ Ross & @Joshi Spawnbrood!). T
źródło
Możesz używać funkcji z niezdefiniowaną liczbą argumentów za pomocą
func_get_args()
.źródło
Uwielbiam zdalne pliki . W przypadku tworzenia stron internetowych ten rodzaj funkcji jest wyjątkowo przydatny.
Chcesz popracować nad zawartością strony internetowej? Prosty
i masz gotowy uchwyt pliku, tak jak każdy inny normalny plik.
A co powiesz na odczytanie zdalnego pliku lub strony internetowej bezpośrednio w ciągu?
Trudno przecenić przydatność tej konkretnej metody.
Chcesz przeanalizować zdalny obraz? Co powiesz na zrobienie tego przez FTP?
Prawie każda funkcja PHP, która działa z plikami, może współpracować z plikiem zdalnym. Można nawet
include()
czyrequire()
pliki z kodem zdalnie ten sposób.źródło
strtr ()
Jest niesamowicie szybki, tak bardzo, że byłbyś zdumiony. Wewnętrznie prawdopodobnie używa jakiejś szalonej struktury typu b-tree, aby uporządkować twoje dopasowania według ich wspólnych przedrostków. Używam go z ponad 200 ciągami znajdowania i zamieniania, a nadal przechodzi przez 1 MB w mniej niż 100 ms. Dla wszystkich, z wyjątkiem trywialnie małych łańcuchów, strtr () jest nawet znacznie szybszy niż strtolower () w robieniu dokładnie tego samego, nawet biorąc pod uwagę zestaw znaków. Prawdopodobnie mógłbyś napisać cały parser używając kolejnych wywołań strtr i byłby to szybszy niż zwykłe dopasowanie wyrażenia regularnego, ustalenie typu tokenu, wyświetlenie tego lub innego, następnego rodzaju wyrażenia regularnego.
Pisałem normalizator tekstu do dzielenia tekstu na słowa, małych liter, usuwania interpunkcji itp., A strtr był moim szwajcarskim scyzorykiem, pokonał spodnie z wyrażeń regularnych, a nawet str_replace ().
źródło
Jedną z niezbyt znanych funkcji PHP jest
extract()
funkcja, która rozpakowuje tablicę asocjacyjną do lokalnej przestrzeni nazw. Prawdopodobnie istnieje to w przypadku aborminacji autoglobalnej, ale jest bardzo przydatne do tworzenia szablonów:Teraz możesz użyć
render_template('index.html', array('foo' => 'bar'))
i tylko$foo
z wartością"bar"
pojawia się w szablonie.źródło
Zakres () nie jest ukryty sam w sobie, ale nadal widzę wiele osób wykonujących iteracje z:
kiedy mogą używać:
Możesz też robić proste rzeczy, takie jak
źródło
Read Loop
.Przestrzeń internetowa obsługująca PHP jest zwykle tańsza niż przestrzeń z (asp) .net. Państwo może nazwać funkcją ;-)
źródło
Słowo
static
kluczowe jest przydatne poza punktem widzenia OOP. Możesz szybko i łatwo wdrożyć `` zapamiętywanie '' lub buforowanie funkcji za pomocą czegoś tak prostego, jak:Słowo
static
kluczowe tworzy zmienną, która utrzymuje się tylko w zakresie tej funkcji po wykonaniu. Ta technika jest świetna w przypadku funkcji, które trafiają do bazy danych, takie jakget_all_books_by_id(...)
lubget_all_categories(...)
wywoływane więcej niż raz podczas ładowania strony.Uwaga: upewnij się, że znalazłeś najlepszy sposób na utworzenie klucza do swojego skrótu, w prawie każdych okolicznościach
md5(...)
powyższe NIE jest dobrą decyzją (problemy z szybkością i długością wyjścia), użyłem go do celów ilustracyjnych.sprintf('%u', crc32(...))
lubspl_object_hash(...)
może być znacznie lepsza w zależności od kontekstu.źródło
Jedną z fajnych funkcji PHP jest CLI . Nie jest to tak „promowane” w dokumentacji, ale jeśli potrzebujesz rutynowych skryptów / aplikacji konsolowych, użycie cron + php cli jest naprawdę szybkie!
źródło
wget http://example.com...
Następnie sztuczka „i drukuj”
Powoduje echo Blah, jeśli $ flag jest prawdziwe. NIE DZIAŁA Z ECHO.
Jest to bardzo przydatne w szablonie i zastępuje? : które nie są łatwe do odczytania.
źródło
Możesz użyć znaku minus w nazwach zmiennych, takich jak ta:
Po co go używać? Nie mam pomysłu: może na model CSS? Lub jakiś dziwny JSON, który musisz wydrukować. To dziwna funkcja :)
źródło
$item->DataContent->body->{'body.content'}
.Składnia HEREDOC to moja ulubiona ukryta funkcja. Zawsze trudne do znalezienia, ponieważ nie możesz użyć Google dla <<<, ale zapobiega to ucieczce z dużych fragmentów HTML i nadal pozwala upuszczać zmienne do strumienia.
źródło
Zapewne niewielu wie, że można określić stałe "zmienne" jako wartości domyślne dla parametrów funkcji:
Ciągów można używać tak, jakby były tablicami :
źródło
Najbardziej użyteczną rzeczą w kodzie PHP jest to, że jeśli nie rozumiem funkcji, którą widzę, mogę ją sprawdzić za pomocą przeglądarki i wpisując:
W zeszłym miesiącu widziałem funkcję „range” w jakimś kodzie. To jedna z setek funkcji, których udało mi się nigdy nie użyć, ale okazały się naprawdę przydatne:
Ten adres URL jest aliasem dla http://us2.php.net/manual/en/function.range.php . Ten prosty pomysł mapowania funkcji i słów kluczowych na adresy URL jest niesamowity.
Chciałbym, żeby inne języki, frameworki, bazy danych, systemy operacyjne miały równie prosty mechanizm wyszukiwania dokumentacji.
źródło
range()
może się przydaćforeach( range(1, 10) as $i) { };
PHP function
w pasku adresu, a wyszuka w Google „Szczęśliwy traf” i prawie zawsze trafisz na właściwą stronę dokumentacji php.Szybkie komentarze blokowe
Te komentarze umożliwiają przełączanie, jeśli blok kodu jest komentowany jednym znakiem.
źródło
// ...
komentarze do linii i/* ... */
komentarze blokowe./** /
przed i/**/
po. Możesz przełączyć blok, usuwając i dodając spację w pierwszym. Ma to dodatkową zaletę pracy z CSS (i innymi językami, które nie obsługują// ...
komentarzy).Moja lista… większość z nich należy raczej do „ukrytych funkcji” niż do „ulubionych funkcji” (mam nadzieję!), I nie wszystkie są przydatne, ale… tak.
Możesz także zagnieżdżać operatory trójskładnikowe, czasami się przydaje.
Dobra, na razie przestanę :-)
Hmm, minęło trochę czasu ...
Właśnie odkryłem, że możesz przekazać dowolny ciąg jako nazwę metody, JEŚLI umieścisz go w nawiasach klamrowych. Nie możesz niestety zdefiniować żadnego łańcucha jako metody, ale możesz je złapać za pomocą __call () i przetworzyć je dalej w razie potrzeby. Hmmm....
Znalazłem ten mały klejnot w komentarzach Reddit:
Nie można wywoływać funkcje wewnątrz {} tak bezpośrednio, ale mogą używać zmiennych-Holding-the-function-name i nazywają tych! (* i * możesz na nim również używać zmiennych zmiennych)
źródło
${''} = 456;
hahaha .... całkiem nadużycie.Manipulacja tablicą.
Mnóstwo narzędzi do pracy z tablicami i manipulowania nimi. Może nie jest to unikalne dla PHP, ale nigdy nie pracowałem z językiem, który by to ułatwiał.
źródło
Jestem trochę taki jak Ty, kodowałem PHP od ponad 8 lat. Musiałem wziąć udział w kursie .NET / C # około rok temu i bardzo podobał mi się język C # (znienawidzony ASP.NET), ale dzięki temu stałem się lepszym programistą PHP.
PHP jako język jest dość kiepski, ale jestem z nim niezwykle szybki, a stos LAMP jest niesamowity. Produkt końcowy znacznie przewyższa sumę części.
To powiedziawszy, w odpowiedzi na twoje pytanie:
http://uk.php.net/SPL
Uwielbiam SPL , klasa kolekcji w C # była czymś, co mi się spodobało, gdy tylko zacząłem. Teraz mogę wziąć ciasto i je zjeść.
Andrzej
źródło
Jestem trochę zaskoczony, że nikt jeszcze o tym nie wspomniał, ale jedną z moich ulubionych sztuczek z tablicami jest użycie operatora plus. To jest trochę jak,
array_merge()
ale trochę prostsze. Odkryłem, że zwykle tego chcę. W efekcie pobiera wszystkie wpisy z RHS i sprawia, że pojawiają się one w kopii LHS, w razie potrzeby nadpisując (tj. Nie są przemienne). Bardzo przydatne do rozpoczynania od tablicy „domyślnej” i dodawania niektórych rzeczywistych wartości w jednym trafieniu, pozostawiając wartości domyślne na miejscu dla wartości niedostarczonych.Żądana próbka kodu:
źródło
$defaults
powinno być$control_defaults
... + array( ...
nie wystarczy, aby to wskazać? :-)Oto jedno, podoba mi się, jak ustawianie wartości domyślnych parametrów funkcji, które nie są dostarczane, jest znacznie łatwiejsze:
źródło
Szybko i brudno to ustawienie domyślne.
Język jest pełen przydatnych skrótów, dzięki czemu PHP jest idealnym kandydatem do (małych) projektów, które mają krótki czas wprowadzenia na rynek. Nie znaczy to, że czysty kod PHP jest niemożliwy, wymaga po prostu dodatkowego wysiłku i doświadczenia.
Ale uwielbiam PHP, ponieważ pozwala mi wyrazić to, czego chcę, bez pisania eseju.
PHP:
JAWA:
I tak, obejmuje to nie wpisywanie Int .
źródło
//
jest wbudowany w język.