Đây là một module thí dụ cách:
<!-- @TODO: tạo place holder đặt các post liên quan đến theming -->
Sử dụng Drupal để xây dựng các ứng dụng web, chắc chắn có lúc, chúng ta cần định dạng các block theo region, theo module, ... Thí dụ, chúng ta font chữ ở các block bên trái nhỏ hơn các block phía bên phải, các block bên phải có màu sắc, độ bo viềng khác với các block ở footer, ... yêu cầu tưởng chừng khó khăn, nhưng trở nên rất dễ dàng. Chúng ta thử xem hàm tạo block mặc định của Drupal:
<?php
function theme_block($block) {
$output = "<div class=\"block block-$block->module\" id=\"block-$block->module-$block->delta\">\n";
$output .= " <h2 class=\"title\">$block->subject</h2>\n";
$output .= " <div class=\"content\">$block->content</div>\n";
$output .= "</div>\n";
return $output;
}
?>Cập nhật: Đối với Ubuntu OS, xem thêm bài viết này.
Một ứng dụng web, thường dựa vào các tham số truyền vào từ URL để thực hiện việc xử lý và tạo nội dung cho các trang web của mình. Một URL, đại khái, có thể là http://www.example.com/?foo=bar. Đối với Drupal, tham số được truyền tới được tập trung vào biến q. Thí dụ, đối với yêu cầu có dạng http://www.example.com/?q=node/83, Drupal sẽ phân tích và trình bày ra giao diện người dùng nội dung chi tiết của node có mã số là 83.
hook_form_alter là một công cụ cực kỳ mạnh mà Drupal cung cấp. Chúng ta có thể sử dụng nó để thực hiện được nhiều việc, tưởng chừng như không thể: Thay đổi cấu trúc một form mà không cần sửa mã nguồn, định dạng form, thêm kịch bản xử lý cá nhân vào form hệ thống, ...
PHP5 giới thiệu "ngoại lệ" có cú pháp tương tự như ở Java. Mọi ngoại lệ đều là một mở rộng của lớp ngoại lệ chuẩn -- chúng ta có thể xây dựng các ngoại lệ tùy chỉnh.
<?php
try { /* begin exception block */
$fp = fopen(__FILE__, "r");
if (!$fp) {
/* throw exception, error occurred */
throw new Exception('no such file', 9);
}
} catch (Exception $e) { /* what to do on error (thrown exception) */
echo $e->getCode(); // error code
echo $e->getFile(); // file where exception was thrown
echo $e->getLine(); // line on which exception was thrown
echo $e->getMessage(); // error message
print_r($e->getTrace()); // print backtrace
}
?>Thí dụ sử dụng ngoại lệ tuỳ chỉnh:
<?php
?>Với PHP5, chúng ta đã có thể định nghĩa các đối tượng giao diện (object interfaces). Sử dụng giao diện để chắc rằng các lớp dựa trên giao diện này sẽ cung cấp đầy đủ các chức năng.
<?php
interface read_file {
function open($file_name);
function read($bytes);
function close();
}
class rf implements read_file {
private $fp;
function open($file_name) { $this->fp = fopen($file_name, "r"); }
function read($bytes) { return fread($this->fp, $bytes); }
function close() { fclose($this->fp); }
}
$f = new rf();
/* ensure that object inside $ implements read_file interface */
if ($f instanceof read_file) {
$f->open(__FILE__);
echo $f->read(4);
$f->close();
}
?>- PHP5 giới thiệu các lớp và các phương thức trừu tượng.
- Một phương thức trừu tượng chỉ định nghĩa tên của nó mà không định nghĩa kịch bản thực thi.
- Một lớp chứa các phương thức trừu tượng phải được định nghĩa là trừu tượng
<?php
abstract class ab {
abstract public function test();
}
/* the implementing class must implement all methods
* specified in the abstract class */
class imp_ab extends ab {
public function test() {
echo "implemented class was called";
}
}
$a = new imp_ab();
$a->test();
?>