Jak skutecznie ponownie wykorzystać kod PHP - Wprowadzenie do cech PHP

Jak skutecznie ponownie wykorzystać kod PHP - Wprowadzenie do cech PHP

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

Wymagania oprogramowania i konwencje linii poleceń Linux
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:

  1. Cechy zastępują odziedziczone metody;
  2. 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…