Latest web development tutorials
×

PHP kuliah

PHP kuliah PHP pengantar singkat PHP memasang PHP tatabahasa PHP variabel PHP echo/print PHP Jenis Data PHP konstan PHP tali PHP operator PHP If...Else PHP Switch PHP susunan PHP Sorting array PHP superglobals PHP While sirkulasi PHP For sirkulasi PHP fungsi PHP Variabel sihir PHP Ruang nama PHP Berorientasi Objek

PHP bentuk

PHP bentuk PHP bentuk Authentication PHP bentuk - bidang yang harus diisi PHP bentuk - email verifikasi dan URL PHP contoh bentuk lengkap PHP $_GET variabel PHP $_POST variabel

PHP canggih Tutorial

PHP Array multidimensi PHP tanggal PHP berisi PHP berkas PHP Upload File PHP Cookie PHP Session PHP E-mail PHP keamanan E-mail PHP Error PHP Exception PHP filter PHP filter lanjutan PHP JSON

PHP 7 Fitur baru

PHP 7 Fitur baru

PHP database

PHP MySQL pengantar singkat PHP MySQL koneksi PHP MySQL Membuat database PHP MySQL Buat tabel data PHP MySQL memasukkan data PHP MySQL Menyisipkan beberapa data yang PHP MySQL Laporan disiapkan PHP MySQL membaca data 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 pengantar singkat AJAX PHP AJAX database AJAX XML AJAX pencarian real-time AJAX RSS Reader AJAX suara

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 image Processing PHP RESTful

PHP Object-Oriented

Dalam pemrograman berorientasi objek (Inggris: pemrograman berorientasi objek, Singkatan: OOP), objek adalah deskripsi dari pengolahan informasi dan informasi yang terdiri dari keseluruhan, adalah abstraksi dunia nyata.

Hal-hal yang objek di dunia nyata yang kita hadapi, seperti komputer, televisi, sepeda.

Tiga karakteristik utama dari objek:

  • Perilaku objek: sebuah objek yang dapat diterapkan untuk operasi, menyalakan lampu, mematikan lampu adalah perilaku.
  • Bentuk objek: Ketika menerapkan metode tersebut adalah bagaimana menanggapi objek, warna, ukuran, bentuk.
  • Representasi dari objek: objek yang mewakili setara identitas, khususnya membedakan apa yang berbeda dalam perilaku dan negara yang sama.

Misalnya, Animal (hewan) adalah kelas abstrak, kita dapat spesifik untuk domba dengan anjing, dan anjing dengan domba adalah target khusus, mereka memiliki atribut warna, Anda dapat menulis, Anda dapat menjalankan tindakan-tindakan lain negara.


konten berorientasi objek

  • Kelas - mendefinisikan karakteristik abstrak dari suatu hal.definisi kelas berisi bentuk data dan operasi pada data.

  • Benda - adalah turunan dari kelas.

  • variabel anggota - variabel yang didefinisikan dalam kelas.Nilai eksternal dari variabel tersebut tidak terlihat, tetapi dapat diakses oleh fungsi anggota, setelah kelas ini dipakai sebagai objek, sifat-sifat objek dapat disebut variabel.

  • fungsi anggota - yang didefinisikan dalam kelas dapat digunakan untuk objek akses data.

  • Warisan - Warisan adalah subclass dari berbagi otomatis struktur data dan metode kelas induk, yang merupakan hubungan antara kelas.Dalam definisi dan pelaksanaan kelas, mereka bisa datang dalam dasar seperti tersebut telah ada dilakukan, ini kelas yang sudah ada seperti yang didefinisikan oleh isi dari konten mereka, dan menambahkan beberapa konten baru.

  • kelas induk - kelas diwariskan oleh kelas-kelas lain, kelas dapat disebut induk kelas, kelompok atau kelas, atau superclass.

  • Subclass - kelas yang mewarisi kelas lain disebut subclass dapat juga disebut kelas turunan.

  • Polimorfisme - polimorfisme mengacu pada operasi atau fungsi yang sama, proses dapat diterapkan pada beberapa jenis objek dan mendapatkan hasil yang berbeda.objek yang berbeda, Anda menerima pesan yang sama dapat menghasilkan hasil yang berbeda, fenomena ini disebut polimorfisme.

  • Overload - singkat, itu adalah fungsi atau metode dengan nama yang sama, tetapi daftar parameter tidak situasi yang sama, fungsi seperti atau metode antara parameter yang berbeda dengan nama yang sama, masing-masing fungsi kelebihan beban atau metode ini disebut.

  • Abstrak - Abstrak mengacu untuk memiliki struktur yang konsisten data (atribut) dan perilaku (operasi) dari benda ke dalam kelas.kelas tersebut adalah sebuah abstraksi, itu mencerminkan sifat penting yang terkait dengan aplikasi tersebut, sementara mengabaikan konten yang tidak terkait lainnya. Setiap divisi kelas subjektif, tetapi harus terkait dengan aplikasi tertentu.

  • Paket - paket mengacu pada sifat dan perilaku sebuah objek di dunia nyata ada untuk mengikat bersama-sama dan ditempatkan di unit logis.

  • Konstruktor - terutama digunakan untuk menginisialisasi objek ketika Anda membuat sebuah objek, objek tersebut ditetapkan nilai awal dari variabel anggota, selalu menggunakan pernyataan pembuatan obyek dengan operator baru.

  • Destructor - destructor (destructor) dan konstruktor Sebaliknya, ketika akhir objek siklus hidupnya (misalnya, di mana objek adalah fungsi panggilan selesai), sistem akan secara otomatis melakukan destructor.Destructors sering digunakan untuk membuat "membersihkan setelah" pekerjaan (misalnya, ketika Anda membuat sebuah objek dengan yang baru membuka ruang memori harus digunakan sebelum keluar di destructor menghapus rilis).

Gambar berikut kami membuat tiga objek kelas Mobil: Mercedes, BMW, dan Audi.

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


definisi kelas PHP

PHP kelas kustom biasanya sintaks adalah sebagai berikut:

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

Diartikan sebagai berikut:

  • Setelah kelasdengan menggunakan kata kunci classditambah nama definisi kelas.

  • Sepasang kawat gigi setelah nama kelas dapat mendefinisikan variabel dan metode ({}) di dalam.

  • variabel kelas menggunakanvar mendeklarasikan variabel juga dapat diinisialisasi nilai.

  • Fungsi PHP definisi mirip dengan definisi fungsi, tetapi fungsi hanya dapat diakses melalui kelas dan objek yang dipakai.

contoh

<?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;
  }
}
?>

$ Variabel inimerupakan benda mereka.

PHP_EOL baris baru.


PHP untuk membuat objek

Setelah kelas dibuat, kita dapat menggunakan operatorbaru untuk instantiate objek dari kelas:

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

Kode di atas kita membuat tiga benda, masing-masing tiga objek yang independen, maka kita melihat bagaimana untuk mengakses metode anggota dan variabel anggota.

Panggilan metode anggota

Setelah objek yang dipakai, kita bisa menggunakan objek untuk memanggil metode anggota, metode dari objek hanya dapat menjadi anggota dari variabel anggota operasi dari objek:

// 调用成员函数,设置标题和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();

Kode lengkap adalah sebagai berikut:

contoh

<? Php
class Site {
/ * * Variabel Anggota /
var $ url;
var $ title;

/ * Fungsi Anggota * /
Fungsi setUrl ($ par) {
$ Ini -> url = $ par ;
}

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

Fungsi setTitle ($ par) {
$ Ini -> title = $ par ;
}

berfungsi getTitle () {
echo $ this -> judul PHP_EOL. ;
}
}

$ W3big = Situs baru;
$ Taobao = new Situs;
$ Google = new Situs;

// Fungsi Anggota dipanggil untuk mengatur judul dan 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 ');

// Panggil fungsi anggota untuk mendapatkan gelar dan URL
$ W3big -> getTitle ();
$ Taobao -> getTitle ();
$ Google -> getTitle ();

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

Menjalankan contoh »

Pelaksanaan kode di atas, output adalah:

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

PHP Pembuat

Konstruktor adalah metode khusus. Terutama digunakan untuk menginisialisasi objek ketika Anda membuat sebuah objek, objek tersebut ditetapkan nilai awal dari variabel anggota, selalu menggunakan pernyataan pembuatan obyek dengan operator baru.

PHP 5 memungkinkan pengembang untuk mendefinisikan baris metode dalam kelas sebagai sintaks konstruktor adalah sebagai berikut:

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

Dalam contoh di atas, kita dapat menginisialisasi $ url dan variabel judul $ melalui constructor:

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

Sekarang kita tidak perlu memanggil metode setTitle dan setUrl:

contoh

$ W3big = Site baru ( 'www.w3big.com ', ' tutorial');
$ Taobao = Site baru ( 'www.taobao.com ', ' Taobao');
$ Google = Site baru ( 'www.google.com ', 'Google pencarian');

// Panggil fungsi anggota untuk mendapatkan gelar dan URL
$ W3big-> getTitle ();
$ Taobao-> getTitle ();
$ Google-> getTitle ();

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

Menjalankan contoh »

destructor

Destruktor (destructor) dan konstruktor Sebaliknya, ketika akhir objek siklus hidupnya (misalnya, di mana objek adalah fungsi panggilan selesai), sistem akan secara otomatis melakukan destructor.

PHP 5 memperkenalkan konsep destructor, yang mirip dengan bahasa berorientasi objek lainnya, sintaksnya adalah sebagai berikut:

void __destruct ( void )

contoh

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

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

$obj = new MyDestructableClass();
?>

Pelaksanaan kode di atas, output adalah:

构造函数
销毁 MyDestructableClass

mewarisi

PHPmeluas kata kunci untuk mewarisi kelas, PHP tidak mendukung multiple inheritance, dalam format berikut:

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

contoh

kelas contoh Child_Site mewarisi kelas Site, dan meluas fungsi tersebut:

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

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

metode menimpa

Jika Anda tidak dapat memenuhi kebutuhan subclass mewarisi dari metode kelas induk, dapat ditulis ulang, sebuah proses yang disebut overlay metode (override), juga dikenal sebagai metode utama.

Misalnya ditulis ulang getUrl dan getTitle metode:

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

Access Control

PHP pada properti atau metode kontrol akses dicapai dengan menambahkan kata kunci di depan publik (public), dilindungi (dilindungi) atau swasta (swasta) untuk mencapai.

  • publik (Public): anggota masyarakat kelas dapat diakses di mana saja.
  • dilindungi (dilindungi): anggota kelas dilindungi dapat diakses oleh sendiri serta sub-class dan kelas induk.
  • pribadi (swasta): anggota kelas pribadi hanya dapat diakses di mana definisi kelas.

atribut kontrol akses

atribut kelas harus didefinisikan sebagai publik, dilindungi, satu pribadi. Jika didefinisikan dengan var, itu dianggap publik.

<?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

?>

metode kontrol akses

Metode di kelas dapat didefinisikan sebagai publik, swasta atau dilindungi. Jika Anda tidak menetapkan kata kunci tersebut, metode default untuk umum.

<?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
?>

antarmuka

Menggunakan antarmuka (interface), Anda dapat menentukan metode kelas harus melaksanakan, tetapi tidak perlu menentukan konten spesifik dari metode ini.

antarmuka didefinisikanoleh kata kunci interface,seperti definisi kelas standar, tapi yang mendefinisikan semua metode yang kosong.

Semua metode yang didefinisikan dalam antarmuka harus publik, yang merupakan karakteristik dari antarmuka.

Untuk mengimplementasikan interface, menggunakan operatoralat.kelas harus menerapkan semua metode yang didefinisikan dalam interface, atau yang lain akan melaporkan kesalahan fatal. Kelas dapat mengimplementasikan beberapa interface, gunakan koma untuk memisahkan nama-nama beberapa interface.

<?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;
    }
}

konstan

Anda dapat dimasukkan ke dalam kelas tetap nilai yang sama didefinisikan sebagai konstanta. Dalam definisi dan penggunaan konstanta waktu tidak perlu menggunakan simbol $.

Nilai konstan harus nilai tetap, bukan variabel, atribut kelas, hasil matematika atau fungsi panggilan.

Sejak PHP 5.3.0 dan seterusnya, Anda dapat menggunakan variabel untuk secara dinamis memanggil kelas. Tetapi nilai variabel tidak bisa menjadi kata kunci (misalnya diri, orang tua atau statis).

contoh

<?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 起
?>

kelas abstrak

Setiap kelas, jika mengandung setidaknya satu dideklarasikan abstrak, maka kelas ini harus dinyatakan sebagai abstrak.

Didefinisikan sebagai kelas abstrak tidak dapat dipakai.

Didefinisikan sebagai metode abstrak hanya menyatakan doa nya (parameter), Anda tidak dapat menentukan pelaksanaan fungsi tertentu.

Mewarisi kelas abstrak, subclass harus semua kelas induk definisi metode abstrak; Selain itu, akses ke metode ini pengendalian dan kelas induk harus sama dengan (atau lebih santai). Sebagai contoh, metode abstrak dinyatakan dilindungi, maka metode diimplementasikan dalam subclass harus dideklarasikan sebagai protected atau public, tetapi tidak dapat didefinisikan sebagai pribadi. Juga disebut dengan metode harus sesuai, yaitu jenis dan jumlah parameter yang diperlukan harus konsisten. Misalnya, subclass mendefinisikan parameter opsional, dan deklarasi metode abstrak kelas induk tidak ada, maka tidak ada konflik antara dua pernyataan.

<?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;
?>

Pelaksanaan kode di atas, output adalah:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

statis Keyword

Mendeklarasikan properti kelas atau metode statis (statis), Anda tidak dapat instantiate kelas dan akses langsung.

Properti statis melalui kelas tidak dapat dipakai objek untuk mengakses (tetapi metode statis bisa).

Karena metode statis tidak diperlukan untuk panggilan melalui objek, $ pseudo-variabel ini tidak tersedia dalam metode statis.

Untuk mengakses> operator - Static Properti tidak oleh subjek.

Sejak PHP 5.3.0 dan seterusnya, Anda dapat menggunakan variabel untuk secara dinamis memanggil kelas. Tetapi nilai variabel tidak bisa menjadi diri kata kunci, orang tua atau statis.

<?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;
?>	

Program di atas, output adalah:

foo
foo

Keyword akhir

PHP 5 menambahkan kata kunci final. Jika metode kelas induk dinyatakan akhir, subclass tidak bisa mengganti metode ini. Jika sebuah kelas dideklarasikan final, tidak dapat diwariskan.

Berikut kesalahan eksekusi kode:

<?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()
?>

Memanggil konstruktor kelas induk

PHP tidak secara otomatis memanggil konstruktor konstruktor kelas induk di subclass. Untuk menjalankan konstruktor kelas induk, kita perlu memanggilorang tua dalam constructor dari subclass :: __ 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();
?>

Program di atas, output adalah:

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