Phần 2 của loạt hướng dẫn này bao gồm các chi tiết liên quan đến việc phát triển ứng dụng Facebook mà bạn đã bắt đầu trong Phần 1. Xây dựng một giao diện Facebook cho một công ty môi giới chứng khoán đang hoạt động, cho phép quản lý trực tuyến danh mục đầu tư. Tìm hiểu một cách tiếp cận để phân chia chức năng của một ứng dụng giữa các thành phần PHP và Java, và sử dụng khung công tác Spring để áp dụng một kiến trúc MVC tiêu chuẩn đối với mã Java ™
75 trang |
Chia sẻ: haohao89 | Lượt xem: 1834 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Làm chủ việc phát triển ứng dụng Facebook: Sử dụng đồng thời Java và PHP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Làm chủ việc phát triển ứng dụng Facebook bằng PHP, IBM Rational
Application Developer, IBM WebSphere Application Server và DB2, Phần 2:
Sử dụng đồng thời Java và PHP
Jake Miles, Tác giả tự do, 软通动力信息技术有限公司
Tóm tắt: Phần 2 của loạt hướng dẫn này bao gồm các chi tiết liên quan đến việc
phát triển ứng dụng Facebook mà bạn đã bắt đầu trong Phần 1. Xây dựng một giao
diện Facebook cho một công ty môi giới chứng khoán đang hoạt động, cho phép
quản lý trực tuyến danh mục đầu tư. Tìm hiểu một cách tiếp cận để phân chia chức
năng của một ứng dụng giữa các thành phần PHP và Java, và sử dụng khung công
tác Spring để áp dụng một kiến trúc MVC tiêu chuẩn đối với mã Java ™. Loạt bài
hướng dẫn này dẫn dẫn dắt bạn đi qua quy trình phát triển một ứng dụng Facebook
đầy đủ chức năng bằng cách sử dụng WebSphere® Application Server (Máy chủ
ứng dụng WebSpher), Rational® Application Developer (Bộ Phát triển ứng dụng
Rational), Zend Core cho IBM, PHP 5 và DB2®.
Trước khi bạn bắt đầu
Về loạt bài này
Loạt bài hướng dẫn này dẫn dắt bạn đi qua quy trình phát triển một ứng dụng
Facebook đầy đủ chức năng bằng cách sử dụng WebSphere Application Server,
Rational Application Developer, Zend Core for IBM, PHP 5 và DB2. Bạn sẽ xây
dựng một phần của ứng dụng bằng cách sử dụng mã Java và một phần bằng PHP
5. Làm đại diện cho một công ty môi giới chứng khoán đang hoạt động, bạn sẽ
thêm một giao diện Facebook vào hệ thống quản lý trực tuyến danh mục đầu tư
của họ.
Trong Phần 1 bạn đã có một cái nhìn khái quát về phát triển ứng dụng
Facebook, và đã bắt đầu bằng một ứng dụng khung sườn.
Trong Phần 2 bạn sẽ thực hiện công việc khởi đầu để tạo ra phía Java của
ứng dụng -- một dự án Rational Application Developer và ứng dụng web
bằng cách sử dụng khung công tác Spring nổi tiếng.
Phần 3 sẽ giải quyết các công việc đặc thù cho việc thực hiện một ứng dụng
Facebook đầy đủ các chức năng bằng cách sử dụng Ngôn ngữ Đánh dấu
Facebook (FBML), Facebook JavaScript (FBJS), và Facebook API trong cả
hai ngôn ngữ Java và PHP.
Về hướng dẫn này
Môi trường Rational Application Developer của IBM, Zend Core cho IBM với các
bản cài đặt Apache 2 và cơ sở dữ liệu DB2 Express-C của IBM kèm theo và
WebSphere Application Server của IBM. Sau đó bạn đã khảo sát chi tiết một vòng
các điểm tích hợp của Facebook -- các cơ chế mà Facebook cung cấp để tích hợp
ứng dụng vào mạng xã hội -- và bắt đầu một số phát triển khung sườn. Bạn đã tạo
ra và lập cấu hình ứng dụng trên Facebook, đã tạo ra một tệp index.php thử
nghiệm đối với URL Callback, và sau đó thiết lập cơ sở dữ liệu DB2, tạo ra một số
bảng cơ sở và điền vào các dữ liệu mẫu để bắt đầu.
Trong hướng dẫn này, Phần 2 của loạt bài, bạn sẽ lập ra một dự án Rational
Application Developer để tạo điều kiện phát triển Java, tạo cấu hình một nguồn dữ
liệu DB2 đã đăng ký kết nối JNDI trong IBM WebSphere Application Server, và
sử dụng khung công tác Spring để áp dụng một cấu trúc MVC cho mã Java để áp
đặt một cấu trúc truy cập JDBC. Sau đó bạn sẽ viết ra một số lớp PHP đa dụng,
cho phép bạn áp dụng cùng cấu trúc MVC ấy với mã PHP và cho phép bạn thêm
các thuộc tính vào các cá thể lớp giống như bạn làm trong Spring. Bạn sẽ viết ra
một lớp PHP Db2DataSource đa dụng để kết nối với DB2, và sử dụng mod_rewite
và mod_proxy để cho PHP và Java cùng tồn tại một cách trong suốt tại cùng một
URL. Hướng dẫn này sẽ cấu trúc nên thế giới Java và PHP giống nhau nhất đến
mức có thể, vì một trong những rào cản để tích hợp hai thế giới đó là ở chỗ các
nhà phát triển PHP và Java thường đến từ các nền tảng khác nhau, và nhìn các thế
giới này theo các cách khác nhau. Hai ngôn ngữ này có thể cùng tồn tại trong cùng
một ứng dụng (và cùng một nhóm phát triển) rất thành công, và với một mức độ
trừu tượng cao và cấu trúc sạch một cách toàn diện.
Các đều kiện tiên quyết
Hướng dẫn này dành cho các nhà phát triển Java và PHP có mức kinh nghiệm
khác nhau, những người muốn bắt đầu viết các ứng dụng Facebook trong Java,
PHP hoặc tích hợp cả hai như là những bộ phận của một ứng dụng lớn hơn. Nó
dành cho các nhà phát triển PHP, những người muốn tìm hiểu công việc xây dựng
một ứng dụng J2EE bằng cách sử dụng khuôn mẫu Spring và cách áp dụng một
cấu trúc hướng đối tượng vào các ứng dụng PHP của họ, và dành cho những người
phát triển Java muốn bắt đầu sử dụng PHP, có thể vì mục đích thêm PHP vào ứng
dụng Java doanh nghiệp hiện hành.
Bạn nên đọc Mastering Facebook application development, Part 1 (Làm chủ ứng
dụng Facebook, Phần 1) trước khi tiếp tục Phần 2.
Yêu cầu về hệ thống
Để hoàn thành các bước trong hướng dẫn này, bạn cần các phần mềm sau. Nếu
bạn chưa cài đặt các sản phẩm này, hoặc không có phiên bản mới nhất, bạn có thể
tải về các phiên bản dùng thử miễn phí:
Tải về một phiên bản dùng thử miễn phí Spring Framework -- Tôi sử dụng
phiên bản 2.5.3, bản phát hành mới nhất.
Tải về một phiên bản dùng thử miễn phí Rational Application Developer.
Bạn sẽ sử dụng Rational Application Developer như là một bản IDE đầy đủ
tính năng dựa trên Eclipse để phát triển ứng dụng Web Java của bạn.
Tải về một phiên bản dùng thử miễn phí IBM WebSphere Application
Server V6.1.
Tải về Zend Core For IBM (gồm có IBM DB2® Express-C)
Zend Studio là một công cụ tuyệt vời để viết mã PHP, mặc dù có thể dùng
trình soạn thảo văn bản nào cũng được.
Bổ sung Java cùng với PHP
Trong Phần 1 bạn đã nhận được bên PHP của ứng dụng đang chạy. Bây giờ bạn sẽ
thực hiện việc khởi tạo ban đầu để tạo ra bên Java của ứng dụng -- một dự án
Rational Application Developer và ứng dụng web bằng cách sử dụng khung công
tác Spring nổi tiếng. Sau đó bạn sẽ viết ra các lớp PHP cho phép bạn áp đặt cùng
một mẫu MVC lên mã PHP như trong Java, và tạo một proxy đảo ngược từ
Apache đến IBM WebSphere bằng cách sử dụng mod_rewrite và mod_proxy, do
đó bạn có thể sử dụng cùng một URL Facebook Callback đối với các máy chủ
PHP và Java. Sau đó bạn sẽ sử dụng tập tin .htaccess để gửi các yêu cầu đến PHP
hoặc Java tùy thuộc vào URI yêu cầu. Một cấu trúc chung giữa các máy chủ Java
và PHP của bạn sẽ làm cho sự tích hợp của chúng dễ dàng hơn và cho phép bạn
(hoặc nhóm của bạn) sử dụng bất cứ công nghệ nào thích hợp hơn cho mỗi mảnh
của ứng dụng Facebook, và việc sử dụng proxy và .htaccess sẽ tách rời mặt trước
với việc sử dụng hai công nghệ của bạn ở mặt sau.
Thiết lập dự án Rational Application Developer
Làm theo các bước sau để thiết lập một dự án trong Rational Application
Developer:
1. Mở Rational Application Developer từ trình đơn Start: Start > All
Programs > IBM Software Development Platform > IBM Rational
Application Developer > IBM Rational Application Developer.
2. Tạo một dự án Java mới (File > New > Project), chọn Dynamic Web
Project làm kiểu dự án và WebSphere Application Server v6.1 làm môi
trường chạy đích.
Phải chắc chắn đã đánh dấu chọn các khía cạnh (facet) của dự án Dynamic
Web Module, Java, JSTL, và khía cạnh WebSphere web.
3. Đặt gốc ngữ cảnh ở facebook-stock-demo, thư mục nội dung vào mặc định
của WebContent, và thư mục nguồn Java vào src. Rational Application
Developer sau đó sẽ tạo ra cấu trúc dự án ứng dụng web tiêu chuẩn cho bạn
và bạn chỉ cần điền nó vào.
Hợp nhất khung công tác Spring
Thêm khung công tác Spring đa năng vào ứng dụng.
1. Tải về phiên bản khung công tác Spring với tất cả các phần phụ thuộc (xem
Prerequisites để có một đường liên kết).
2. Giải nén nó vào vị trí có ích nào đó, thí dụ c:\ (việc giải nén các tập tin có
thể mất một thời gian), và từ thư mục dist sao chép tệp spring.jar và tất cả
các tệp JAR dưới thư mục dist/modules vào thư mục WEB-INF/lib của dự
án. Bạn có thể tìm thấy thư mục WEB-INF/lib của dự án của bạn bằng cách
chuyển đến Project > Properties và xem ô Info. Thí dụ, tôi đã sao chép
chúng vào C:\Documents and
Settings\jmiles\IBM\rationalsdp7.0\workspace\facebook-stock-
demo\WebContent\WEB-INF\lib.
3. Bổ sung thêm commons-logging.jar vào đường dẫn lớp (classpath) của dự
án của bạn, từ thư mục lib/jakarta-commons của khung công tác Spring,
thông qua Project > Properties > Java Build Path > Add External JARs
(xem Hình 1). Không được sao chép JAR này vào thư mục lib của bạn; nó
sẽ gây ra một lỗi khi triển khai WebSphere.
Hình 1. Thêm các JAR bên ngoài vào dự án Rational Application
Developer của IBM
4. Làm mới vùng làm việc (nhấn chuột phải vào tên dự án và chọn Refresh),
và khung nhìn Project Explorer sẽ cập nhật tất cả các JAR được thêm vào.
Lập cấu hình Spring
Giờ thì bạn đã cài đặt Spring, và bạn cần phải lập cấu hình ứng dụng Web để sử
dụng nó. Nhấn chuột phải vào web.xml trong Project Explorer (xem Hình 2) và
chọn Open with > Text Editor.
Hình 2. Mở web.xml bằng một trình soạn thảo văn bản trong Rational
Application Developer
Thay nội dung bằng nội dung của Liệt kê 1.
Liệt kê 1. web.xml
<web-app id="WebApp_ID" version="2.4"
xmlns=""
xmlns:xsi="
instance"
xsi:schemaLocation="
app_2_4.xsd">
facebook-stock-demo</display-
name>
spring
org.springframework.web.servlet.DispatcherServlet
1
spring
/action/*
index.jsp
Việc này sẽ định tuyến tất cả các yêu cầu mà các URI của chúng bắt đầu bằng
facebook-stock-demo/action (ở đây facebook-stock-demo là bối cảnh mà bạn sẽ
chỉ định trong WebSphere của IBM) thông qua DispatcherServlet của Spring,
điểm nhập vào khung công tác MVC Spring.
Tiếp theo bạn cần có một tập tin Spring-servlet.xml để lập cấu hình cho các bean
Spring. Spring theo mặc định sẽ nối thêm đuôi “-servlet.xml” vào phần tử
trong web.xml làm tên của tập tin cấu hình, do đó trong khung
nhìn Project Explorer, hãy tạo một tập tin văn bản mới trong thư mục WEB-INF
có tên là spring-servlet.xml. Bạn có thể phải đóng tập tin và nhấn chuột phải vào
nó để mở ra bằng một trình soạn thảo văn bản nếu Rational Application Developer
mở nó ra theo mặc định trong một trình soạn thảo XML. Dán nội dung của Liệt kê
2 vào spring-servlet.xml.
Liệt kê 2. Spring-servlet.xml ban đầu
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"">
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
org.springframework.web.servlet.view.JstlView
/WEB-INF/jsp/
<bean id="urlMapping" class="org.springframework.web.servlet.
handler.SimpleUrlHandlerMapping">
<bean id="stockListController"
class="com.jm.fbstockdemo.StockListController">
stockList.jsp
Bean đầu tiên quy định cách thức mà các tên khung nhìn được ánh xạ vào URL.
Bất cứ khi nào một trình điều khiển trả lại một tên khung nhìn, trình phân giải
khung nhìn (view resolver) sẽ nối thêm phần đầu /WEB-INF/jsp/ vào nó, tạo ra
chẳng hạn tệp /WEB-INF/jsp/stocks.jsp để đáp ứng lại tên khung nhìn stocks.jsp.
Bean thứ hai ánh xạ các URL vào các trình điều khiển spring, trong trường hợp
này nó ánh xạ một url đơn lẻ, /stockList, vào bean điều khiển bằng id
stockListController, mà được định nghĩa như là bean thứ ba trong tập tin này.
Định nghĩa bean stockListController nội xạ một thuộc tính successView với đối
tượng StockListController để giữ các tên của các khung nhìn nằm bên ngoài mã
Java.
Thêm vào một lớp trình điều khiển Spring và khung nhìn tương ứng
Để thêm vào một lớp trình điều khiển Spring và khung nhìn tương ứng, hãy làm
như sau:
1. Tạo một gói dưới thư mục src bằng cách nhấn chuột phải vào Java
Resources: src trong khung nhìn Project Explorer và chọn New >
Package. Tôi gọi gói của tôi là com.jm.fbstockdemo.
2. Nhấn chuột phải vào gói mới này và tạo một lớp StockPriceController có
thực hiện org.springframework.web.servlet.mvc.Controller. Bạn có thể chỉ
cần gõ Controller sau khi nhấn vào Add và Rational Application Developer
sẽ thu hẹp danh sách các tùy chọn tương ứng khi bạn gõ nhập.
3. Điền vào nó một triển khai thực hiện cơ bản nhất có thể, đơn giản chỉ thực
hiện trả lại một tên khung nhìn để biểu hiện (xem Liệt kê 3).
Liệt kê 3. Một lớp StockListController ban đầu (Java)
public class StockListController
implements Controller {
public ModelAndView
handleRequest(HttpServletRequest
request,
HttpServletResponse
response) throws Exception {
return new ModelAndView
(getSuccessView());
}
}
4. Tiếp theo nhấn chuột phải vào WEB-INF và tạo một thư mục jsp.
5. Trong thư mục jsp tạo tệp stockList.jsp ban đầu, có chứa xml để kiểm thử
như Liệt kê/như trong Liệt kê 4.
Liệt kê 4. Một stockList.jsp ban đầu
<%@ page contentType="text/xml"
%>
<%@ taglib prefix="c"
uri=""
%>
1
JAKE
3000
Triển khai vào WebSphere Application Server
Với ứng dụng Spring Java khung sườn đã viết, giờ đây bạn có thể triển khai nó
vào WebSphere Application Server (Máy chủ ứng dụng WebSphere).
1. Tạo tập tin WAR bằng cách nhấn chuột phải vào dự án trong Rational
Application Developer, và chọn Export > WAR file.
2. Trong cửa sổ Save As, di chuyển đến thư mục của dự án (như bạn đã làm
trên đây) và tạo một thư mục mới có tên dist bên cạnh các thư mục src và
WebContent. Thí dụ, tôi đã ghi lưu tệp WAR là c:\Documents và
Settings\jmiles\IBM\rationalsdp7.0\workspace\facebook-stock-
demo\dist\facebook-stock-demo.war.
3. Nhấn Finish. Rational Application Developer sẽ bao bọc ứng dụng một
cách thành thục thành facebook-stock-demo.war.
4. Để triển khai tập tin WAR, khởi động một cá thể máy chủ ứng dụng
WebSphere qua Start>All Programs>IBM WebSphere > Application
Server v6.1 > Profiles > [your profile name] > Start the server (xem
Hình 3). Đợi nó khởi động (một cửa sổ nhắc lệnh sẽ xuất hiện, hiển thị
thông tin khởi động, sau đó biến mất), và sau đó di chuyển đến bàn điều
khiển (Administrative Console) qua cùng đường dẫn của trình đơn Start.
Thao tác này sẽ mở ra bàn điều khiển của cá thể WebSphere của bạn trong
trình duyệt Web.
Hình 3. Khởi động Máy chủ Ứng dụng WebSphere từ trình đơn khởi
động Windows
5. Đăng nhập vào bàn điều khiển admin, mở phiếu Applications và chọn
Install New Application.
6. Chọn Local file system, di chuyển đến tệp tin WAR của bạn và chọn nó.
7. Chỉ rõ /facebook-stock-demo làm bối cảnh gốc, và nhấn Next. Giữ nguyên
tất cả các giá trị mặc định trên màn hình các tùy chọn cài đặt và nhấn Next.
8. Trên màn hình “Map modules to servers” chọn ứng dụng web của bạn để
thêm nó vào server1.
9. Nhấn vào Finish trên màn hình summary, và WebSphere sẽ cài đặt ứng
dụng web. Hãy chắc chắn nhấn vào Save dưới đáy màn hình đầu ra khi cài
đặt hoàn tất.
10. Nhấn vào Enterprise Applications ở bên trái, và bạn sẽ thấy ứng dụng của
bạn nằm trong danh mục các ứng dụng đã cài đặt. Chọn cái đó và nhấn
Start để khởi động.
11. Để xác nhận cổng mà ứng dụng của bạn đang chạy trên đó, hãy mở phần
Servers ở bên trái, nhấn Application servers, chọn server1, và trong phần
Communications của cấu hình server1 nhấn Ports ((xem Hình 4).
WC_defaulthost chỉ rõ cổng mà qua đó bạn có thể truy cập ứng dụng web
của bạn. Trong cài đặt của tôi cổng này là 9083; thay thế giá trị ấy vào chỗ
của WC_defaulthost trong tất cả các URL được chỉ ra sau đây.
Hình 4. Tìm cổng HTTP của máy chủ của bạn trong Máy chủ ứng
dụng WebSphere
12. Cuối cùng, để xác nhận rằng tất cả hoạt động tốt, hãy mở một cửa sổ trình
duyệt nữa, vào
và bạn sẽ thấy xml của stockList.jsp.
Ứng dụng web MVC Spring bây giờ đã được cài đặt và làm việc dưới IBM
WebSphere cung cấp một cấu trúc MVC tiêu chuẩn để phát triển mã ứng dụng
Facebook của bạn trong đó.
Cơ cấu một ứng dụng PHP tương tự như một ứng dụng Java Spring
Cấu trúc của một ứng dụng Web Java và DispatcherServlet của Spring cung cấp
một mô hình tuyệt vời cho nửa PHP của ứng dụng. Không ném qua cửa sổ những
kết quả trừu tượng hóa hướng đối tượng đẹp đẽ như vậy, bạn sẽ nhanh chóng trực
tiếp làm ra một số các lớp có thể giúp cho việc mô phỏng chức năng thêm thuộc
tính của Spring và chức năng điều phối của MVC. Bạn sẽ viết ra một lớp
Properties đọc các tệp tin thuộc tính, một lớp Injectable cho phép bạn thêm các
thuộc tính từ các tệp tin đó vào các cá thể lớp, và một lớp ActionDispatcher sẽ
điều phối một biến yêu cầu đến đúng lớp điều khiển để xử lý yêu cầu.
Để viết mã PHP, bất kỳ trình soạn thảo văn bản nào cũng làm được, nhưng Zend
Studio là tuyệt vời (xem Tài nguyên).
Đọc các giá trị từ các tệp tin thuộc tính
Để giữ cho những phần không thay đổi của ứng dụng nằm bên ngoài mã, bạn sẽ sử
dụng một tập hợp các tệp tin thuộc tính và một lớp Properties đọc được chúng, lắp
ráp một mảng kết hợp các thuộc tính mà phần còn lại của ứng dụng có thể sử dụng
được, như trong liệt kê 5 (đặt Properties.php trong một thư mục con lib dưới thư
mục fb_stock_demo).
Liệt kê 5. Properties.php
<?php
class Properties {
private $props;
public function __construct
($propertiesFilePaths) {
$this->props = array();
foreach ($propertiesFilePaths as
$path) {
$this->loadProperties($path);
}
}
private function
loadProperties($propertiesFilePath)
{
$lines =
file($propertiesFilePath);
foreach ($lines as $line) {
$trimmed = trim($line);
if (strlen($trimmed) > 0 &&
strchr($trimmed, 0, 1) != "#") {
$split = split("=", trim($line));
$key = $split[0];
$value = $split[1];
$this->props[$key] = $value;
}
}
}
public function get($key) {
if (! isset($this->props[$key])) {
throw new Exception
("Properties: unknown key $key");
}
return $this->props[$key];
}
}
Bạn cung cấp cho hàm tạo (constructor) một mảng các đường dẫn đến tệp tin
thuộc tính, nó đọc lần lượt từng cái một, lắp ráp mảng kết hợp trong
loadProperties(). Bằng cách nhận cả một mảng các đường dẫn tệp tin thuộc tính
chứ không phải chỉ là một đường dẫn, bạn tách rời các thuộc tính phụ thuộc vào
môi trường như các giá trị kết nối cơ sở dữ liệu. Điều này làm cho việc sao chép
mã dễ dàng hơn từ một môi trường này đến môi trường khác (ví dụ từ phát triển
đến sản xuất) không phải viết đè lên các giá trị đó; bạn chỉ cần không sao chép các
tập tin đặc trưng cho môi trường hoặc thiết lập cấp quyền truy cập chúng sao cho
bạn không thể viết đè lên chúng được trong khi sao chép. Thí dụ, ứng dụng này sẽ
sử dụng hai tập tin thuộc tính, app.properties và db.properties, ở đây
app.properties chứa các hằng số như khoá mã và bí mật API Facebook (Facebook
API Key and Secret), còn db.properties chứa thông tin đăng nhập cơ sở dữ liệu.
Sử dụng các phương thức thần kỳ PHP 5 để cung cấp phép thêm vào thuộc tính
kiểu như Spring
Bây giờ ta xem xét một số phép thần kỳ PHP 5. Để cung cấp thêm một chút gì hơn
kiểu như Spring, bạn có thể thêm các thuộc tính vào một đối tượng từ một tệp tin
cấu hình mà sẽ xem xét và đối xử chính xác như các biến cá thể trong đối tượng
đích. Tất cả các lớp cần có các thuộc tính được thêm vào như vậy cần phải là lớp
con của lớp Injectable (xem Liệt kê 6).
Liệt kê 6. Lớp Injectable (PHP)
class Injectable {
protected $properties;
private $prefix;
public function
Injectable($properties=null,
$propPrefix=null) {
$this->prefix =
$propPrefix == null ?
get_class($this) . '/' :
$propPrefix;
$this->setProperties
($properties);
}
public function
setProperties($properties) {
$this->properties =
$properties;
}
public function
__get($property) {
return $this-
>getProperty($property);
}
public function
getProperty($property) {
return $this->properties-
>get($this->prefix .
$property);
}
}
Then chốt của lớp Injectable là phương thức __get() đó là một phương thức thần
kỳ của PHP 5. Các phương thức thần kỳ là phương thức đặc biệt có sẵn trên tất cả
các đối tượng PHP 5, mà PHP sử dụng để cung cấp cho các đối tượng các hành vi
lõi đặc biệt;