I . Phép toán === (3 dấu bằng) là sao vậy ?
So sánh giá trị và kiểu dữ liệu:
Ví dụ nhé:
- Mã:
<?php
$a = 0;
if ($a == false) {
echo "aaaaaaaaaaaa";
}
else {
echo "bbbbbbbbbbbb";
}
?>
Đoạn code trên sẽ in ra: aaaaaaaaaaaa
Nhưng đoạn code sau:
- Mã:
<?php
$a = 0;
if ($a === false) {
echo "aaaaaaaaaaaa";
}
else {
echo "bbbbbbbbbbbb";
}
?>
thì in ra: bbbbbbbbbbbb
II . Một số chú ý khi viết mã PHP để tối ưu tốc độ ....
- Viết các phương thức, hàm có thể được dưới dạng Static
để tăng tốc độ thực thi.
- Sử dụng echo thay cho print.
- Dùng echo để xuất các biến nối tiếp nhau thay cho việc
xuất các chuỗi liên tiếp.
- Gán giá trị lớn nhất cho biến chạy trong vòng lặp for,
thay vì gán bên trong như thông thường. VD: $maxvalue = 100/10;
for($i=0; $i<$maxvalue; $i++){ // Code } sẽ nhanh
hơn: for($i=0; $i<100/10; $i++){ // Some code }
- Unset các biến để giải phóng bộ nhớ, đặc biết là các
mảng lớn.
- Hạn chế dùng các hàm __get, __set, __autoload
- Hàm require_once() nên sự dụng hạn chế.
- Sử dụng được dẫn đầy đủ ở các hàm includes và requires.
- Nếu bạn cần biết thời gian lúc đoạn script bắt đầu thực
thi, hàm $_SERVER[’REQUEST_TIME’] được ưu tiên sử dụng hơn time()
- Nếu có thể, nên sử dụng strncasecmp, strpbrk và stripos
thay cho regex.
- Dùng str_replace nhanh hơn preg_replace, nhưng hàm
strtr lại nhanh hơn str_replace.
- Nếu trong các hàm, như là hàm thay thế chuỗi, sử dụng
tham biến gồm cả chuỗi và kí tự, nên viết thêm 1 vài hàm thay thế từng kí
tự một trong chuỗi, thay vì sử dụng 1 dòng code tìm và thay thế nhiều
chuỗi.
- Sử dụng lệnh rẽ nhánh switch tốt hơn 1 lô lốc các lệnh
if,else if chồng nhau.
- Chặn lỗi bằng kí tự @ rất chậm.
- Bật hàm mod_deflate của apache.
- Đóng kết nối với CSDL khi các thao tác với nó đã hoàn
thành.
- $row[’id’] nhanh hơn 7 lần so với $row[id]
- Các thông báo lỗi (Error Messages) rất tốn tài nguyên.
- Không sử dụng các hàm bên trong vòng lặp, ví dụ: for
($x=0; $x < count($array); $x) , hàm count() sẽ được gọi mỗi lần lặp.
- Tăng giá trị 1 biến cục bộ (local variable) bên trong
phương thức của nó thì nhanh hơn. Gần như việc gọi 1 biến cục bộ trong 1
hàm.
- Tăng giá trị của biến toàn cục (global variable) chậm
hơn 2 lần so với biến cục bộ.
- Tăng giá trị thuộc tính của 1 object (vd:
$this->prop++) thì chậm hơn 3 lần so với biến cục bộ.
- Tăng giá trị của 1 biến cục bộ chưa được định nghĩa sẽ
chậm hơn 9-10 lần so với 1 biến đã được cài đặt sẵn từ trước.
- Chỉ khai báo 1 biến toàn cục mà không sử dụng nó trong một hàm cũng làm chậm tốc độ (bằng khoảng thời gian như việc tăng giá trị 1 biến cục bộ). PHP hầu như phải kiểm tra xem biến này có tồn tại trước đó hay không.
III.
Tớ đang có project cần làm 1 cái schedule . Hiện tại đang vật vã vì
thiếu kinh nghiệm xử lý các kiểu dữ liệu về ngày tháng , thời gian .
Giờ trong database của tớ có 2 column . 1 cái format theo date , 1 cái theo time . VD :
Date : 2008-08-27 ( 0000-00-00 )
Time : 10:00:00 ( 00:00:00 )
Tớ cần xử lý 1 số vấn đề sau :
- So sánh thời gian hiện tại với dữ liệu trong db . VD lấy ra tất cả nội dung trong ngày 27/8/08 .Hay lấy các event sắp đến . VD lúc 10h30 học Toán , 10h45 học Lý , 11h học Hoá .v.v...
- Tách riêng từng phần tử trong CSDL khi lấy ra = php để xử lý . Đại loại như : getDate("2008-08-27") => 27 . Hoặc getHour("10:00:00") => 10
Hiện tại đang khá bế tắc . Ví dụ như hàm time() nó lại trả theo kiểu unix còn của mình lưu trữ theo date , time hoặc datetime muốn so sánh phải dùng hàm date format lại Còn những trường hợp như tớ đề cập ở trên VD tớ muốn lấy các event sau 10h thì phải so sảnh thế nào ? Ai biết xin hướng dẫn tớ với .
Giờ trong database của tớ có 2 column . 1 cái format theo date , 1 cái theo time . VD :
Date : 2008-08-27 ( 0000-00-00 )
Time : 10:00:00 ( 00:00:00 )
Tớ cần xử lý 1 số vấn đề sau :
- So sánh thời gian hiện tại với dữ liệu trong db . VD lấy ra tất cả nội dung trong ngày 27/8/08 .Hay lấy các event sắp đến . VD lúc 10h30 học Toán , 10h45 học Lý , 11h học Hoá .v.v...
- Tách riêng từng phần tử trong CSDL khi lấy ra = php để xử lý . Đại loại như : getDate("2008-08-27") => 27 . Hoặc getHour("10:00:00") => 10
Hiện tại đang khá bế tắc . Ví dụ như hàm time() nó lại trả theo kiểu unix còn của mình lưu trữ theo date , time hoặc datetime muốn so sánh phải dùng hàm date format lại Còn những trường hợp như tớ đề cập ở trên VD tớ muốn lấy các event sau 10h thì phải so sảnh thế nào ? Ai biết xin hướng dẫn tớ với .
Vụ này tớ chưa làm chi tiết bao giờ , nhưng theo tớ nhớ là giữa
timestamp của MYSQL và UNIX nó khác nhau 1 trời 1 vực , của mysql là
yyyy-mm-dd hh:mm:ss , còn UNIX Timestamp là 123123213 gì gì đó , do đó
việc so sánh trực tiếp là ... ko thể , phải trải qua các ông mai bà mối
trung gian :d
Mysql có hàm để chuyển UNIX TimeStamp sang MYSQL Timestame là FROM_UNIXTIME() , dùng tạm nó để so sánh cũng được .
Àh , mà sao ko dùng kiểu DATETIME hay Timestamp mà lại chia ra thành 2 field thế nhỉ ...
Khi bạn gọi hàm time() không tham số thì hàm sẽ trả về Unix timestamp, tức là số giây tính từ thời điểm bắt đầu có khái niệm Unix (January 1 1970 00:00:00 GMT). Bạn có thể vào đây để tham khảo về tham số của hàm time() -> http://www.php.net/manual/en/function.time.php.
Mysql có hàm để chuyển UNIX TimeStamp sang MYSQL Timestame là FROM_UNIXTIME() , dùng tạm nó để so sánh cũng được .
Àh , mà sao ko dùng kiểu DATETIME hay Timestamp mà lại chia ra thành 2 field thế nhỉ ...
Khi bạn gọi hàm time() không tham số thì hàm sẽ trả về Unix timestamp, tức là số giây tính từ thời điểm bắt đầu có khái niệm Unix (January 1 1970 00:00:00 GMT). Bạn có thể vào đây để tham khảo về tham số của hàm time() -> http://www.php.net/manual/en/function.time.php.
Đăng nhận xét