Latest web development tutorials
×

PHP หลักสูตร

PHP หลักสูตร PHP แนะนำโดยย่อ PHP ติดตั้ง PHP ไวยากรณ์ PHP ตัวแปร PHP echo/print PHP ชนิดข้อมูล PHP คงที่ PHP เชือก PHP ผู้ประกอบการ PHP If...Else PHP Switch PHP แถว PHP เรียงลำดับอาร์เรย์ PHP Superglobals PHP While การไหลเวียน PHP For การไหลเวียน PHP ฟังก์ชัน PHP ตัวแปรเมจิก PHP namespaces PHP เชิงวัตถุ

PHP ฟอร์ม

PHP ฟอร์ม PHP รูปแบบการตรวจสอบสิทธิ์ PHP ฟอร์ม - ฟิลด์ที่จำเป็น PHP ฟอร์ม - อีเมลยืนยันและ URL PHP ตัวอย่างสมบูรณ์แบบ PHP $_GET ตัวแปร PHP $_POST ตัวแปร

PHP การสอนที่ทันสมัย

PHP อาร์เรย์หลายมิติ PHP วันที่ PHP บรรจุ PHP ไฟล์ PHP อัปโหลดไฟล์ PHP Cookie PHP Session PHP E-mail PHP ความปลอดภัย E-mail PHP Error PHP Exception PHP กรอง PHP กรองขั้นสูง PHP JSON

PHP 7 คุณสมบัติใหม่

PHP 7 คุณสมบัติใหม่

PHP ฐานข้อมูล

PHP MySQL แนะนำโดยย่อ PHP MySQL สัมพันธ์ PHP MySQL การสร้างฐานข้อมูล PHP MySQL สร้างตารางข้อมูล PHP MySQL แทรกข้อมูล PHP MySQL ใส่ข้อมูลหลาย PHP MySQL งบเตรียม PHP MySQL อ่านข้อมูล 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 แนะนำโดยย่อ AJAX PHP AJAX ฐานข้อมูล AJAX XML AJAX ค้นหาแบบ Real-time AJAX RSS Reader AJAX โหวต

PHP คู่มืออ้างอิง

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 การประมวลผลภาพ PHP RESTful

PHP เชิงวัตถุ

ในการเขียนโปรแกรมเชิงวัตถุ (อังกฤษ: การเขียนโปรแกรมเชิงวัตถุชื่อย่อ: OOP) วัตถุที่เป็นรายละเอียดของข้อมูลและการประมวลผลข้อมูลที่ประกอบด้วยทั้งที่เป็นนามธรรมโลกแห่งความจริง

สิ่งที่เป็นวัตถุในโลกแห่งความจริงที่เราเผชิญเช่นคอมพิวเตอร์, โทรทัศน์, จักรยาน

สามลักษณะที่สำคัญของวัตถุที่:

  • พฤติกรรมของวัตถุวัตถุที่สามารถนำมาประยุกต์ใช้กับการดำเนินการให้เปิดไฟปิดไฟเป็นพฤติกรรม
  • วัตถุรูปแบบ: เมื่อใช้วิธีการเหล่านั้นเป็นวิธีการที่จะตอบสนองต่อวัตถุสีขนาดรูปร่าง
  • เป็นตัวแทนของวัตถุ: วัตถุที่เป็นตัวแทนของเทียบเท่าของตัวตนโดยเฉพาะแยกแยะสิ่งที่แตกต่างในพฤติกรรมเดียวกันและรัฐ

ยกตัวอย่างเช่นสัตว์ (สัตว์) เป็นระดับนามธรรมเราสามารถเป็นที่เฉพาะเจาะจงเพื่อแกะกับสุนัขและสุนัขกับแกะเป็นเป้าหมายที่เฉพาะเจาะจงที่พวกเขามีแอตทริบิวต์สีคุณสามารถเขียนคุณสามารถเรียกใช้การกระทำอื่น ๆ ของรัฐ


เนื้อหาเชิงวัตถุ

  • คลาส - กำหนดลักษณะนามธรรมของสิ่งที่การกำหนดระดับมีข้อมูลรูปแบบและการดำเนินการกับข้อมูล

  • วัตถุ - เป็นตัวอย่างของการเรียน

  • ตัวแปรสมาชิก - ตัวแปรที่กำหนดไว้ในชั้นเรียนค่าภายนอกของตัวแปรจะมองไม่เห็น แต่สามารถเข้าถึงได้โดยฟังก์ชั่นสมาชิกหลังเลิกเรียนจะ instantiated เป็นวัตถุคุณสมบัติของวัตถุที่สามารถเรียกได้ว่าตัวแปร

  • ฟังก์ชั่นสมาชิก - กำหนดภายในชั้นเรียนสามารถนำมาใช้สำหรับวัตถุการเข้าถึงข้อมูล

  • มรดก - มรดกเป็น subclass ของการแบ่งปันอัตโนมัติของโครงสร้างข้อมูลและวิธีการของชนชั้นปกครองซึ่งเป็นความสัมพันธ์ระหว่างเรียนในความหมายและการดำเนินงานของระดับที่พวกเขาสามารถเข้ามาเช่นพื้นฐานที่มีอยู่ดำเนินการแล้วออกนี้ระดับที่มีอยู่แล้วตามที่กำหนดโดยเนื้อหาของเนื้อหาของพวกเขาและเพิ่มเนื้อหาใหม่บางส่วน

  • ระดับผู้ปกครอง - คลาสที่สืบทอดโดยชั้นเรียนอื่น ๆ ในชั้นเรียนอาจจะเรียกว่าชั้นผู้ปกครองกลุ่มหรือชั้นเรียนหรือ superclass

  • ซับคลาส - คลาสที่สืบทอดระดับที่เรียกว่าประเภทรองอื่นยังสามารถเรียกว่าชั้นมา

  • polymorphism - polymorphism หมายถึงการดำเนินการเดียวกันหรือฟังก์ชั่นกระบวนการที่สามารถนำไปใช้กับหลายประเภทของวัตถุและได้รับผลลัพธ์ที่แตกต่างกันวัตถุที่แตกต่างคุณได้รับข้อความเดียวกันอาจให้ผลลัพธ์ที่แตกต่างกันปรากฏการณ์นี้เรียกว่าแตกต่าง

  • เกิน - ระยะสั้นจะเป็นฟังก์ชั่นหรือวิธีการที่มีชื่อเดียวกัน แต่รายการพารามิเตอร์ไม่ได้เป็นสถานการณ์เดียวกันเช่นฟังก์ชั่นหรือวิธีการระหว่างพารามิเตอร์ที่แตกต่างกันในชื่อเดียวกันแต่ละฟังก์ชั่นมากเกินไปหรือวิธีการที่เรียกว่า

  • บทคัดย่อ - นามธรรมหมายถึงการมีโครงสร้างที่สอดคล้องข้อมูล (คุณลักษณะ) และพฤติกรรม (ปฏิบัติการ) ของวัตถุในชั้นเรียนระดับดังกล่าวเป็นนามธรรมก็สะท้อนให้เห็นถึงคุณสมบัติที่สำคัญที่เกี่ยวข้องกับการประยุกต์ใช้ในขณะที่ละเลยเนื้อหาที่ไม่เกี่ยวข้องอื่น ๆ ส่วนชั้นใดเป็นอัตนัย แต่จะต้องเกี่ยวข้องกับการประยุกต์ใช้ที่เฉพาะเจาะจง

  • แพคเกจ - แพคเกจหมายถึงคุณสมบัติและพฤติกรรมของวัตถุในโลกแห่งความจริงที่มีอยู่ในการผูกเข้าด้วยกันและวางไว้ในหน่วยตรรกะ

  • คอนสตรัค - ส่วนใหญ่จะใช้ในการเริ่มต้นวัตถุเมื่อคุณสร้างวัตถุวัตถุที่มีการกำหนดค่าเริ่มต้นของตัวแปรสมาชิกมักจะใช้คำสั่งการสร้างวัตถุที่มีผู้ประกอบการใหม่

  • Destructor - destructor (เตาเผา) และสร้างในทางตรงกันข้ามเมื่อปลายวัตถุของวงจรชีวิตของมัน (ตัวอย่างเช่นที่วัตถุคือการเรียกฟังก์ชันเสร็จสิ้น) ระบบจะทำการ destructor โดยอัตโนมัติdestructors มักจะใช้ในการทำ "ทำความสะอาดผลพวงของ" งาน (ตัวอย่างเช่นเมื่อคุณสร้างวัตถุด้วยใหม่เปิดพื้นที่หน่วยความจำควรใช้ก่อนที่จะออกในเตาเผาลบปล่อย)

รูปต่อไปนี้เราจะสร้างวัตถุสามชั้นรถ: Mercedes, BMW, และออดี้

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


การกำหนดระดับ PHP

ชั้นเอง PHP มักไวยากรณ์เป็นดังนี้:

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

ตีความว่าเป็นดังนี้

  • หลังเลิกเรียนโดยใช้คำหลักระดับบวกชื่อของคำนิยามชั้นเรียน

  • คู่ของวงเล็บหลังชื่อของชั้นเรียนสามารถกำหนดตัวแปรและวิธีการ ({}) ภายใน

  • ตัวแปรระดับการใช้var ประกาศตัวแปรยังสามารถเริ่มต้นได้ค่า

  • นิยามฟังก์ชัน PHP คล้ายกับคำนิยามของฟังก์ชั่น แต่ฟังก์ชั่นที่สามารถเข้าถึงได้เพียงผ่านการเรียนและวัตถุ instantiated ของมัน

ตัวอย่าง

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

$ ตัวแปรนี้แสดงวัตถุของพวกเขา

PHP_EOL ขึ้นบรรทัดใหม่


PHP ในการสร้างวัตถุ

หลังเลิกเรียนจะถูกสร้างขึ้นเราสามารถใช้ประกอบการใหม่ที่จะยกตัวอย่างวัตถุของคลาสนี้:

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

รหัสข้างต้นเราจะสร้างวัตถุสามแต่ละสามวัตถุมีความเป็นอิสระแล้วเราดูที่วิธีการในการเข้าถึงวิธีการของสมาชิกและตัวแปรสมาชิก

เรียกวิธีสมาชิก

หลังจากที่วัตถุถูก instantiated เราสามารถใช้วัตถุที่เรียกวิธีการของสมาชิกวิธีการของวัตถุเท่านั้นที่สามารถจะเป็นสมาชิกของตัวแปรสมาชิกในการดำเนินงานของวัตถุ:

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

รหัสที่สมบูรณ์จะเป็นดังนี้:

ตัวอย่าง

<php?
เว็บไซต์ชั้น {
/ * * * * * ตัวแปรสมาชิก /
var $ URL;
var ชื่อ $;

/ * ฟังก์ชั่นสมาชิก * /
ฟังก์ชั่น setUrl ($ ตราไว้หุ้นละ) {
$ this -> url = $ ตราไว้หุ้นละ ;
}

ฟังก์ชั่น getUrl () {
. echo $ นี้ -> URL PHP_EOL ;
}

ฟังก์ชั่น setTitle ($ ตราไว้หุ้นละ) {
$ this -> title = $ ตราไว้หุ้นละ ;
}

ทำงาน GetTitle () {
echo $ นี้ -> ชื่อ PHP_EOL. ;
}
}

$ = w3big เว็บไซต์ใหม่
$ = Taobao เว็บไซต์ใหม่
Google $ = เว็บไซต์ใหม่

// ฟังก์ชั่นสมาชิกเรียกว่าในการตั้งชื่อและ URL
$ w3big -> setTitle ( "กวดวิชา");
$ Taobao -> setTitle ( "Taobao");
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 ();
?>

เล่นอินสแตนซ์»

การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:

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

PHP สร้าง

คอนสตรัคเป็นวิธีการพิเศษ ส่วนใหญ่ใช้ในการเริ่มต้นวัตถุเมื่อคุณสร้างวัตถุวัตถุที่มีการกำหนดค่าเริ่มต้นของตัวแปรสมาชิกมักจะใช้คำสั่งการสร้างวัตถุที่มีผู้ประกอบการใหม่

PHP 5 ช่วยให้นักพัฒนาที่จะกำหนดแถววิธีการในชั้นเรียนเป็นไวยากรณ์คอนสตรัคเป็นดังนี้:

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

ในตัวอย่างข้างต้นเราสามารถเริ่มต้น $ URL และตัวแปรชื่อ $ ผ่านสร้าง:

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

ตอนนี้เราไม่จำเป็นต้องเรียก setTitle วิธีการและ setUrl:

ตัวอย่าง

$ = w3big เว็บไซต์ใหม่ ( 'www.w3big.com ', ' กวดวิชา');
$ = Taobao เว็บไซต์ใหม่ ( 'www.taobao.com ', ' Taobao');
Google $ = เว็บไซต์ใหม่ (www.google.com ',' Google ค้นหา ');

// เรียกใช้ฟังก์ชันสมาชิกจะได้รับชื่อและ URL
$ w3big-> GetTitle ();
$ taobao-> GetTitle ();
$ Google-> GetTitle ();

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

เล่นอินสแตนซ์»

destructor

Destructor (เตาเผา) และสร้างในทางตรงกันข้ามเมื่อปลายวัตถุของวงจรชีวิตของมัน (ตัวอย่างเช่นที่วัตถุคือการเรียกฟังก์ชันเสร็จสิ้น) ระบบอัตโนมัติดำเนิน destructor

PHP 5 แนะนำแนวคิดของเตาเผาซึ่งมีลักษณะคล้ายกับภาษาเชิงวัตถุอื่น ๆ ที่ไวยากรณ์เป็นดังนี้:

void __destruct ( void )

ตัวอย่าง

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

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

$obj = new MyDestructableClass();
?>

การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:

构造函数
销毁 MyDestructableClass

สืบทอด

PHPขยายคำหลักที่จะสืบทอดชั้น PHP ไม่สนับสนุนการสืบทอดหลายในรูปแบบต่อไปนี้:

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

ตัวอย่าง

ตัวอย่างคลาส Child_Site สืบทอดคลาสเว็บไซต์และขยายการทำงานไปนี้:

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

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

วิธีการแทนที่

ถ้าคุณไม่สามารถตอบสนองความต้องการของ subclass สืบทอดมาจากวิธีการเรียนผู้ปกครองก็สามารถเขียนเป็นกระบวนการที่เรียกว่าวิธีการซ้อนทับ (แทนที่) ยังเป็นที่รู้จักวิธีการเอาชนะ

ตัวอย่างการเขียน getUrl และ GetTitle วิธีการ:

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

การควบคุมการเข้าถึง

PHP ในทรัพย์สินหรือวิธีการในการควบคุมการเข้าถึงจะทำได้โดยการเพิ่มคำหลักในด้านหน้าของสาธารณะ (สาธารณะ) การป้องกัน (ป้องกัน) หรือเอกชน (ส่วนตัว) เพื่อให้บรรลุ

  • สาธารณะ (Public): สมาชิกระดับประชาชนสามารถเข้าถึงได้ทุกที่
  • การป้องกัน (ป้องกัน): สมาชิกระดับการป้องกันสามารถเข้าถึงได้โดยตัวของมันเองเช่นเดียวกับชั้นย่อยและระดับผู้ปกครอง
  • ส่วนตัว (ส่วนตัว): สมาชิกระดับเอกชนเท่านั้นที่สามารถเข้าถึงได้ที่การกำหนดชั้น

คุณลักษณะการควบคุมการเข้าถึง

แอตทริบิวต์ชั้นต้องได้รับการกำหนดให้เป็นสาธารณะป้องกันเอกชนหนึ่ง หากกำหนดด้วย var ก็ถือว่าเป็นสาธารณะ

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

?>

วิธีการควบคุมการเข้าถึง

วิธีการในชั้นเรียนสามารถกำหนดเป็นภาครัฐภาคเอกชนหรือการป้องกัน หากคุณไม่ได้ตั้งค่าคำหลักเหล่านี้วิธีการเริ่มต้นให้กับประชาชน

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

อินเตอร์เฟซ

การใช้อินเตอร์เฟส (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;
    }
}

คงที่

คุณสามารถวางไว้ในระดับที่ยังคงค่าเดียวกันกำหนดเป็นค่าคงที่ ในความหมายและการใช้เวลาที่คงที่ไม่จำเป็นต้องใช้สัญลักษณ์ $

ค่าของคงต้องเป็นค่าคงที่ไม่ตัวแปรคุณลักษณะระดับผลทางคณิตศาสตร์หรือการเรียกใช้ฟังก์ชัน

ตั้งแต่ PHP 5.3.0 เป็นต้นไปคุณสามารถใช้ตัวแปรที่จะเรียกแบบไดนามิกชั้นเรียน แต่ค่าของตัวแปรที่ไม่สามารถเป็นคำหลัก (เช่นตัวเอง, พ่อแม่หรือคงที่)

ตัวอย่าง

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

ระดับนามธรรม

ชั้นใดถ้ามันมีอย่างน้อยหนึ่งวิธีที่ถูกประกาศเป็นนามธรรมแล้วชั้นนี้จะต้องได้รับการประกาศให้เป็นนามธรรม

ถูกกำหนดให้เป็นระดับนามธรรมไม่สามารถ instantiated

ถูกกำหนดให้เป็นวิธีนามธรรมเพียงประกาศการภาวนามัน (พารามิเตอร์), คุณไม่สามารถกำหนดดำเนินงานฟังก์ชั่นที่เฉพาะเจาะจง

สืบทอดระดับนามธรรม subclass ต้องทุกคำจำกัดความที่เป็นนามธรรมวิธีการเรียนของผู้ปกครองนั้นนอกจากนี้การเข้าถึงวิธีการเหล่านี้ของการควบคุมและระดับผู้ปกครองจะต้องเป็นเช่นเดียวกับ (หรือผ่อนคลายมากขึ้น) ตัวอย่างเช่นวิธีนามธรรมมีการประกาศการคุ้มครองแล้ววิธีการดำเนินการใน subclass ควรได้รับการประกาศให้เป็นการป้องกันหรือประชาชน แต่ไม่สามารถกำหนดเป็นส่วนตัว นอกจากนี้ยังเรียกได้ว่าวิธีการจะต้องตรงกับที่เป็นชนิดและจำนวนของพารามิเตอร์ที่จำเป็นจะต้องสอดคล้องกัน ยกตัวอย่างเช่นการกำหนดประเภทรองพารามิเตอร์และการประกาศวิธีนามธรรมระดับผู้ปกครองไม่มีแล้วมีความขัดแย้งระหว่างสองงบไม่มี

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

การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

คำสำคัญแบบคงที่

ประกาศคุณสมบัติระดับหรือวิธีการเป็นแบบคงที่ (คงที่) คุณจะไม่สามารถยกตัวอย่างชั้นเรียนและการเข้าถึงโดยตรง

คงคุณสมบัติผ่านชั้นเรียนไม่สามารถ instantiated วัตถุในการเข้าถึง ( แต่วิธีการคงสามารถ)

เพราะวิธีการคงไม่จำเป็นต้องโทรผ่านวัตถุที่ $ หลอกตัวแปรนี้ไม่สามารถใช้ได้ในวิธีการคง

ในการเข้าถึงผู้ประกอบการ> - คงทรัพย์สินโดยไม่ได้เรื่อง

ตั้งแต่ PHP 5.3.0 เป็นต้นไปคุณสามารถใช้ตัวแปรที่จะเรียกแบบไดนามิกชั้นเรียน แต่ค่าของตัวแปรที่ไม่สามารถเป็นตัวเองคำหลักปกครองหรือคงที่

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

โปรแกรมข้างต้นผลลัพธ์คือ:

foo
foo

คำสำคัญรอบชิงชนะเลิศ

PHP 5 เพิ่มคำหลักสุดท้าย หากวิธีการเรียนของผู้ปกครองมีการประกาศครั้งสุดท้าย subclass ไม่สามารถแทนที่วิธีนี้ ถ้าชั้นจะมีการประกาศขั้นสุดท้ายแล้วก็ไม่สามารถจะได้รับมรดก

ข้อผิดพลาดการเรียกใช้รหัสต่อไปนี้:

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

โทรนวกรรมิกระดับผู้ปกครอง

PHP ไม่ได้โดยอัตโนมัติเรียก constructor ของคอนสตรัคชั้นผู้ปกครองในประเภทรองเพื่อดำเนินการสร้างคลาสพ่อแม่เราจะต้องเรียกผู้ปกครองในการสร้างของประเภทรอง :: __ สร้าง ()

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

โปรแกรมข้างต้นผลลัพธ์คือ:

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