Latest web development tutorials
×

PHP kurs

PHP kurs PHP krótkie wprowadzenie PHP zainstalować PHP gramatyka PHP zmienna PHP echo/print PHP Typy danych PHP stały PHP sznur PHP operatorzy PHP If...Else PHP Switch PHP szyk PHP Sortowanie tablicy PHP superglobalne PHP While krążenie PHP For krążenie PHP funkcja PHP Magiczne Zmienne PHP Przestrzenie nazw PHP Obiektowe

PHP forma

PHP forma PHP Uwierzytelnianie za pomocą formularzy PHP forma - wymagane pola PHP forma - Weryfikacja e-mail i adres URL PHP Kompletna wystąpienie formularza PHP $_GET zmienna PHP $_POST zmienna

PHP zaawansowane Tutorial

PHP Tablice wielowymiarowe PHP data PHP zawierać PHP plik PHP Prześlij plik PHP Cookie PHP Session PHP E-mail PHP bezpieczeństwo E-mail PHP Error PHP Exception PHP filtr PHP Filtr zaawansowany PHP JSON

PHP 7 Nowe funkcje

PHP 7 Nowe funkcje

PHP baza danych

PHP MySQL krótkie wprowadzenie PHP MySQL połączenie PHP MySQL Tworzenie bazy danych PHP MySQL Tworzenie tabeli danych PHP MySQL Należy wprowadzić dane PHP MySQL Wstawić wiele danych PHP MySQL Przygotowane sprawozdania PHP MySQL odczytać dane PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX krótkie wprowadzenie AJAX PHP AJAX baza danych AJAX XML AJAX Wyszukiwanie w czasie rzeczywistym AJAX RSS Reader AJAX głosowanie

PHP Reference Manual

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Przetwarzanie obrazu PHP RESTful

PHP obiektowe

W programowaniu obiektowym (angielski: Programowanie obiektowe, skrót: OOP), których celem jest opis przetwarzania informacji i informacyjnej obejmującej całość, jest prawdziwy świat abstrakcji.

Rzeczy są obiekty w świecie rzeczywistym, że mamy do czynienia, takie jak komputery, telewizory, rowery.

Trzy główne cechy obiektu:

  • Zachowanie obiektu: obiekt, który może być zastosowany do pracy, włącz światła, wyłącz światła jest zachowania.
  • Obiekt Postać: Przy stosowaniu tych metod jest to, jak reaguje na obiekt, kolor, wielkość, kształt.
  • Reprezentacja obiektu: obiekt stanowiłaby równowartość co najmniej tożsamości, specjalnie odróżnić to, co jest inne w tym samym zachowania i stanu.

Na przykład, zwierząt (zwierząt) jest klasą abstrakcyjną, możemy być specyficzne dla owiec z psem, a pies z owcami jest konkretny cel, mają atrybut koloru, można napisać, można uruchomić inne akty stanu.


Zawartość zorientowane obiektowo

  • Klasa - definiuje abstrakcyjnych cech rzeczy.Definicja klasy zawiera dane formularzy i operacje na danych.

  • Przedmioty - jest instancją klasy.

  • Zmienne użytkownika - zmienne zdefiniowane w klasie.Wartość zewnętrzna zmiennej nie jest widoczna, ale można uzyskać przez metody, gdy klasa jest tworzony jako obiekt, właściwości tego obiektu mogą być nazywane zmienną.

  • Funkcja element - zdefiniowana wewnątrz danej klasy mogą być wykorzystywane dla dostępu do danych obiektów.

  • Dziedziczenie - Dziedziczenie jest podklasą automatycznego dzielenia struktur i metod klasy nadrzędnej, która jest związek między klasami danych.W określaniu i realizacji klasy, mogą przyjść w takiej bazie istnieje już przeprowadzone, to już istniejącej klasy zdefiniowane przez zawartość ich treść i dodać jakieś nowe treści.

  • Dominująca klasa - klasa dziedziczone przez innych klas, klasy można nazwać rodzic klasa, grupa lub klasa, lub nadklasą.

  • Podklasa - klasa, która dziedziczy inną klasę nazywa podklasą mogą być również nazywane klasa pochodna.

  • Polimorfizm - Polimorfizm odnosi się do samego procesu lub funkcji, proces ten może być stosowany do różnych typów przedmiotów, uzyskać różne rezultaty.Różne przedmioty, pojawia się ten sam komunikat może dawać różne wyniki, zjawisko to nazywa się polimorfizmem.

  • Przeciążenie - Krótko mówiąc, jest to funkcja lub metoda o tej samej nazwie, ale lista parametr nie jest ta sama sytuacja, taka funkcja lub metoda pomiędzy różnymi parametrami o tej samej nazwie, każdy przeciążony funkcja lub metoda jest wywoływana.

  • Streszczenie - Skrót odnosi się do konieczności spójnej struktury danych (atrybuty) i zachowania (operacji) obiektów na klasy.Taka klasa jest abstrakcją, to odzwierciedla ważne właściwości związane z aplikacją, przy jednoczesnym ignorowaniu innych niepowiązanych treści. Każdy podział klasy jest subiektywna, ale musi być związane z konkretnym zastosowaniu.

  • Package - Pakiet odnosi się do właściwości i zachowanie obiektu w realnym świecie istnieje związać ze sobą i umieszczone w logicznej jednostce.

  • Konstruktor - stosowane głównie w celu zainicjowania obiektu podczas tworzenia obiektu, obiekt zostanie przypisana wartość początkową zmiennej członkiem, zawsze należy użyć instrukcji tworzenia obiektu z nowym operatorem.

  • Destructor - destruktor (destruktor) oraz konstruktor Natomiast kiedy koniec przedmiotem jego cyklu życia (na przykład, gdy obiekt jest wywołanie funkcji jest zakończone), system automatycznie wykonuje destruktora.Destruktory są często używane, aby "oczyścić następstwa" pracy (na przykład podczas tworzenia obiektu na nowy otwarty pamięci powinien być stosowany przed wyjściem w destructor usuwać uwalnianie).

Poniższy rysunek tworzymy trzy obiekty klasy samochodów: Mercedes, BMW, Audi.

$mercedes = new Car ();
$bmw = new Car ();
$audi = new Car ();


Definicja klasy PHP

PHP Własna klasa zazwyczaj składnia jest następująca:

<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>

Interpretować w następujący sposób:

  • Po klasieza pomocą słowa kluczowego classplus nazwę definicji klasy.

  • Para szelki po nazwie klasy mogą definiować zmienne i metody ({}) wewnątrz.

  • Zmienne klasy przy użyciuvar zadeklarować zmienne mogą być inicjowane wartości.

  • Definicja funkcji PHP jest podobna do definicji funkcji, ale funkcja ta może być dostępna tylko przez klasę i jej instancji obiektów.

Przykłady

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
     echo $this->url . PHP_EOL;
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}
?>

$ Zmienna tareprezentuje swoich obiektów.

PHP_EOL nowej linii.


PHP do tworzenia obiektów

Po utworzeniu klasy, możemy użyć operatoranew instancję obiektu klasy:

$w3big = new Site;
$taobao = new Site;
$google = new Site;

Powyższy kod tworzymy trzy obiekty, każdy z trzech obiektów są niezależne, a następnie przyjrzymy się, jak uzyskać dostęp do metod członkowskich i zmienne składowe.

Wywołuje metodę użytkownika

Po obiekt jest tworzony, możemy użyć obiektu wywołać metodę członkowskim, metoda obiektu może być jedynie członkiem działającej zmiennej użytkownik obiektu:

// 调用成员函数,设置标题和URL
$w3big->setTitle( "本教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );

$w3big->setUrl( 'www.w3big.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );

// 调用成员函数,获取标题和URL
$w3big->getTitle();
$taobao->getTitle();
$google->getTitle();

$w3big->getUrl();
$taobao->getUrl();
$google->getUrl();

Pełen kod jest następujący:

Przykłady

<? Php
Klasa Site {
/ * * Zmienne użytkownika /
var $ url;
var $ title;

/ * Funkcja Użytkownik * /
Funkcja setUrl ($ par) {
$ This -> URL = $ par ;
}

Funkcja getUrl () {
. Echo $ this -> PHP_EOL url ;
}

Funkcja setTitle ($ par) {
$ This -> title = $ par ;
}

funkcjonować getTitle () {
echo $ this -> Tytuł PHP_EOL. ;
}
}

$ W3big = nowe strony;
$ Taobao = new strony;
$ Google = new strony;

// Funkcja państwa jest powołany, aby ustawić tytuł i adres URL
$ W3big -> setTitle ( "tutorial");
$ Taobao -> setTitle ( "Taobao");
$ Google -> setTitle ( "Google Search");

$ W3big -> setUrl ( "www.w3big.com ');
$ Taobao -> setUrl ( "www.taobao.com ');
$ Google -> setUrl ( "www.google.com ");

// Wywołanie funkcji member aby zdobyć tytuł i adres URL
$ W3big -> getTitle ();
$ Taobao -> getTitle ();
$ Google -> getTitle ();

$ W3big -> getUrl ();
$ Taobao -> getUrl ();
$ Google -> getUrl ();
?>

Uruchomienie instancji »

Realizacja powyższego kodu, wyjście jest:

本教程
淘宝
Google 搜索
www.w3big.com
www.taobao.com
www.google.com

PHP Konstruktor

Konstruktor to specjalna metoda. Głównie używany do zainicjowania obiektu podczas tworzenia obiektu, obiekt zostanie przypisana wartość początkową zmiennej członkiem, zawsze należy użyć instrukcji tworzenia obiektu z nowym operatorem.

PHP 5 pozwala programistom definiować metody wiersz w klasie jako konstruktor składnia jest następująca:

void __construct ([ mixed $args [, $... ]] )

W powyższym przykładzie, możemy zainicjować zmienną $ url i tytułowy USD za pośrednictwem konstruktora:

function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}

Teraz nie musimy wezwać setTitle metody i setUrl:

Przykłady

$ W3big = nowej witryny ( "www.w3big.com ", " poradnik");
$ Taobao = nowa strona ( "www.taobao.com ',' Taobao ');
$ = New Google Site ( "www.google.com ", "Google search ');

// Wywołanie funkcji member aby zdobyć tytuł i adres URL
$ W3big-> getTitle ();
$ Taobao-> getTitle ();
$ Google-> getTitle ();

$ W3big-> getUrl ();
$ Taobao-> getUrl ();
$ Google-> getUrl ();

Uruchomienie instancji »

burzyciel

Destructor (destruktor) oraz konstruktor Natomiast kiedy koniec przedmiotem jego cyklu życia (na przykład, gdy obiekt jest wywołanie funkcji jest zakończone), system automatycznie wykonuje destruktora.

PHP 5 wprowadza pojęcie destructor, który jest podobny do innych języków obiektowych, składnia jest następująca:

void __destruct ( void )

Przykłady

<?php
class MyDestructableClass {
   function __construct() {
       print "构造函数\n";
       $this->name = "MyDestructableClass";
   }

   function __destruct() {
       print "销毁 " . $this->name . "\n";
   }
}

$obj = new MyDestructableClass();
?>

Realizacja powyższego kodu, wyjście jest:

构造函数
销毁 MyDestructableClass

dziedziczyć

PHP słowa kluczowegorozciąga dziedziczyć klasy, PHP nie obsługuje wielokrotnego dziedziczenia, w następującym formacie:

class Child extends Parent {
   // 代码部分
}

Przykłady

Przykład Child_Site klasa dziedziczy klasę strony i rozszerza funkcjonalność:

<?php 
// 子类扩展站点类别
class Child_Site extends Site {
   var $category;

	function setCate($par){
		$this->category = $par;
	}
  
	function getCate(){
		echo $this->category . PHP_EOL;
	}
}

metoda nadpisania

Jeśli nie można zaspokoić potrzeby podklasa dziedziczy metody klasy nadrzędnej, może zostać przepisany, proces zwany metodą nakładki (override), znany również jako metoda nadrzędnego.

Przykład przepisany getUrl i getTitle metody:

function getUrl() {
   echo $this->url . PHP_EOL;
   return $this->url;
}
   
function getTitle(){
   echo $this->title . PHP_EOL;
   return $this->title;
}

Kontrola dostępu

PHP na właściwości lub metody kontroli dostępu uzyskuje się przez dodanie słów kluczowych w przedniej części społeczeństwa (publicznym), chronione (chronione) lub prywatny (private) do osiągnięcia.

  • publicznego (Public): członek public class można uzyskać w dowolnym miejscu.
  • chroniony (zabezpieczony): protected członkiem klasy można uzyskać poprzez własne, jak również jego podklasy i klasą dominującą.
  • prywatne (private) mogą być dostępne tylko dla członków prywatnych klasy, w których definicja klasy.

Atrybuty kontroli dostępu

atrybutem klasy muszą być definiowane jako publiczne, chronione, prywatną. Jeżeli zdefiniowana var, uważa się publicznego.

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2 和 Undefined

?>

Metody kontroli dostępu

Metoda w klasie może być zdefiniowana jako publiczna, prywatna lub zabezpieczone. Jeśli nie ustawić te słowa kluczowe, domyślne metody do publicznej wiadomości.

<?php
/**
 * Define MyClass
 */
class MyClass
{
    // 声明一个公有的构造函数
    public function __construct() { }

    // 声明一个公有的方法
    public function MyPublic() { }

    // 声明一个受保护的方法
    protected function MyProtected() { }

    // 声明一个私有的方法
    private function MyPrivate() { }

    // 此方法为公有
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // 公有,受保护,私有都可以执行


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 此方法为公有
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }

    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>

Interfejs

Za pomocą interfejsu (interface) można określić, które musi implementować metody klasy, ale nie ma potrzeby, aby określić konkretną treść tych metod.

Interfejs jest określonaprzez parametr interfejsu,takie jak określenie standardowej klasy, ale który definiuje wszystkie metody są puste.

Wszystkie metody zdefiniowane w interfejsie musi być publiczna, która jest charakterystyczna dla interfejsu.

Aby zaimplementować interfejs, użyj operatoranarzędzi.Klasa musi wdrożyć wszystkie metody zdefiniowane w interfejsie, albo zgłosi błąd krytyczny. Klasa może implementować wiele interfejsów, należy użyć przecinków, aby oddzielić nazwy wielu interfejsów.

<?php

// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

stały

Można umieścić w klasie pozostają te same wartości zdefiniowane jako stałe. W sprawie definicji i korzystania ze stałych czasowych nie trzeba używać $ symbol.

Wartość stałej musi być wartością stałą, a nie zmienną, atrybuty klasy, wyniki matematyczne lub wywołanie funkcji.

Od PHP 5.3.0 roku, można użyć zmiennej dynamicznie wywołać klasy. Jednak wartość zmiennej nie może być słowem kluczowym (np ja, rodzic lub statyczne).

Przykłady

<?php
class MyClass
{
    const constant = '常量值';

    function showConstant() {
        echo  self::constant . PHP_EOL;
    }
}

echo MyClass::constant . PHP_EOL;

$classname = "MyClass";
echo $classname::constant . PHP_EOL; // 自 5.3.0 起

$class = new MyClass();
$class->showConstant();

echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
?>

Klasa abstrakcyjna

Każda klasa, czy zawiera on co najmniej jedną z metod jest zadeklarowana abstrakcyjna, to klasa musi być zadeklarowany jako abstrakcyjny.

Definiuje się jako klasa abstrakcyjna nie może być instancja.

Jest zdefiniowany jako abstrakcyjną metodę deklaruje tylko swoje powołanie (parametry), nie można zdefiniować konkretnej implementacji funkcji.

Dziedziczą abstrakcyjne klasy, podklasy muszą wszystkie definicje metoda klasy abstrakcyjnej rodzic; Ponadto, dostęp do tych metod kontroli i klasy dominującej musi być taka sama jak (lub bardziej zrelaksowany). Na przykład abstrakcyjny sposób deklarowana jest chroniony, to metoda wdrożone w podklasie powinny być zadeklarowane jako chronione lub publiczne, ale nie mogą być zdefiniowane jako prywatne. nazywany również metodą musi się zgadzać, to jest rodzaj i liczba wymaganych parametrów muszą być spójne. Na przykład, podklasą określa opcjonalny parametr, i deklarację klasy rodzic abstrakcyjnej metody nie ma, to nie ma konfliktu między tymi dwoma stwierdzeniami.

<?php
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . PHP_EOL;
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>

Realizacja powyższego kodu, wyjście jest:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

statyczny słowo

Zadeklarować właściwości lub metod klasy jako statyczne (Static), nie można utworzyć wystąpienia klasy i bezpośredni dostęp.

Właściwość statyczna przez klasie nie może być instancja obiektu dostępu (ale metoda statyczna może).

Ponieważ metody statyczne nie są wymagane, aby zadzwonić za pośrednictwem obiektu, pseudo-$ zmienna ta nie jest dostępna w metodzie statycznej.

Aby uzyskać dostęp do operatora> - Właściwość statyczna nie przez pacjenta.

Od PHP 5.3.0 roku, można użyć zmiennej dynamicznie wywołać klasy. Jednak wartość zmiennej nie może być słowem kluczowym ja, rodzic lub statyczne.

<?php
class Foo {
  public static $my_static = 'foo';
  
  public function staticValue() {
     return self::$my_static;
  }
}

print Foo::$my_static . PHP_EOL;
$foo = new Foo();

print $foo->staticValue() . PHP_EOL;
?>	

Powyższy program, wyjście jest:

foo
foo

Ostateczne słowo

PHP 5 dodaje ostatecznego słowa kluczowego. Jeśli metoda klasy nadrzędnej jest zadeklarowana wersja ostateczna, podklasa nie może zastąpić tę metodę. Jeśli klasa jest zadeklarowana wersja ostateczna, nie może być dziedziczona.

Następujący błąd wykonanie kodu:

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called" . PHP_EOL;
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called"  . PHP_EOL;
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called"  . PHP_EOL;
   }
}
// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Zadzwoń do konstruktora klasy nadrzędnej

PHP nie automatycznie wywołać konstruktor klasy nadrzędnej w konstruktorze podklasy. Aby wykonać konstruktora klasy nadrzędnej, musimy zadzwonić dorodzica w konstruktorze podklasy :: __ construct ().

<?php
class BaseClass {
   function __construct() {
       print "BaseClass 类中构造方法" . PHP_EOL;
   }
}
class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();  // 子类构造方法不能自动调用父类的构造方法
       print "SubClass 类中构造方法" . PHP_EOL;
   }
}
class OtherSubClass extends BaseClass {
    // 继承 BaseClass 的构造方法
}

// 调用 BaseClass 构造方法
$obj = new BaseClass();

// 调用 BaseClass、SubClass 构造方法
$obj = new SubClass();

// 调用 BaseClass 构造方法
$obj = new OtherSubClass();
?>

Powyższy program, wyjście jest:

BaseClass 类中构造方法
BaseClass 类中构造方法
SubClass 类中构造方法
BaseClass 类中构造方法