Blog chia sẻ và thảo luận về IT|Programming Language|Search Engine Optimization|Data Base|Linux| ...

datnguyen

PHP Basic

+ No comment yet
Đây là bài viết tổng hợp kiến thức Php căn bản mình sưu tầm trên google nên sẽ không theo một chủ đề hay Tuturial nào. Hi vọng sẽ cập nhật thường xuyên ....

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 độ ....



  1. 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.
  2. Sử dụng echo thay cho print.
  3. 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.
  4. 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 }
  5. Unset các biến để giải phóng bộ nhớ, đặc biết là các mảng lớn.
  6. Hạn chế dùng các hàm __get, __set, __autoload
  7. Hàm require_once() nên sự dụng hạn chế.
  8. Sử dụng được dẫn đầy đủ ở các hàm includes và requires.
  9. 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()
  10. Nếu có thể, nên sử dụng strncasecmp, strpbrk và stripos thay cho regex.
  11. Dùng str_replace nhanh hơn preg_replace, nhưng hàm strtr lại nhanh hơn str_replace.
  12. 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.
  13. 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.
  14. Chặn lỗi bằng kí tự @ rất chậm.
  15. Bật hàm mod_deflate của apache.
  16. Đóng kết nối với CSDL khi các thao tác với nó đã hoàn thành.
  17. $row[’id’] nhanh hơn 7 lần so với $row[id]
  18. Các thông báo lỗi (Error Messages) rất tốn tài nguyên.
  19. 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.
  20. 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.
  21. 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ộ.
  22. 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ộ.
  23. 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.
  24. 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 .

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.

Link: http://www.ddth.com/showthread.php/42124-xin-hỏi-về-hàm-time()-trong-php?s=49a41c459e605f63ef331f4000185241#ixzz2ECLHeQMF

4.
Các bác cho em hỏi cái:
Em tạo một trang để thu thập dữ liệu qua form HTML như sau:
Code: [Select]
<form action="check02.php" method="post">
<input type="text" name="hoten" value="Ho va Ten"><BR>
<input type="text" name="ngaysinh" value="Ngay sinh DD/MM/YY"><BR>
<input type="submit" name="submit" value="Add">
<input type="reset" name="reset" value="Clear">
</form>

Sau đó kết quả sẽ đưa về trang check02.php để xử lý, như sau:

Code: [Select]
<?php
if (isset($_POST[submit])&&($_POST[submit] == "Add"))
{echo "<B>Cam on ban da gui thong tin</B>";}
else{
?>
<form action="check02.php" method="post">
<input type="text" name="hoten" value="Ho va Ten"><BR>
<input type="text" name="ngaysinh" value="Ngay sinh DD/MM/YY"><BR>

<input type="submit" name="submit" value="Add">
<input type="reset" name="reset" value="Clear">
<?php
}
?>

Tuy nhiên, sau khi ấn Submit, thì nó hiện thông báo
Notice: Use of undefined constant submit - assumed 'submit' in C:\wamp\www\check02.php on line 2
Notice: Use of undefined constant submit - assumed 'submit' in C:\wamp\www\check02.php on line 2
Cam on ban da gui thong tin

Em hiểu ở đây là nó báo lỗi biến submit ở trang check02.php chưa được khai báo (vì nó nhận dữ liệu ở trang trước đó).

Đăng nhận xét