Jak skutecznie ponownie wykorzystać kod PHP - Wprowadzenie do cech PHP
- 3897
- 344
- Tacjana Karpiński
Pierwotnie opracowane przez Rasmus Lerdorf
W 1994 r. PHP jest jednym z najczęściej używanych języków programowania ogólnego przeznaczenia. Pierwotnie urodzony jako język szablonu, przez lata ewoluował w w pełni poinformowany język z właściwym Oop
(Programowanie zorientowane na obiekt) Obsługa. Jego najnowsze wcielenie, 7.X
, wprowadzone nowe funkcje, takie jak Deklaracja typu return
dla funkcji i ogromnych ulepszeń wydajności. PHP jest Pojedyncze dziedzictwo
Język: Oznacza to, że klasa może odziedziczyć tylko dla jednej klasy rodzica lub podstawowej. Aby przezwyciężyć ten problem, w języku wprowadzono funkcję: cechy
. W tym artykule zobaczymy, jak go używać i jak to działa.
W tym samouczku nauczysz się:
- Jak używać cech w PHP
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Niezależny od OS |
Oprogramowanie | Php |
Inny | Znajomość koncepcji programowania PHP i podstawowych obiektowych koncepcji programowania |
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
Wprowadzenie cech
PHP jest jednym językiem dziedzictwa: klasa dziecka może odziedziczyć tylko od jednego rodzica . Może to stanowić problem pod względem ponownego użycia kodu, jeśli klasa musi odziedziczyć wiele zachowań: cechy
to sposób na rozwiązanie tego problemu. Zobaczmy, jak. Sposób, w jaki tworzymy cechę, jest bardzo podobny do sposobu, w jaki tworzymy klasę, ale jedną z dużych różnic między cechami i klasami jest to, że cecha nie można utworzyć instancji, ale może być używany tylko w klasie lub wewnątrz innej cechy. Tworzenie cechy jest łatwe:
Kopiuj Kod zawarty w „Taitone” jest bardzo trywialny: po prostu rejestruje wiadomość. Zobaczmy, jak możemy go użyć w klasie:
Test klas Użyj TAITOONE;
Kopiuj Kluczem tutaj jest używać
Słowo kluczowe, które, gdy używane w klasie, „zaimportujmy” funkcje zgrupowane w cechy. Trudno sobie wyobrazić przypadek, w którym klasa, którą stworzyliśmy powyżej, może być przydatna, ponieważ nie ma własnych metod ani właściwości. Ponieważ klasa korzysta z cechy „Taitone”, możemy jednak uzyskać dostęp do metody „log”:
$ test = nowy test (); $ test-> log (); „Jestem metodą zdrady!"
Kopiuj To było dość łatwe, ale to, co się dzieje, gdy klasa ma już metodę o tej samej nazwie jednej zawartej w użyciu cechy ? Sprawdźmy to. Dodajemy metodę „log” do klasy testowej:
Test klas Użyj TAITOONE; log funkcji publicznej () echo "Jestem metodą klasy testowej!";
Kopiuj Jeśli teraz wywołamy metodę „log”, uzyskujemy inny wynik:
$ test = nowy test (); $ test-> log (); „Jestem metodą klasy testowej!"
Kopiuj Co jeśli klasa testowa nie miała metody „log”, ale odziedziczyła ją po rozszerzeniu klasy podstawowej? Zobaczmy:
Base Class public Function log () echo "Jestem metodą klasy podstawowej!"; test klasy rozszerza bazę Użyj TAITOONE; $ test = new test (); $ test-> log ();" Jestem metodą TAITOONE!"
Kopiuj Jak widać, mamy: „Jestem metodą zdrady!”W wyniku wywołania metody dziennika. Oznacza to, że Baza
Metoda klasowa została zastąpiona przez tę wewnątrz cechy. Hierarchia, o której należy pamiętać, jest prosta. Wewnątrz klasy:
- Cechy zastępują odziedziczone metody;
- Obecne metody klasowe zastępują metody cech;
Za pomocą wielu cech
W klasie możemy użyć wielu cech: wszystko, co musimy zrobić, to uwzględnić je po używać
Słowo kluczowe, oddzielone przecinkiem:
Test klas Użyj Traitone, Traittwo;
Kopiuj Użycie wielu cech może jednak tworzyć konflikty nazwy. A błąd krytyczny jest zwracany, jeśli cechy mają metody o tej samej nazwie:
cecha cecha public funkcja log () echo "Jestem metodą cechy!"; cecha traittwo public funkcja log () echo" Jestem metodą traittwo!„; test klas Użyj TAITOONE, TRAITTWO; PHP Fatal Błąd: Dziennik metody cechy nie został zastosowany, ponieważ istnieją zderzenia z innymi metodami cech 1
Kopiuj Co możemy zrobić, aby rozwiązać tego rodzaju konflikty? Możemy użyć zamiast
Operator, z wyłączeniem metody, której nie chcemy używać:
Test klas Użyj Taitone, Traittwo Taitone :: log zamiast traittwo;
Kopiuj Składnia jest bardzo prosta: określiliśmy, że chcemy użyć metody „log” z cechy Traitone, rozwiązując konflikt. Co jeśli chcemy zrobić jak wyżej, ale nadal chcemy zachować funkcjonalność dostarczaną przez metodę „log” od traittwo? Musimy stworzyć Alias
dla tego. Możemy to zrobić za pomocą Jak
operator. W poniższym przykładzie pseudonim „log” jako „traittwo_log”:
Test klas Użyj Taitone, Traittwo Taitone :: log zamiast traittwo; traittwo :: log as traittwo_log;
Kopiuj W ten sposób możemy nadal uzyskać dostęp do metody „log” Traittwo, wywołując ją jako traittwo_log ():
$ test = nowy test (); $ test-> log (); Jestem metodą zdrady! $ test-> traittwo_log (); Jestem metodą traittwo!
Kopiuj Wykorzystanie operatora AS do zmiany widoczności metody cechy
Wewnątrz klasy, Jak
Operator może być również wykorzystany do zmiany widoczności metody importowanej w ramach cechy. W poprzednim przykładzie wszystkie metody cech są publiczny
. Możemy to zmienić w klasie:
klasa test Użyj Traitone log jako chroniony;
Kopiuj Z powyższą składnią stwierdziliśmy, że metoda logarytmiczna z „Taitone” powinna być używana jako chroniony
Nawet jeśli pierwotnie zadeklarowano go publiczny
widoczność. Rzeczywiście, jeśli spróbujemy wywołać metodę dziennika, otrzymujemy błąd:
$ test = nowy test (); $ test-> log (); OSTRZEŻENIE PHP: Błąd nieokreślony: wywołanie chronionej metody test :: log () z kontekstu „W kodzie powłoki PHP: 1
Kopiuj Jeśli podamy nazwę pseudonimu, zmiana widoczności zostanie zastosowana do metody aliasowanej, podczas gdy oryginał zachowa jego widoczność:
klasa test Użyj Taitone log jako chroniony aliased_log; $ test = nowy test (); $ test-> log (); Jestem metodą zdrady! $ test-> aliased_log (); OSTRZEŻENIE PHP: Błąd nieokreślony: wywołanie chronionej metody test :: aliased_log () z kontekstu „W kodzie powłoki PHP: 1
Kopiuj Metody abstrakcyjne i statyczne wewnątrz cechy
Wewnątrz cechy możemy zdefiniować oba abstrakcyjny
I statyczny
metody. W pierwszym przypadku cecha będzie wymagała klasy, która ją używa, aby zapewnić konkretną implementację metody. Błąd śmiertelny zostanie wygenerowany, jeśli klasa nie zaimplementuje metody lub nie jest zadeklarowana jako abstrakcyjna:
Kopiuj Metodę cechy można również zadeklarować i stosować jako statyczny
:
Kopiuj Właściwości cechy
Nie tylko metody, ale także właściwości można zdefiniować w cechach wewnątrz cech, jedyną zasadą do poszanowania jest to, że jeśli właściwość jest zdefiniowana w cechy, klasa, która jej używa, nie może zdefiniować właściwości o tej samej nazwie, chyba że ma ona Ta sama widoczność i wartość początkowa. Oto przykład:
Kopiuj $ Nazwa
Własność jest zdefiniowana w „Taitone”, a także w klasie „testowej”. Oba mają tę samą widoczność (chroniona), ale ich wartość początkowa jest inna, dlatego są uważane za niezgodne, co powoduje błąd śmiertelny.
Zamykanie myśli
W tym artykule nauczyliśmy się wiedzieć cechy
, funkcja, która poprawia ponowne wykorzystanie kodu w PHP. Widzieliśmy, w jaki sposób cech nie można utworzyć, ale używane tylko w klasach, za pośrednictwem używać
Słowo kluczowe. Widzieliśmy, jaka jest kolejność pierwszeństwa, która jest używana, gdy cecha i klasa jest używana do wdrażania metod o tej samej nazwie, jak rozwiązać takie konflikty, używając zamiast
operator i sposób tworzenia aliasów dla metod cech i jak można zmienić ich widoczność za pomocą Jak
operator.
Wreszcie widzieliśmy, jak można również zdefiniować właściwości i metody statyczne lub abstrakcyjne w cenie. Chcesz dowiedzieć się więcej o PHP? Mamy wiele artykułów na ten temat!
Powiązane samouczki Linux:
- Rzeczy do zainstalowania na Ubuntu 20.04
- Jak zbudować aplikację Tkinter za pomocą obiektu zorientowanego na…
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Jak pracować z WooCommerce Rest API z Pythonem
- Jak porównywać wydajność dysku na Linux
- Jak utworzyć stos lampy na bazie Dockera za pomocą Dockera na…
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- Rzeczy do zainstalowania na Ubuntu 22.04
- Jak napisać rozszerzenia Nautilus z Nautilus-Python
- Jak propagować sygnał do procesów dziecka z bash…
- « Jak tworzyć, pakować i podpisywać rozszerzenie internetowe Firefox
- Jak włączyć autologinę na Kali Linux »