Các kiểu lập trình trong PHP (Phần 2)
2. Lập trình hướng đối tượng:
Lập trình hướng đối tượng: là kiểu lập trình dựa trên một nền tảng các class đã được xây dựng sẵn.
Trong ví dụ của lập trình hướng thủ tục trên chúng ta từng bước giải quyết các vấn đề sau đó tối ưu mã nguồn để đạt được một đoạn mã nguồn xử lý tốt nhất.
Nhưng trong lập trình hướng đối tượng thì ngược lại. Chúng ta phải xác định trước những chức năng cần thiết để xử lý vấn đề. Sau đó xây dựng lớp chứa các phương thức với các chức năng đã xác định. Việc xác định các chức năng cần thiết không phải dễ dàng cho các lập trình viên vì điều này đòi hỏi lập trình viên phải nhiều kinh nghiệm thực tế trong quá trình xử lý hướng thủ tục.
Ví dụ: Xây dựng một lớp Upload với các yêu cầu sau:
- Upload một tập tin bất kỳ
- Thư mục chứa tập tin sẽ upload
- Kiểm tra phần mở rộng của tập tin
- Kiểm tra kích thước tập tin upload
- Thay đổi tên tập tin upload
Qua yêu cầu chúng ta cần xác định các phương thức cơ bản của lớp
- Nhận tập tin upload
- Kiểm tra điều kiện upload
o Kích thước của tập tin
o Kiểu mở rộng của tập tin
- Upload tập tin: giữ nguyên tên của tập tin gốc và thay đổi tập tin gốc
Trong phần nay chúng ta chỉ xây dựng lớp Upload đơn giản, chúng ta sẽ chưa quan tâm đến cách viết đúng chuẩn của lập trình hướng đối tượng vì chúng ta đang hiểu về sự khác nhau của 2 kiểu lập trình thông dụng
Bước 1: Xác định thuộc tính và phương thức
Thuộc tính:
- Tên của tập tin ($_fileName)
- Kích thước tối đa được phép upload ($_fileSize)
- Phần mở rộng của các tập tin được phép upload ($_fileExtension)
- Tập tin tạm trước khi upload lên server ($_fileTmp)
- Thư mục chứa tập tin upload ($_uploadDir)
Phương thức:
- Phương thức khởi tạo ( __construct() )
- Phương thức thiết lập kích thước tập tin upload (setFileSize() )
- Phương thức thiết lập phần mở rộng của tập tin upload (setFileExtension() )
- Phương thức thiết lập thư mục upload tập tin (setUploadDir() )
- Phương thức kiểm tra tất cả các điều kiện của tập tin upload ( isVail() )
- Phương thức upload tập tin ( upload() )
Bước 2: Xây dựng khung sườn cho lớp
<?php
class Upload{
// Bien luu tru ten tap tin upload
var $_fileName;
//Bien luu tru kich thuoc cua tap tin upload
var $_fileSize;
//Bien luu tru phan mo rong cua tap tin upload
var $_fileExtension;
//Bien luu tru duong dan cua thu muc tam tap tin upload
var $_fileTmp;
//Bien luu tru duong tren server cua tap tin upload
var $_uploadDir;
//Bien luu tru error
var $_errors;
//Ham khoi tao doi tuong
function __construct($file_name){
}
//Ham lay thanh phan mo rong cua tap tin upload
function getFileExtension(){
}
//Ham thiet lap thanh phan mo rong tap tin upload
function setFileExtension($value){
}
//Ham thiet lap kich thuoc tap tin upload
function setFileSize($value){
}
//Ham thiet lap kich thuoc tap tin upload
function setUploadDir($value){
}
//Ham kiem tra dieu kien upload
function isVail(){
}
//Ham upload tap tin
function upload($rename = false, $prefix = \'file_\'){
}
}
Bước 3: Xây dựng chi tiết các phương thức xử lý
<?php
//upload.class.php
class Upload{
// Bien luu tru ten tap tin upload
var $_fileName;
//Bien luu tru kich thuoc cua tap tin upload
var $_fileSize;
//Bien luu tru phan mo rong cua tap tin upload
var $_fileExtension;
//Bien luu tru duong dan cua thu muc tam tap tin upload
var $_fileTmp;
//Bien luu tru duong tren server cua tap tin upload
var $_uploadDir;
//Bien luu tru error
var $_errors;
//Ham khoi tao doi tuong
function __construct($file_name){
//echo __METHOD__;
$fileInfo = $_FILES[$file_name];
$this->_fileName = $fileInfo[\'name\'];
$this->_fileSize = $fileInfo[\'size\'];
$this->_fileExtension = $this->getFileExtension();
$this->_fileTmp = $fileInfo[\'tmp_name\'];
}
//Ham lay thanh phan mo rong cua tap tin upload
function getFileExtension(){
$subject = $this->_fileName;
$pattern = \'#\\\\.([^\\\\.]+)$#i\';
preg_match($pattern,$subject,$matches);
return $matches[1];
}
//Ham thiet lap thanh phan mo rong tap tin upload
function setFileExtension($value){
$subject = $this->_fileExtension;
$pattern = \'#(\' . $value . \')#i\';
if(preg_match($pattern,$subject,$matches)!= 1){
$this->_errors[] = \'Phan mo rong khong phu hop\';
}
}
//Ham thiet lap kich thuoc tap tin upload
function setFileSize($value){
$size = $value * 1024;
if($this->_fileSize > $size){
$this->_errors[] = \'Kich thuoc tap tin lon hon \' . $size . \'kb\';
}
}
//Ham thiet lap kich thuoc tap tin upload
function setUploadDir($value){
if(file_exists($value)){
$this->_uploadDir = $value;
}else{
$this->_errors[] = \'Thu muc khong he ton tai\';
}
}
//Ham kiem tra dieu kien upload
function isVail(){
$flagErr = false;
if(count($this->_errors)>0){
$flagErr = true;
}
return $flagErr;
}
//Ham upload tap tin
function upload($rename = false, $prefix = \'file_\'){
if($rename == false){
$source = $this->_fileTmp;
$dect = $this->_uploadDir . $this->_fileName;
}else{
$source = $this->_fileTmp;
$dect = $this->_uploadDir . $prefix . time() . \'.\' . $this->_fileExtension;
}
copy($source,$dect);
}
}
Bước 4: Sử dụng lớp
Tạo tập tin upload.php
<html xmlns=\\"http://www.w3.org/1999/xhtml\\">
<head>
<meta http-equiv=\\"Content-Type\\" content=\\"text/html; charset=utf-8\\" />
<title>Upload form</title>
</head>
<body>
<h1>Upload hình ảnh</h1>
<form id=\\"myForm\\" name=\\"myForm\\" method=\\"post\\" enctype=\\"multipart/form-data\\" action=\\"process.php\\">
<input type=\\"file\\" name=\\"picture\\" id=\\"picture\\"></input>
<br></br>
<input type=\\"submit\\" name=\\"button\\" id=\\"button\\" value=\\"Submit\\"></input>
</form>
</body>
</html>
Tạo tập tin process.php
<?php
include \'upload.class.php\';
$upload = new Upload(\'picture\');
$upload->setUploadDir(\'images/\');
if($upload->isVail() == true){
echo \\"<pre>\\";
print_r($upload->_errors);
echo \\"</pre>\\";
}else{
$upload->upload(true,\'pic_\');
}
- 1.cám ơn thầy nhiều.
- 2.Hướng dẫn rất chất lượng. Đã hướng dẫn ít ra phải như thế này dân mù tịt như em mới rõ ngọn rõ...
- 3.Tiếng Anh thì >>thông cãm
- 4.fafa
- 5.Mình đã fix được rồi. Thanks bạn nhiều lắm !
- 6.Dịch vụ quá nguy hiểm... Giờ mới biết Vinaphone có cái dịch vụ "Giết người" này. Nếu biết từ trước...
- 7.cung hay day nhi...
- 8.NGƯỜI TA ĐÃ TỰ BIẾT DỊP TẾT LÀ HAY NGHẼN MẠNG VẬY NHÀ MẠNG LÀM NHƯ THẾ NÀY LÀ CƯỚP KHUYẾN MẠI CỦA...
- 9.Nhóm cuối cùng có lẽ là đáng ngạc nhiên, hoặc có lẽ hoàn toàn rõ ràng - đó là chính phủ. Một câu hỏi...
- 10.Nhóm cuối cùng có lẽ là đáng ngạc nhiên, hoặc có lẽ hoàn toàn rõ ràng - đó là chính phủ. Một câu hỏi...
- 1.Cài đặt và cấu hình ứng dụng Zend Framework (video...
- 2.Lập trình hướng đối tượng trong PHP (video...
- 3.Lập trình hướng đối tượng trong PHP 5 ( PHP OOP )
- 4.Zend Auth với ví dụ login - logout
- 5.Tài liệu Zend Framework
- 6.Hàm xử lý ngày tháng (Date and Time php function)
- 7.Webserver - Hướng dẫn cài đặt và sử dụng Xampp
- 8.Zend_Db - Những phương thức cơ bản
- 9.Các kiểu lập trình trong PHP (Phần 1)
- 10. Zend_Framework & JQuery ajax phân trang
Chủ đề đang thảo luận trong diễn đàn
- mã hóa khó hiểu
- xin code bat dong san bang php zend framework
- xin code bat dong san bang php zend framework
- Help help help
- hướng dẫn tối ưu url bằng file htaccess
- Tuyển 05 Lập Trình Viên PHP
- confix phpmailer host linux
- Học.Viên.Mới.Xin.Giúp.Đỡ!!!!
- Cho mình về validate số điện thoại
- Hướng dẫn sử dụng lệnh YUM trong Linux





bởi KhanhTran
Ngày 07/12/2011 vào lúc 14:48:10cảm ơn thầy nhiều !!!