일반적으로 PHP를 배우려면 다음 기능을 이해해야 합니다.
객체 복제. PHP5의 OOP 모델에 대한 주요 개선 사항 중 하나는 모든 개체를 값이 아닌 참조로 처리하는 것입니다. 그러나 모든 객체가 참조로 처리된다면 객체의 복사본을 어떻게 생성합니까? 대답은 객체를 복제하는 것입니다.
<?php class Corporate_Drone{ private $employeeid; private $tiecolor; function setEmployeeID($employeeid) { $this->employeeid = $employeeid; } function getEmployeeID() { return $this->employeeid; } function setTiecolor($tiecolor) { $this->tiecolor = $tiecolor; } function getTiecolor() { return $this->tiecolor; } } $drone1 = new Corporate_Drone(); $drone1->setEmployeeID("12345"); $drone1->setTiecolor("red"); $drone2 = clone $drone1; $drone2->setEmployeeID("67890"); printf("drone1 employeeID:%d <br />",$drone1->getEmployeeID()); printf("drone1 tie color:%s <br />",$drone1->getTiecolor()); printf("drone2 employeeID:%d <br />",$drone2->getEmployeeID()); printf("drone2 tie color:%s <br />",$drone2->getTiecolor()); ?>
상속되었습니다. 앞서 언급했듯이 상속을 통해 클래스 계층 구조를 구축하는 것은 OOP의 핵심 개념입니다.
class Employee { ... } class Executive extends Employee{ ... } class CEO extends Executive{ ... }
인터페이스. 인터페이스는 구현되지 않은 메서드 정의 및 상수의 모음으로, 클래스 청사진과 동일합니다. 인터페이스는 클래스가 수행할 수 있는 작업만 정의할 뿐 구현 세부 사항은 포함하지 않습니다. 이 장에서는 인터페이스에 대한 PHP5의 지원을 소개하고 이 강력한 OOP 기능을 보여주는 몇 가지 예를 제공합니다.
<?php interface IPillage { // CONST 1; function emptyBankAccount(); function burnDocuments(); } class Employee { } class Excutive extends Employee implements IPillage { private $totalStockOptions; function emptyBankAccount() { echo "Call CFO and ask to transfer funds to Swiss bank account"; } function burnDocuments() { echo "Torch the office suite."; } } class test { function testIP(IPillage $ib) { echo $ib->emptyBankAccount(); } } $excutive = new Excutive(); $test = new test(); echo $test->testIP($excutive); ?>
추상 수업. 추상 클래스는 본질적으로 인스턴스화할 수 없는 클래스입니다. 추상 클래스는 인스턴스화 가능한 클래스(구체 클래스라고 함)에 상속됩니다. 추상 클래스는 완전히 구현되거나 부분적으로 구현되거나 전혀 구현되지 않을 수 있습니다.
abstract class Class_name { //insert attribute definitions here //insert method definitions here }
네임스페이스. 네임스페이스는 상황에 따라 다양한 라이브러리와 클래스를 나눌 수 있어 코드 기반을 보다 효과적으로 관리하는 데 도움이 됩니다.
<?php namespace Library; class Clean { function printClean() { echo "Clean..."; } } ?> <?php include "test.php"; $clean = new \Library\Clean(); $clean->printClean(); ?>
다른 객체지향 언어를 사용해 본 적이 있다면 왜 다른 언어에 익숙한 일부 OOP 기능이 위 기능에 포함되어 있지 않은지 궁금할 것입니다. 이유는 간단합니다. PHP는 이러한 기능을 지원하지 않습니다. 혼란을 피하기 위해 PHP가 지원하지 않는 고급 OOP 기능 목록은 다음과 같습니다.