php
Podejście do programowania w php:
- proceduralne
- obiektowe
Proceduralny php jest nazywany wtedy kiedy tworzymy kod proceduralnie, procesowo czyli kiedy potrzebujemy stworzyć określone elementy na naszej stronie. Czyli dokładnie w danym miejscu potrzebujemy danych zmiennych, lub danej funkcji więc piszemy cały kod właśnie tutaj.
Prosty przykład takiego kodu:
$pet = 'cat'; $name = 'Whiskey'; function getPetInfo($pet, $name) { return "my pet is a " . $pet . " and her name is " . $name . "."; } echo getPetInfo($pet, $name);
Object oriented php programing czyli programowanie zorientowane obiektowo – tutaj używamy klas (classes) i obiektów (objects). Praktyką jest by w projekcie stworzyć odpowiedni namespaces tak by móc kategoryzować tworzone klasy tak by wszystko było lepiej usystematyzowane. Najprostszym sposobem na to jest stworzyć folder o nazwie Classes a w nim plik php z nazwą klasy jaka w nim tworzymy. Tutaj przyjmuje się zasadę ze nazwy klas zaczynają się od dużych liter czyli jeśli plik ma zawierać klasę Pet wtedy nazywamy go Pet.php.
Tworzenie Class i czym to jest?
Class można potraktować jako wzorzec lub plan, instrukcję jak wytworzyć dany element. Co ważne w oparciu a ten plan możemy wytworzyć tak wiele „rzeczy” na jego podstawie ile chcemy. Co istotne w takim planie mamy pare miejscy na decyzję, np. odnośnie koloru, nie musimy wytwarzać wszystkich „rzeczy” w zielonym kolorze ale możemy podawać dowolnie potrzebne parametry.
Tworzymy poprzez wywołanie class i podanie jej nazwy (zgodnie z przyjętym standardem z Dużej pierwszej litery) a następnie otwieramy nawiasy klamrowe {}.
Wewnątrz class mamy properties (właściwości) i methods (metody). W pewien sposób powinniśmy traktować properties jak zmienne a methods jako funkcje. To nie są te same pojęcia ale na tyle podobne, że jako początkujące osoby możemy tak, dla ułatwienia wyjascienia, podejść.
properties – zwane też czasem fields, to informacje o konkretnym obiekcie,
methods – tutaj zawieramy instrukcje co ten obiekt robi, te instrukcje są ściśle skorelowane z obiektem w jakim się znajdują.
Visibility modifiers – jest to sposób dostania się do wnętrza class i zaznaczenia kto ma dostęp informacji i instrukcji (czyli properties i methods).
Tyczy się to enkapsulacji w programowaniu (encapsulation) czasami zwana też hermetyzacją. Oznacza to że bierzemy kod i enkapsulujemy go wewnątrz class dzięki czemu tylko określone elementy mają dostęp do tych zasobów. Dzięki temu mamy większą kontrolę nad tym co dzieje się z tym kodem i na co on wpływa lub gdzie wywiera efekt lub kto ma do niego dostęp.
Visibility modifiers określamy przez oznaczenie properties czy są
- private – czyli tylko ta konkretna class ma dostęp do tych danych
- protected – również class które będą dziećmi (child class) i będą ją rozszerzały (extended) będą miały dostęp do tych informacji,
- public – informacje są dostępne wszędzie i dla wszystkich
Dobra praktyką jest ustawianie pierw wszystkiego na private a następnie zadajesz sobie pytanie czy istnieje tai przypadek ze te informacje bede potrzebne gdzieś na zewnątrz i w miarę potrzeby, zwiększanie zakresu dostępności.
Również na początku nie definiujesz zawsze wartości properties, gdyż zazwyczaj tworząc nowy obiekt na podstawie class, chcesz podać jakie mają być jego parametry, chyba że są to parametry które zawsze pozostają takie same.
Constructor – jest to method wewnątrz class, która zostanie uruchomiona zawsze kiedy stworzysz obiekt na podstawie tej class i tworzymy ją wykorzystując predefiniowane określenie __construct jako public function __construct() {}.
Kiedy wszystko poprawnie tworzymy, czyli nasze zdefiniowane properties nie maja z góry narzuconej wartości, właśnie w funkcji __construct pozwalamy na przypisanie im dowolnych wartości podczas wywołania class.
W tworzonej funkcji, kiedy podajemy jej parametry następnie musimy przypisać ich wartość do properties class. Bardzo ważnym spostrzeżeniem jest, że parametry jakie zamieszczamy w nawiasach okrągłych () za raz po __construct to inaczej placeholdery i nie są tymi samymi wartościami co properties. Jest to trochę mylące bo zazwyczaj mają one te same nazwy, ale trzeba pamiętać że to nie to samo.
Aby przypisać wartość placeholderom z nawiasów okrągłych () properties, wewnątrz konstruktora __construct używamy odwołania this->name i jako name podajemy nazwę odpowiedniej property. W przykładzie poniżej nazwom wartości przekazywanych z nawiasów okrągłych dodałam ostatnia dużą literę C dla zaznaczenia które wartości nie są tymi samymi i dlaczego musimy je właśnie przypisać.
class Pet { //Properties / Fields private $name; private $color; public $type = 'cat'; // Constructor public function __construct($nameC, $colorC) { $this->name = $nameC; $this->color = $colorC; } }
Następnie, tworząc obiekt na podstawie stworzonej class definiujemy jego 2 wartości – properties poprzez:
$pet01 = new Pet('Whiskey', 'grey');
Innym wariantem ustawienia wartości properties jest dodanie wartości podstawowej przy definiowaniu funkcji __construct i podanie jej zaraz po nazwie zmiennej __construct($nameC, $colorC = 'black’), wtedy jeśli przy tworzeniu nowego obiektu z class nie podamy wartości, zostanie przypisana ta wzorcowa.
W tworzonym obiekcie mamy dostęp do wszystkich informacji zawartych w class które są public, wtedy możemy pobrać je za pomocą strzałki, odwołania do properties echo $pet01->type;
Oczywiście wszystkie czynności tworzenia obiektu i pobierania danych powinny być wykonywane w innym pliku i wtedy aby móc korzystać ze stworzonej class pierw musimy się do niej odwołać poprzez require_once 'Classes/Pet.php';
Kolejną dobrą praktyką przy pobieraniu wartości z class jest zamiast ustawiać wartości na public jest tworzenie getterów/setterów czyli metod get i set.
Jest bardzo dobrym podejściem separowanie funkcjonalności wewnątrz class w ten sam sposób jak dobra praktyką jest separowanie funkcjonalności używając różnych funkcji
Object Oriented Programing zawiera jeszcze pojęcia takie jak: design patterns, MVC model
Zmienne:
przypisanie wartości:
$myVariable=”This is my variable”;
$myVariable=33;
$myVariable=true;
$myVariable=(20*5);
Stałe:
define(„NAME_OF_MY_CONSTANT”, „text”);
define(„NAME_OF_MY_CONSTANT”, 333);
Tablica asocjacyjna:
$associate=array(„key1″=>”value1″,”key2″=>”value2”);
Tablice z kluczem numerycznym – wpisanie elementów:
$numeric=array(„e10″,”e1″, 3, true);
$assoNum=array(0=>’value”,1=>”value”,2=>”value”);
Obiekty – tworzone poprzez zdefiniowanie klasy:
<?php   class PropMethod { private $propString="to jest tekst"; private $propNum = 3; private $propBool = true; public function showString { echo $this->propString; } } $obiekt = new PropMethod(); echo $obiekt->showString(); ?>
Typ logiczny
true/false – 1/0
true+true=2
true*false=0
w PHP obiekt i jego właściwości oddzielamy strzałką ->
w Javascript kropką .
myObject->myProp=20; //PHP
myObject.myProp=20; //JavaScript
Operatory PHP
- przypisania = , przypisanie wartości do zmiennej
$sampleNum=20; $sampleNum +=50; echo $sampleNum; $sampleString=”Mount”; $sampleString .=” Everset”; echo $sampleString; wynik:70 wynik: Mount Everest
- arytmetyka
- + dodawanie
- – odejmowanie
- / dzielenie
- * mnożenie
- % modulo – reszta liczby całkowitej po dzieleniu
<?php for ($count = 1; $count <= 12; $count++) { $valid = $count % 2; if ($valid) { echo $count, " jest parzysta"; } else { echo $count, " jest nie parzysta"; } } ?>
funkcje:
- urlencode – przetwarzanie odnośnika przez Bezpiecznie wyświetlał SIĘ Jako parametr w innym adresem url
- substr (ciąg, start, długość) – zwraca wskazaną CZĘŚĆ łańcucha znakow, Gdzie:
- Łańcuch – Łańcuch z którego pobieramy
- start – wskazanie znaků od którego pobieramy, poprzez:
- liczba dodatnia (np.6) – Który znak od początku łańcucha,
- liczba ujemna (np.-6) – Który znak od Konca łańcucha,
- 0 – Początek łańcucha
- Długość – Długość wyrażona poprzez:
- dodatnia liczba (np.300) – liczona od początku łańcucha,
- liczba ujemna (np.-300) – liczona od Konca łańcucha
- strip_tags – usuwa znaczniki HTML, XML, PHP z łańcucha znakow
- mail()
- mb_strtolower – zamienia ciąg znaków na małe litery
- trim(” Hello World! „, ” „); – usuwa wskazane znaki z początku i końca łańcucha,
- explode(’/’, wyrażenie); – dzieli wyrażenie na elementy tablicy poprzez element podany jako pierwszy parametr
- ucfirst(’ ’) – pierwsza litera wyrażenia wielka,
- number_format() – formatowanie liczb w tysiącach w zależności od podanych parametrów (jednego, dwóch lub czterech, nie przyjmuje trzech parametrów:
-
- echo number_format(„3000000”); -> 3,000,000
- echo number_format(„3000000”,2); -> 3,000,000.00
- echo number_format(„3000000″,2,”,”,”.”); -> 3.000.000,00
- $time = number_format(sprintf(’%0.2f’, $qrow[1] * 1000),2, ’.’, ’,’);
-
- sprintf() – zamienia % na zmienną przekazaną jako argument
- sprintf(„%f”,0.2); -> 0.200000
- sprintf(„%u”,954.65); -> 954
- możliwe formaty:
- %% – Returns a percent sign
- %b – Binary number
- %c – The character according to the ASCII value
- %d – Signed decimal number (negative, zero or positive)
- %e – Scientific notation using a lowercase (e.g. 1.2e+2)
- %E – Scientific notation using a uppercase (e.g. 1.2E+2)
- %u – Unsigned decimal number (equal to or greather than zero)
- %f – Floating-point number (local settings aware)
- %F – Floating-point number (not local settings aware)
- %g – shorter of %e and %f
- %G – shorter of %E and %f
- %o – Octal number
- %s – String
- %x – Hexadecimal number (lowercase letters)
- %X – Hexadecimal number (uppercase letters)
- dodatkowe wartości formatu umieszczane pomiędzy % a literą – %.2f
- + (Forces both + and – in front of numbers. By default, only negative numbers are marked)
- ’ (Specifies what to use as padding. Default is space. Must be used together with the width specifier. Example: %’x20s (this uses „x” as padding)
- – (Left-justifies the variable value)
- [0-9] (Specifies the minimum width held of to the variable value)
- .[0-9] (Specifies the number of decimal digits or maximum string length)
Kiedy mamy plik .php i piszemy w nim tylko w języku php to nie dajemy ostatniego, zamykającego znacznika php ?> bo może to powodować nie oczekiwane błędy.
Hope this helps and happy coding :)
Zobacz jeszcze
środkowanie treści w responsywnym kwadratowym bloku
.porto-single-full{ width:50%; float:left; overflow: hidden; padding-bottom: 50%; position: relative; background-color:red; background-position: center center; background-repeat:...