ICTsharing - Blog chia sẻ kiến thức về ICT: PHP nâng cao

Hot

Post Top Ad

Hiển thị các bài đăng có nhãn PHP nâng cao. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn PHP nâng cao. Hiển thị tất cả bài đăng

Thứ Hai, 12 tháng 8, 2019

Tìm file đã sửa mới nhất trong thư mục PHP

09:20 0
Có rất nhiều dự án cần xử lý file trong php. Mình cũng đang gặp phải và đã trích bài toán này ra để lưu trữ vào blog này cho mình sử dụng về sau hoặc cho ai đó cần.

Bài toán:
Tìm file mới nhất của các file trong thư mục và hiển thị tên file và thời gian mới nhất của file bằng PHP.


Các bước:
1. Mở thư mục
2. Mở file
3. So sánh thời gian của file để lấy ra file mới nhất và thời gian mới nhất.
4. Đóng file
5. Hiển thị ra kết quả.

Đây là hình ảnh của thư mục mình muốn lấy:




Đoạn code file php:
<?php
$directory= "D:\backup\aws\Invoice";
$smallest_time=0;
$latest_file='';
if ($handle = opendir($directory)) {
    while (false !== ($file = readdir($handle))) {
        $time=filemtime($directory.'/'.$file);
        if (is_file($directory.'/'.$file)) {
            if ($time > $smallest_time) {
                $latest_file = $file;
                $smallest_time = $time;
            }
        }
    }
    closedir($handle);
$lastModified = date("Y/m/d H:i:s", $smallest_time); 
}
echo $latest_file.' - '.$lastModified;

Kết quả:




Hy vọng bài toán này sẽ giúp ích được cho các bạn.

Tham khảo thêm cách tìm thời gian mới nhất của file trong thư mục bằng PHP:

            $lastestTimeUserCoordination = array_values(File::allfiles(storage_path($backupInsertPath))); 
            $fixTime = 0;             
            foreach($lastestTimeUserCoordination  as $lastestTime){                 
                $currentModified  = filemtime($lastestTime);               
                if($fixTime < $currentModified ){
                    $fixTime = $currentModified ;
                    
                }                
            }
            $lastModified = date("Y年m月d日 H時i分s秒", $fixTime); 
Xem thêm

Thứ Sáu, 4 tháng 1, 2019

Mô hình abstract trong hướng đối tượng PHP - Bài 9

17:40 0
Trong môi trường team work, khi làm việc với nhiều lập trình viên. Phải làm sao để có thể đồng nhất các vấn đề ?. Làm sao để đưa ra những chuẩn mực chung nhằm ràng buộc các lập trình viên trong dự án phải làm theo ?. Mô hình trừu tượng (abstract) sẽ giúp bạn làm những điều đó một cách dễ dàng.

Abstract là gì? 
Lớp trừu tượng là lớp chứa các phương thức trừu tượng. Các lớp kế thừa lớp trừu tượng phải thực thi các phương thức trừu tượng của lớp trừu tượng.


Xem thêm

Kỹ thuật lazy loading trong lập trình hướng đối tượng PHP - Bài 8

16:53 0
Lazy loading là kỹ thuật quan trọng trong các mô hình PHP Framework hiện nay. Nhiệm vụ của chúng là hỗ trợ chúng ta nạp 1 thư viện nào đó một cách tự động mà không cần phải require chúng trên đầu của mỗi trang.
Trước khi tìm hiểu chúng ta xem qua hai ví dụ dưới đây nhé.

Tạo file vd06.php có nội dung sau:


Tạo thêm file ABC.php cùng thư mục với file vd06.php nhé


Sau đó chúng ta chạy file vd06.php trên localhost được kết quả như sau:
Xin chào các bạn! đã xem ictsharing.com
Thật kỳ diệu phải không nào?
Vậy tại sao lại vậy các bạn hiểu thế này nhé:
 Khi truy cập vào vd06.php -> Khi khởi tạo hàm $a = new ABC thì ngay lập tức kích hoạt hàm __autoload($url) trường hợp này autoload sẽ lấy tên ABC để đưa vào trong như một biến $url khi đó chúng ta require cái biến $url chính là file ABC.php .
Bên cạnh đó, bên trong trang ABC có phương thức test, nhiệm vụ của phương thức test này là show ra "Xin chào các bạn! đã xem ictsharing.com". 
Như vậy chúng ta sử dụng autoload không cần phải require một file nào đó như cách lập trình thông thường. 
Với cách lập trình thông thường khi cần sử dụng đối tượng nào đó chúng ta phải reguire file chứa phương thức đó. Như vậy chỉ sử dụng một đối tượng mà phải load cả file đó thì tốn rất nhiều tài nguyên thay vì sử dụng autoload.

=> Bản chất của autoload là chỉ khi chúng ta khởi tạo đối tượng thì nó mới chạy, điều đó có nghĩa khi chúng ta khởi tạo nó mới đi làm việc. Khi nào cần file nào thì mới làm việc chứ không phải chúng ta require hết một loạt file trước như cách lập trình thông thường.

Phương pháp này được sử dụng phổ biến ở các framework như codeigniter hay laravel ... sau này chúng ta học tới sẽ rõ hơn.


=> Như vậy Lazi loading là gì?
Là phương pháp tử động nạp file từ bên ngoài vào khi khởi tạo đối tượng, để sử dụng phương pháp này phải tuân thủ một số các chuẩn mực như đặt tên... Nếu không sẽ không sử dụng được.

Cú pháp là:
 function __autoload(){    // do something     }

Xem thêm

Clone - Đối tượng nhân bản trong hướng đối tượng PHP - Bài 7

16:10 0
Ở phần này, ta tiếp tục tìm hiểu qua về khái niệm nhân bản, đồng thời hiểu được bản chất của vấn đề. Tại sao lại phải sử dụng từ khóa clone trong ứng dụng ?
Ví dụ dưới đây sẽ cho ta hiểu hơn nhé:


Kết quả là 500. Tại sao lại bằng 500 thì trên hình mình đã giải thích rồi các bạn đọc qua hình nhé.

Để hiểu thực tế thì liên tưởng như sau:
 Tôi đi thuê một ngôi nhà có giá trị 1000$ sau đó bạn tôi qua chơi uống rượu phê lấy búa đập một bức tưởng mất 500$. Trong trường hợp này thì bạn tôi cũng như tôi phải mất 500$ đền cho nhà chủ vì đều làm ảnh hưởng tới ngôi nhà đó. Nhưng thực tế bài toán phải giải là thằng nào đập thằng đó phải đền chứ.

Vậy làm sao để khắc phục nó thì thằng b buộc phải khởi tạo thêm đối tượng làm tốn rất nhiều tài nguyên dẫn tới ứng dụng chạy chậm.
$b = new ABC;
Dẫn tới không khả thi.

=> Để giải quyết bài toàn này chúng ta cần phải sử dụng bài toán đối tượng nhân bản Clone trong lập trình hướng đối tượng.

Ví dụ:


Kết quả là 1000

Ví dụ 2:


Kết quả là: ictsharing.com chứ không phải là ictsharing do hành động bị set_name thứ 2 đè vào.

Khi ta thêm từ khóa clone vào thì lúc này b làm gì thì kệ b giá trị a ban đầu không thay đổi vẫn là ictsharing. 
Xem code trên hình sau:

Thông qua 2 ví dụ trên hy vọng sẽ giúp các bạn hiểu hơn về nhân bản clone trong php. Giúp tiết kiệm tài nguyên hơn khi chúng ta làm việc.

Xem thêm

Khái niệm static và const trong PHP - Bài 6

15:25 0
Ở phần này, ta sẽ tìm hiểu về phương thức tĩnh, thuộc tĩnh trong hướng đối tượng. Qua đó ta cũng phân biệt được sự khác nhau giữa thuộc tính thường và thuộc tính tĩnh. Đồng thời cũng nắm thêm về khái niệm hằng trong hướng đối tượng sẽ vận dụng như thế nào.

Phương thức tĩnh - Thuộc tính tĩnh - Hằng

Ta khai báo: 
Static $name  // biến là thuộc tính tĩnh
Static function test(){   ...  } // phương thức tĩnh
 Để có thể sử dụng và truy cập được các thuộc tính hay phương thức tĩnh ta phải sử dụng từ khóa:
Self::$name;
Self::test(); 
 Đó cũng là sự khác biệt giữa các thuộc tính và phương thức thường với tĩnh.

 => Sự khác biệt giữa thuộc tính - phương thức tĩnh với thường là gì?
- Bản chất thuộc tính tĩnh là chúng ta có thể truy xuất mà không cần khởi tạo một đối tượng chỉ cần chúng ta biết tên lớp:
ABC::$name;
ABC::test();
 - Phương thức thường và thuộc tính thường khi chúng ta muốn sử dụng bắt buộc phải khởi tạo đối tượng và từ đối tượng mới có thể truy cập được các phương thức và thuộc tính này.

Ví dụ:

(*) Phương thức và thuộc tính thông thường


Kết quả: ABCDABCD

(*) Phương thức và thuộc tính TĨNH
Đối với phương thức và thuộc tĩnh tĩnh chúng ta không cần phải khởi tạo đối tượng như hình dưới đây

Như vậy thuộc tính tĩnh khác thuộc tính thường ở những điểm sau:
 - Thuộc tính tĩnh khi muốn truy cập, sử dụng các phương thức khác phải sử dụng từ khóa Self, thay vì thuộc tính thường sử dụng từ khóa This.
 - Bản thân thuộc tính tĩnh không cần khởi tạo đối tượng vẫn có thể truy cập được những thuộc tĩnh này, thậm chí phương thức cũng vậy.

Vậy khi nào chúng ta nên sử dụng thuộc tính tĩnh?
- Khi thuộc tính hay một phương thức mà chúng ta có nhu cầu sử dụng nhiều, khi chúng ta sử dụng mỗi lần lại phải khởi tạo nhiều lần tốn rất nhiều tài nguyên thì chúng ta phải gán nó về thuộc tính hay phương thức tĩnh để giải quyết bài toán một cách dễ dàng.

Hằng thì sao?
 Chúng ta sử dụng từ khóa const để khai báo Hằng.
ví dụ:
 const RED;
muốn sử dụng Hằng trong những phương thức thì chúng ta dùng từ khóa Self giống như thuộc tính tĩnh.
Self:RED;
ví dụ:
 ABC::RED;
 ==> Vậy Hằng và thuộc tính tĩnh khác nhau ở điểm nào?
- Thuộc tính tĩnh thì dấu * vẫn là một thuộc tính, khi nó là thuộc tính thì nó vẫn có thể thay đổi được.
- Trong đó Hằng là loại giá trị bất biến mà nó không thể thay đổi được.

Ví dụ cách sử dụng Hằng:


Xem thêm

Thứ Năm, 3 tháng 1, 2019

Từ khóa parent và final trong hướng đối tượng PHP - Bài 5

18:15 0
Tiếp theo, Chúng ta sẽ nói tới 2 từ khóa quan trọng là parentfinal. Thông qua việc vận dụng 2 từ khóa này, chúng ta sẽ hiểu được thêm về khái niệm ghi đè trong hướng đối tượng ra sao.

(*) parent :
Parent::Ten_phuong_thuc();

Khi chưa có từ khóa Parent này sẽ cho ra kết quả là:
Teacher
Nó sẽ ưu tiên nhận lớp gần nó nhất, Ngược lại khi có thêm parent vào thì nó sẽ nhận thêm cả lớp cha.

Kết quả là:
ictsharing.comTeacher
 Như vậy từ khóa Parent là từ khóa khắc phục sự kiện ghi đè xẩy ra và chỉ có tác dụng một cấp cha.

(*) final : Hạn chế tối đa việc ghi đè
- Khi chúng ta khai báo một phương thức là final thì không có một phương thức nào có thể override(ghi đè lại được).
Như ví dụ trên, nếu chúng ta cho từ khóa final vào thì nó sẽ hiểu rằng đó là lớp cuối cùng rồi không được kế thừa nữa từ đó dẫn tới bị lỗi.


Kết quả trả về sẽ báo không được ghi đè:
 Fatal error: Class BCD may not inherit from final class (ABC) in E:\xampp\htdocs\hocphp\hocmvc\vd03.php on line 24

 Vậy phần này chúng ta nắm được cách ghi đè và cách chống ghi đè.
=> Final là không cho phép phương thức đó bị ghi đè, nghĩa là chỉ cần ở lớp cha có từ khóa final là lớp đó sẽ không được kế thừa và ghi đè.

Nghĩa là: Cho phép phương thức nào đó là phương thức cuối cùng. Cho phép lớp nào đó là lớp cuối cùng

Xem thêm

Post Top Ad

Your Ad Spot