Lớp trừu tượng và Interface

Lớp trừu tượng

Lớp trừu tượng là một lớp không thể khởi tạo được object mà chỉ cho các lớp khác mở rộng từ lớp đó. Lớp trừu tượng chứa ít nhất một hàm trừu tượng, chỉ có signature (chữ ký) của hàm mà không cài đặt (implementation). Khai báo lớp trừu tượng với từ khóa abstract.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
// Lớp trừu tượng
abstract class AbstractClass {
  // hàm trừu tượng
  abstract protected function getValue();

  // Hàm thông thường
  public function printOut() {
    print $this->getValue() . "\n";
  }
}
class ConcreteClass1 extends AbstractClass {
  protected function getValue() {
    return "ConcreteClass1";
  }
}

$c = new ConcreteClass1();
$c->printOut();

Object Interface

Interface là một lớp trừu tượng đặt biệt chỉ chứa các phương thức trừu tượng ở dạng public và hằng số. Khai báo interface sử dụng từ khóa interface. Một class có thể cài đặt nhiều interface khác nhau sử dụng từ khóa implements.

Các Interface cũng có thể kế thừa lẫn nhau sử dụng từ khóa extends.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
interface IVariable {
  public function setVariable($name, $var);
}

interface IHtml {
  public function getHtml($template);
}

class Template implements IVariable, IHtml {
  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;
  }
}

$t = new Template();
$t->setVariable('a', 123);
echo $t->getHtml('<div>{a}</div>'); // <div>123</div>