Development – Tân Hồng IT https://tanhongit.com Kiến thức tin học, máy tính, lập trình, thủ thuật tiện ích Mon, 09 Mar 2020 03:45:51 +0000 en-US hourly 1 https://wordpress.org/?v=5.3.2 https://tanhongit.com/wp-content/uploads/2020/02/favicon-tanhongit.png Development – Tân Hồng IT https://tanhongit.com 32 32 Cách làm việc với code của người khác https://tanhongit.com/cach-lam-viec-voi-code-cua-nguoi-khac/ https://tanhongit.com/cach-lam-viec-voi-code-cua-nguoi-khac/#respond Mon, 09 Mar 2020 03:41:49 +0000 https://tanhongit.com/?p=2525 Xem code hay làm việc với code của người khác là một kỹ năng cơ bản của developer. Dành thời gian tìm hiểu và code đó thậm chí có thể trở thành của riêng bạn. Hôm nay tôi sẽ xem xét một số phương pháp tốt nhất để làm việc với code của người khác, […]

The post Cách làm việc với code của người khác appeared first on Tân Hồng IT.

]]>
Xem code hay làm việc với code của người khác là một kỹ năng cơ bản của developer. Dành thời gian tìm hiểu và code đó thậm chí có thể trở thành của riêng bạn.

Hôm nay tôi sẽ xem xét một số phương pháp tốt nhất để làm việc với code của người khác, đọc code di sản (legacy) một cách hiệu quả. Đây không phải là một chủ đề dễ dàng để viết đầy đủ.

lam viec code nguoi khac
Cách làm việc với code của người khác

Để làm cho quá trình làm việc với code của người khác dễ thở hơn, tôi tập trung vào các mục chính sau:

  • Tương tác
  • Quan sát
  • Chạy thử nghiệm – Test
  • Fix Bugs thiết kế dành cho người mới
  • Tìm Tài nguyên sẵn có
  • Sử dụng một IDE tốt
  • Đọc sách & Blogs
  • Đóng góp Tài liệu
  • Hãy cẩn trọng

Tương tác

Các lead developer là ai? Họ ở đâu? Có phải họ có mặt trực tiếp trong văn phòng của bạn? Nếu vậy, hãy nói chuyện với họ hoặc gửi email cho họ. Những người này hẳn là có kiến thức tốt nhất về dự án.

Bạn có phải là nhân viên làm việc từ xa (remote) hoặc freelancer? Công ty hoặc dự án có các kênh thông tin liên lạc không? Các developer dùng IRC, Slack, Twitter, email, Trello hay cái gì khác?

Hãy chắc chắn rằng bạn đang cùng nơi với họ. Một chỉ trích thường nhằm vào Zend Framework 2 là không có cộng đồng năng động. Không hẳn vậy, vì kênh IRC của họ đang hoạt động hàng ngày. Hãy đảm bảo bạn đang sinh hoạt cùng chỗ với các developer và các thành viên khác trong team.

Quan sát

Khi bạn lần đầu vào một dự án, đừng quá khắt khe với bản thân. Đừng mong đợi biết được tất cả mọi thứ ngay từ đầu. Tôi từng nghe nói về chuyện mất ba tuần đến ba tháng làm việc hàng ngày với codebase (code nền tảng đã có sẵn) trước khi một developer có thể thực sự làm việc hiệu quả với codebase đó.

Một số người có quan niệm sai lầm rằng bạn có thể, bằng cách nào đó, chỉ cần nhảy vào và ngay lập tức làm việc hiệu quả. Có lẽ họ đã xem quá nhiều phim của Hollywood như Swordfish.

Các codebase mất thời gian để học vì chúng được xây dựng từ những ý tưởng, định kiến, niềm tin và cách tiếp cận của tất cả các developer làm việc trong dự án. Vì bạn là người mới, bạn sẽ không có bất kỳ kiến thức nền nào cả.

Dưới đây là 5 cách hay để bắt đầu:

  • Dành thời gian xem lướt qua mọi thứ
  • Đặt câu hỏi
  • Cài đặt thử
  • Thử sử dụng cái vừa cài đặt thử
  • Đọc qua các comment trong code và các tài liệu liên quan

Đừng khắt khe với bản thân, hãy cho mình cơ hội để có được một sự khởi đầu tốt. Sau một thời gian, bạn sẽ bắt đầu hiểu rõ hơn về cách ứng dụng được xây dựng.

Tại giai đoạn này, hãy tiến nhanh hơn bằng cách hỏi các developer khác và các senior developer. Bạn hẳn đã có một danh sách các câu hỏi khi bạn lướt qua codebase.

Hãy dành thời gian ra để hỏi các developer khác lời giải thích cho các khúc mắc của bạn. Đừng e ngại, hãy hành động và nhận được câu trả lời mà bạn cần.

Chạy Test

1411369515running-phpunit-1024x649.png

Bất kỳ codebase tốt nào đều có các test. Nếu không thì thật không hay. Thực ra có thể là các developer team này chưa bao giờ thực hiện test, nhưng tôi sẽ hơi quan ngại nếu họ không làm điều này.

Nếu có test, hãy chạy thử. Có pass hết không? Tôi đã gặp nhiều codebase có một bộ các test mà không ai có thể chạy qua được. Liệu chúng đã được cập nhật chưa?

Sau khi bạn đã thử chạy chúng, hãy đọc. Nếu chúng được viết tốt, chúng sẽ mô tả cách ứng dụng làm việc, nó sẽ làm gì, và các thành phần kết dính với nhau như thế nào. Sẽ mất thời gian để đi sâu vào những thứ này.

Fix Bugs thiết kế cho người mới

Một cách dễ dàng để bắt đầu là tìm hiểu tại sao xuất hiện bug và fix các bug dành cho người mới hoặc junior developer trong dự án. Hai ví dụ tốt là Joind.In và ownCloud, trong hình dưới đây là bug tracker của ownCloud:

1411369550owncloud-1024x732.png

Bạn có thể thấy các ticket đã được đánh dấu rõ ràng. Hãy đọc qua và tham gia fix chúng. Những bug này không đòi hỏi quá cao về kỹ thuật, nhưng bạn sẽ có thể dễ dàng hòa mình vào dự án, xây dựng sự tự tin và kiến thức.

Thành tựu và kỹ thuật phức tạp thì rất tuyệt vời, nhưng nếu hiện tại không đạt được ngay hoặc sẽ mất rất nhiều thời gian, chúng sẽ không giúp gì cho sự tự tin và nhiệt huyết của bạn. Hãy bắt đầu từ những cái dễ và nhỏ.

Tìm tài nguyên sẵn có

Một trong những điều tốt nhất bạn có thể làm khi tiếp quản một codebase, hoặc khi tham gia vào một team hiện có, là tập hợp được nhiều tài nguyên nhất có thể. Không biết cần tìm gì ư? Dưới đây là một số ý tưởng để giúp bạn bắt đầu:

  • Bạn có quyền truy cập vào kho lưu trữ mail không?
  • Dự án hoặc công ty có wiki không?
  • Tài liệu dự án nào đã được biên soạn?
  • Bạn đã đọc qua version control history chưa?
  • Những người đóng góp có viết các commit message có ý nghĩa và nhất quán không?

Sử dụng một IDE tốt

1411369591phpstorm-syntax-highlighting-1024x794.png

IDE tốt thì quý như vàng. Dù bạn là một developer Ruby, Python, Go, Java, PHP hay ngôn ngữ nào khác, hãy tìm một IDE tốt dành riêng hoặc tùy chỉnh cho ngôn ngữ bạn lựa chọn.

Tôi đánh giá cao những người theo chủ nghĩa thuần túy, thích VIM hoặc Emacs, điều đó OK thôi. Nhưng tôi là một người yêu IDE và IDE mà tôi lựa chọn là PhpStorm. Có rất nhiều những lựa chọn khác, chẳng hạn như Eclipse, TextMate, SublimeText, và VisualStudio.

Một khi bạn đã tìm thấy IDE cho mình, hãy bắt đầu sử dụng các tính năng nó cung cấp. Ở đây tôi lấy ví dụ cho PhpStorm, bạn có thể áp dụng những nguyên tắc này cho IDE bạn chọn.

Bắt đầu duyệt qua code và xem nó có theo một chuẩn nào không. Không nhất thiết phải là một chuẩn chính thức như PHP PSRs. Xem thử liệu developer có theo một phong cách nhất quán không hay là lộn xộn. Sử dụng các công cụ như mess detector và cyclomatic complexity tester để đánh giá chất lượng code.

Có tài liệu hướng dẫn nào không? Nếu có thì IDE của bạn sẽ có thể sử dụng chúng khi bạn kiểm tra code. Tiếp theo, sử dụng một trình gỡ lỗi (debugger), chẳng hạn như xhprof, Xdebug hoặc Zend Debugger, rồi chạy ứng dụng xem nó hoạt động như thế nào.

Nó làm gì? Cấu trúc dữ liệu nào nó tạo ra và sử dụng? Nó có lặp lại các khối code không cần thiết không? Có nhiều thứ hơn nữa cần xem xét, nhưng sử dụng các tính năng mà IDE cung cấp sẽ giúp bạn dễ thở hơn nhiều.

Đọc và Học hỏi

Điều này đúng cho cá nhân tôi. Càng học hỏi nhiều, chúng ta càng trở nên khôn lớn và làm được việc. Chúng ta không phải là người đầu tiên trên con đường chúng ta đang đi. Nhiều, rất nhiều những người khác đã đi trước chúng ta và đã mắc những lỗi tương tự như chúng ta.

Hãy tiết kiệm cho mình một chút thời gian khi nghĩ về quá trình học tập khó khăn của những người đi trước và học hỏi từ họ. Nhiều developer giỏi cũng vừa là các tác giả viết sách và các blogger.

Một trong những tác giả yêu thích của tôi là Martin Fowler, người đã xuất bản một cuốn sách tuyệt vời về chủ đề tái cấu trúc (refactoring). Cũng có những cuốn sách khác rất tuyệt vời, chẳng hạn như Design Patterns, và các trang web như SourceMaking.com.

Tự tìm hiểu và tiếp tục học hỏi từ các nguồn tài nguyên như vậy. Nó không hề dễ dàng, nhưng phần thưởng là rất xứng đáng.

Đóng góp Tài liệu

Đây là một trong những điều mà tôi không làm đủ. Thật dễ dàng khi ngồi ngoài và chỉ trích một codebase, framework hay dự án phần mềm. Thay vì làm điều đó, hãy bắt tay vào tham gia đóng góp.

Tài liệu không phải là dành cho các lập trình viên thất bại, các nhà thiết kế đồ họa hay những người không am hiểu kỹ thuật. Các dự án phần mềm lớn nhất luôn đề xuất rằng nơi tốt nhất để bắt đầu là tài liệu hướng dẫn.

Một trong những dự án nổi bật nhất mà thực hiện điều này là Linux Kernel. Còn cách nào tốt hơn để học một cái gì đó hơn là tài liệu? Sau tất cả, nếu bạn thực sự biết điều gì đó thì bạn mới có thể làm tài liệu về nó.

Vì vậy, nếu là một dự án mã nguồn mở, hãy nhảy vào, tìm hiểu về nó, đọc qua code, ghi chép lại, và sau đó đóng góp tài liệu. Nếu đó là một ứng dụng nội bộ, hãy là người đầu tiên bắt đầu làm tài liệu; thậm chí nếu không có ai khác ngoài bạn.

Có thể sẽ không có tài liệu; nhưng điều đó thật sự khủng khiếp. Mọi dự án đều phải bắt đầu từ một nơi nào đó. Khi bạn làm việc với code, hãy viết ra những gì bạn biết.

Những developer giỏi nhất mà tôi biết, ví dụ như Lorna Jane, bắt đầu viết blog theo cách này. Cô viết blog để lưu giữ những gì đã học được, mà sau này trở thành một trong những blog PHP phổ biến nhất.

Hãy cẩn trọng

Điểm cuối cùng: Hãy suy nghĩ cẩn trọng đối với các developer mà bạn đang xem và làm việc trên di sản của họ. Bạn không biết về sự nghiệp và trình độ học vấn của họ, và những thứ này đã hạn chế họ như thế nào, khi họ viết ra những dòng code mà bạn đang đọc.

Hơn nữa, level kĩ năng hiện tại của bạn đang ở mức nào? Sẽ là tùy tiện khi chúng ta trẻ hơn, non hơn, và ít kinh nghiệm, lại đi phán xét người khác.

Chúng ta nghĩ rằng chúng ta biết tất cả và những kỳ vọng, những khái niệm và phương pháp tiếp cận của chúng ta là những cách đúng và chính xác. Nhưng có thực sự đúng là như vậy không? Tôi tin rằng, khi chúng ta trưởng thành và lớn hơn một chút, chúng ta cũng trở nên khôn ngoan hơn và chấp nhận vô vàn các phương pháp tiếp cận phát triển phần mềm mà đã từng tồn tại.

Chúng ta có thể không cần phải đồng ý với họ, nhưng họ không hẳn là đã sai. Họ có thể có rất nhiều điều để dạy chúng ta, có thể giúp chúng ta lớn khôn. Vì vậy, hãy luôn cố gắng và suy nghĩ ân cần với những người khác và vị trí của họ. Đừng trở thành một người mới đáng ghét, chỉ ngón tay và đổ lỗi. Hành xử kiểu này sẽ không giúp ích cho bất kì ai, đặc biệt là chính bản thân bạn.

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

via viblo and sitepoint

CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ

The post Cách làm việc với code của người khác appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/cach-lam-viec-voi-code-cua-nguoi-khac/feed/ 0
PHP OOP – Bài 1: Lập trình hướng đối tượng trong PHP là gì? https://tanhongit.com/lap-trinh-huong-doi-tuong-trong-php-la-gi/ https://tanhongit.com/lap-trinh-huong-doi-tuong-trong-php-la-gi/#respond Thu, 05 Mar 2020 11:51:25 +0000 https://tanhongit.com/?p=2499 Đây là bài viết mở đầu cho series học Lập trình PHP hướng đối tượng ( PHP OOP) của chúng ta và trong bài này chúng ta sẽ đi qua một số khái niệm về đối tượng và lập trình hướng đối tượng là gì, tìm hiểu về những ưu điểm của lập trình hướng […]

The post PHP OOP – Bài 1: Lập trình hướng đối tượng trong PHP là gì? appeared first on Tân Hồng IT.

]]>
Đây là bài viết mở đầu cho series học Lập trình PHP hướng đối tượng ( PHP OOP) của chúng ta và trong bài này chúng ta sẽ đi qua một số khái niệm về đối tượng và lập trình hướng đối tượng là gì, tìm hiểu về những ưu điểm của lập trình hướng đối tượng và một số khái niệm liên quan khác nằm trong chuyên đề này.

Vậy đối tượng ( object) là gì?

Trong lập trình hướng đối tượng, đối tượng được hiểu như là 1 thực thể: người, vật hoặc 1 bảng dữ liệu, . . .

Một đối tượng bao gồm 2 thông tin: thuộc tính và phương thức

  • Thuộc tính chính là những thông tin, đặc điểm của đối tượng. Ví dụ: một người sẽ có họ tên, ngày sinh, màu da, kiểu tóc, . . .
  • Phương thức là những thao tác, hành động mà đối tượng đó có thể thực hiện. Ví dụ: một người sẽ có thể thực hiện hành động nói, đi, ăn, uống, . . .

Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (Object-oriented programming – OOP)  là kiểu viết code sử dụng lớp (classes), quan hệ (relationships), thuộc tính (properties) và phương thức (methods) của đối tượng (objects) nhằm giảm thời gian viết code và giúp đơn giản hóa việc lập trình.

OOP là kỹ thuật cho phép lập trình viên tạo ra các đối tượng trong code, từ đó trừu tượng hóa đối tượng thực tế trong cuộc sống. Hướng tiếp cận dựa trên lập trình đối tượng này là một trong những khuôn mẫu phát triển phần mềm, đặc biệt là phần mềm cho các doanh nghiệp.

lap trinh huong doi tuong oop php la gi
Lập trình hướng đối tượng trong PHP là gì?

Đây là phương pháp lập trình hỗ trợ công nghệ đối tượng (OOP) giúp tăng năng xuất và đơn giản hóa công việc xây dựng phần mềm, bảo trì phần mềm, cho phép lập trình viên tập trung vào các đối tượng giống như trong thực tế.

Thực tế khi làm một việc gì đó, chúng ta sẽ quan tâm đến hai điều: vật bị tác động và hành động. Với lập trình cũng vậy, nếu chúng ta tập trung vào hành động thì đó là lập trình hướng thủ tục còn nếu tập trung vào các vật thể hay đối tượng nào đó được tác động thì đó là lập trình hướng đối tượng.

Ví dụ dưới đây sẽ mô tả về một ứng dụng lấy thông tin của học sinh theo 2 phương pháp lập trình hướng thủ tục và lập trình hướng đối tượng.

Phương pháp lập trình theo hướng thủ tục:

<?php
function getPersonnel()
{
    $name = 'Nguyen Minh Man';
    $age = 18;
    $class = '12A1';
    return $name . '-' . $age . '-' . $class;
}
echo getPersonnel();

Phương pháp lập trình theo hướng đối tượng OOP

<?php
//tạo  class User
class User
{
    public  $name = "Nguyen Minh Man";
    private $age;
    protected $class;
    private $info;

    public function setUser($age, $class)
    {
        $this->age = $age;
        $this->class = $class;
        $this->getPersonnel();
    }
    protected function getPersonnel()
    {
        return $this->info = $this->name . ' is ' . $this->age . ' years old' . ' of ' . $this->class;
    }

    public function getInfo()
    {
        return $this->info;
    }
}
$user = new User(); //tạo một đối tượng mới từ class User

$user->setUser(18, '12A1');
echo $user->getInfo();
?>

Các bạn nhìn thấy mặc dù từ ví dụ trên ta thấy code theo phương pháp lập trình hướng đối tượng nó dài hơn, tuy nhiên, sau khi các bạn học kiến thức đầy đủ về phương pháp này bạn sẽ thấy công dụng của nó rất thuận lợi đối với một dự án lớn có các file được liên kết với nhau.

Ví dụ như khi muốn thay đổi giá trị nào đó thì bạn chỉ cần thay đổi trong một hàm thành phần nhất định, toàn bộ mã nguồn của bạn khi này có các file được quan hệ với nhau sẽ đồng loại thay đổi theo.

Ưu điểm của lập trình hướng đối tượng OOP

  • Dễ dàng quản lý code khi có sự thay đổi chương trình.  Thay vì việc thay đổi các mã nguồn của đối tượng mà giờ đây lập trình viên chỉ cần thay đổi một số hàm thành phần.
  • Dễ mở rộng dự án.
  • Tiết kiệm được tài nguyên đáng kể cho hệ thống.
  • Có tính bảo mật cao.
  • Có tính tái sử dụng cao.
  • Phù hợp với thiệt lập cho những phần mềm phức tạp, phần mềm lớn.

Nhược điểm của lập trình hướng đối tượng OOP

Lập trình hướng đối tượng OOP có nhượng điểm là có thể khiến dữ liệu được xử lý tách rời, khi cấu trúc dữ liệu thay đổi sẽ dẫn đến việc thuật toán bị thay đổi theo.

Những tính chất của lập trình hướng đối tượng OOP

Lập trình hướng đối tượng có 4 tính chất:

  • Abstraction – Tính trừu tượng.
  • Inheritance – Tính kế thừa.
  • Encapsulation – Tính đóng gói.
  • Polymorphism – Tính đa hình.

Về các tính chất trên mình sẽ nói chi tiết sau và các bạn sẽ được học qua các bài tiếp theo của series này nhé!

Tham khảo:

Kết thúc

Qua bài học đầu tiên, mình đã giới thiệu cho các bạn khái niệm về lập trình hướng đối tương OOP và một số khái niệm khác cũng như những ưu và nhược điểm của nó. Mong các bạn sẽ phát triển hơn trong việc học tập của bản thân và tiếp tục đón những bài viết tiếp theo trong series học PHP nâng cao OOP – lập trình PHP hướng đối tượng nhé!

Xem thêm:

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!
CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ

The post PHP OOP – Bài 1: Lập trình hướng đối tượng trong PHP là gì? appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/lap-trinh-huong-doi-tuong-trong-php-la-gi/feed/ 0
Bài 19: Xử lý ngoại lệ trong PHP – PHP Exceptions https://tanhongit.com/bai-19-xu-ly-ngoai-le-trong-php-php-exceptions/ https://tanhongit.com/bai-19-xu-ly-ngoai-le-trong-php-php-exceptions/#respond Wed, 26 Feb 2020 04:34:07 +0000 https://tanhongit.com/?p=2381 Ngoại lệ, error và xử lý ngoại lệ là những khái nhiệm rất quen thuộc đối với tất cả các lập trình viên. Bài viết này trình bày các vấn đề liên quan đến Exception trong PHP. PHP có cung cấp các cơ chế giúp bắt lỗi, giám sát các lỗi và xử lý các […]

The post Bài 19: Xử lý ngoại lệ trong PHP – PHP Exceptions appeared first on Tân Hồng IT.

]]>
Ngoại lệ, error và xử lý ngoại lệ là những khái nhiệm rất quen thuộc đối với tất cả các lập trình viên. Bài viết này trình bày các vấn đề liên quan đến Exception trong PHP. PHP có cung cấp các cơ chế giúp bắt lỗi, giám sát các lỗi và xử lý các lỗi có thể xảy ra khi lập trình.

Trong nhiều ứng dụng lớn, có thể mở rộng, trong các ứng dụng hướng đối tượng và các frameworks thì việc bắt được các Exception trong quá trình develop là điều cực kì tốt.

xu ly ngoai le php exception
Bài 19: Xử lý ngoại lệ trong PHP – PHP Exceptions

Ngoại lệ (Exception) trong PHP là gì?

Bạn có thể hiểu nôm na ngoại lệ như sau: Trong lập trình chúng ta sẽ tạo ra những đoạn code, hàm, mảng mới mong muốn nó thực hiện một hành động nào đó trong chương trình. Như vậy, tất cả các hành động có thể xảy ra mà khác với mong muốn đó thì nó chính là ngoại lệ (Exception).

Và chúng ta sẽ không bao giờ muốn cho chương trình của mình hoạt động sai mong muốn phải không nào. Vì thế mà ta cần xử lý ngoại lệ để tránh những ngoại lệ đó phá hỏng chương trình.

Trái ngược với hệ thống xử lý lỗi trong PHP, xử lý ngoại lệ là phương pháp hướng đối tượng để xử lý lỗi, cung cấp hình thức báo cáo lỗi linh hoạt và có kiểm soát hơn.

Các phương pháp xử lý ngoại lệ trong PHP

  • Sử dụng try, throw và catch.
  • Tạo lớp ngoại lệ tùy chỉnh.
  • Xử lý nhiều ngoại lệ.
  • Ném lại một ngoại lệ.
  • Thiết lập trình xử lý ngoại lệ cao cấp.

Xử lý ngoại lệ (Exception Handling) trong PHP

Sử dụng try, throw và catch

Ta sẽ có một số khái niệm cần lưu ý dưới đây:

Try − Một hàm sử dụng một exception nên nằm trong khối try. Nếu exception không xảy ra( không được kích hoạt), code sẽ tiếp tục như bình thường. Tuy nhiên, nếu exception xảy ra ( được kích hoạt) thì exception đó sẽ bị “thrown”.

Throw − Đây là cách bạn kích hoạt một exception. Mỗi “thrown” phải có ít nhất một “catch”.

Catch − Mỗi khối “catch” bắt một exception và tạo một đối tượng chứa thông tin của exception đó.

Cú pháp tổng quát của try catch

<?php
  try {
    //Thực hiện đoạn mã này có khả năng ném ra một ngoại lệ
  }
  catch (Exception $e) {
    //Xử lý ngoại lệ ở đây
  }
?>

Ví dụ:

<?php 
// PHP Program to illustrate normal 
// try catch block code 
function demo($var) { 
    echo "<br> Before try block"; 
    try { 
        echo "<br> Inside try block"; 
              
        // If var is zero then only if will be executed 
        if($var == 0) 
        { 
                  
            // If var is zero then only exception is thrown 
            throw new Exception('Number is zero.'); 
                  
            // This line will never be executed 
            echo "<br> After throw (It will never be executed)"; 
        } 
    } 
          
    // Catch block will be executed only  
    // When Exception has been thrown by try block 
    catch(Exception $e) { 
            echo "<br> Exception Caught: ", $e->getMessage(); 
        } 
          
        // This line will be executed whether 
        // Exception has been thrown or not  
        echo "<br> After catch (will be always executed)"; 
} 

// Exception will not be rised 
demo(2); 
echo '<br>';
echo '<br>';
// Exception will be rised here 
demo(0); 
?>

Kết quả:

Before try block
Inside try block
After catch (will be always executed)


Before try block
Inside try block
Exception Caught: Number is zero.
After catch (will be always executed)

Trong đó Hàm demo() kiểm tra nếu một số có bằng 0 hay không. Nếu điều kiện đúng ngoại lệ được ném ra. Khối “catch” lấy ra ngoại lệ và tạo ra một đối tượng ($e) chứa thông tin ngoại lệ. Thông báo lỗi từ ngoại lệ được lặp lại bằng cách gọi $e->getMessage() từ đối tượng ngoại lệ.

Trong ví dụ trên, hàm $e->getMessage() được sử dụng để lấy error message. Không chỉ có mỗi một hàm đó, dưới đây là một số hàm có thể được sử dụng từ lớp Exception trong PHP.

Một số hàm lấy error message

  • getMessage() − thông báo của exception
  • getCode() − code của exception
  • hàm getFile() − tên source file
  • getLine() − source line
  • getTrace() − n mảng của backtrace()
  • hàm getTraceAsString() − chuỗi được định dạng của trace
  • getClass() – class có exception

Từ ví dụ về try catch trên ta có thể thêm như sau:

<?php
// PHP Program to illustrate normal 
// try catch block code 
function demo($var)
{
    echo "<br> Before try block";
    try {
        echo "<br> Inside try block";

        // If var is zero then only if will be executed 
        if ($var == 0) {

            // If var is zero then only exception is thrown 
            throw new Exception('Number is zero.');

            // This line will never be executed 
            echo "<br> After throw (It will never be executed)";
        }
    }

    // Catch block will be executed only  
    // When Exception has been thrown by try block 
    catch (Exception $e) {
        echo "<br> Exception Caught: ", $e->getMessage();
        echo "<br> Exception Caught: ", $e->getFile();
        echo "<br> Exception Caught: ", $e->getCode();
        echo "<br> Exception Caught: ", $e->getLine();
        echo "<br> Exception Caught: ", $e->getTraceAsString();
    } 

    // This line will be executed whether 
    // Exception has been thrown or not  
    echo "<br> After catch (will be always executed)";
}

// Exception will not be rised 
demo(5);
echo '<br>';
echo '<br>';
// Exception will be rised here 
demo(0);
Before try block
Inside try block
After catch (will be always executed)


Before try block
Inside try block
Exception Caught: Number is zero.
Exception Caught: C:\wamp64\www\webdemo\index2.php
Exception Caught: 0
Exception Caught: 14
Exception Caught: #0 C:\wamp64\www\webdemo\index2.php(41): demo(0) #1 {main}
After catch (will be always executed)

Tạo lớp ngoại lệ tuỳ chỉnh

Để tạo một trình xử lý ngoại lệ tùy chỉnh, bạn phải tạo một lớp đặc biệt với các hàm có thể được gọi khi một ngoại lệ xảy ra trong PHP. Lớp này phải được kế thừa lớp Exception.

<?php 
class myException extends Exception { 
    function get_Message() { 
          
        // Error message 
        $errorMsg = 'Error on line '.$this->getLine(). 
                    ' in '.$this->getFile() 
        .$this->getMessage().' is number zero'; 
        return $errorMsg; 
    } 
} 
  
function demo($a) { 
    try { 
      
        // Check if 
        if($a == 0) { 
            throw new myException($a); 
        } 
    } 
      
    catch (myException $e) { 
      
        // Display custom message 
        echo $e->get_Message(); 
    } 
} 
  
// This will not generate any exception 
demo(5); 
  
// It will cause an exception 
demo(0); 
?>

Kết quả: Error on line 18 in C:\wamp64\www\webdemo\index2.php0 is number zero

Đầu tiên ta sẽ tạo một class có tên myException được kế thừa từ class Exception, như vậy, nó sẽ kế thừa tất cả các phương thức và thuộc tính từ lớp Exception.

Trong class trên sẽ tạo một hàm get_message để thông báo lỗi nếu một số truyền vào bằng 0.

Ra khỏi class, ta dựng một hàm demo() với nội dung bên trong thực hiện try catch để kiểm tra xem số truyền vào có bằng 0 không. Nếu số bằng 0, một ngoại lệ sẽ được ném và sau đó khối catch sẽ bắt được ngoại lệ về rồi hiển thị ra thông tin lỗi.

Xử lý nhiều ngoại lệ – Multiple Exceptions

Multiple Exceptions là cách sử dụng nhiều block try…catch để cố gắng bắt các ngoại lệ được ném ra.

Ở phương pháp này chúng ta có thể sử dụng các câu lệnh điều khiển như if…else, switch, hoặc các ngoại lệ lồng vào nhau.

Cú pháp tổng thể

try {
     // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
     // Code to handle the exception
} catch (\Exception $e) {
     // ...
}

Ví dụ:

<?php

class A_Error extends Exception {}
class B_Error extends Exception {}
class C_Error extends Exception {}

try {
    throw new A_Error();
} 
catch (A_Error $e) { goto abc; }
catch (B_Error $e) { goto abc; }
catch (C_Error $e) {
abc:
    var_dump(get_class($e));
    echo "Error one";
}

Xử lý nhiều ngoại lệ sẽ có ích khi bạn muốn hiển thị thông điệp hoặc thực hiện một hành động nào đó tuỳ thuộc vào mỗi ngoại lệ được ném ra.

Thiết lập xử lý ngoại lệ cao cấp – Set Top Level Exception Handler

Hàm set_exception_handler() sẽ đặt tất cả hàm do người dùng đã xác định thành tất cả ngoại lệ chưa được lưu.

<?php
function myException($exception) {
  echo "<b>Exception:</b> " . $exception->getMessage();
}
 
set_exception_handler('myException');
 
throw new Exception('Uncaught Exception occurred');
?>

Trong đoạn mã trên không có khối “catch”. Thay vào đó, trình xử lý ngoại lệ cấp cao nhất được kích hoạt. Hàm này nên được sử dụng để bắt các ngoại lệ chưa được catch.

Kết quả:

Exception: Uncaught Exception occurred

Ví dụ khác:

<?php 
// PHP Program to illustrate normal 
// try catch block code 
// Function for Uncaught Exception 
function myException($exception) { 
      
    // Details of Uncaught Exception 
    echo "<br> Exception: " . $exception->getMessage(); 
} 
  
// Set Uncaught Exception handler 
set_exception_handler('myException');

function demo($var) { 
    echo "<br> Before try block"; 
    try { 
        echo "<br> Inside try block"; 
              
        // If var is zero then only if will be executed 
        if($var == 0) 
        { 
                  
            // If var is zero then only exception is thrown 
            throw new Exception('Number is zero.'); 
                  
            // This line will never be executed 
            echo "<br> After throw (It will never be executed)"; 
        } 
    } 
          
    // Catch block will be executed only  
    // When Exception has been thrown by try block 
    catch(Exception $e) { 
            echo "<br> Exception Caught: ", $e->getMessage(); 
        } 
          
        // This line will be executed whether 
        // Exception has been thrown or not  
        echo "<br> After catch (will be always executed)"; 
        if($var < 0) {  
          
            // Uncaught Exception 
            throw new Exception('Uncaught Exception occurred'); 
        } 
} 

// Exception will not be rised 
demo(2); 
echo '<br>';
// Exception will be rised here 
demo(0); 
// Uncaught Exception 
demo (-3); 
?>
Before try block
Inside try block
After catch (will be always executed)

Before try block
Inside try block
Exception Caught: Number is zero.
After catch (will be always executed)
Before try block
Inside try block
After catch (will be always executed)
Exception: Uncaught Exception occurred

Tham khảo:

Kết thúc

Bài viết trên mình đã liệt kê một vài cách để xử lý ngoại lệ trong lập trình PHP. Mỗi bài viết về kiến thức học PHP của mình đều có thể chưa hoàn toàn đầy đủ, cho nên mong các bạn hãy tra google khi tham khảo và mong bạn có thể gửi lại comment bổ sung bên dưới để mình có thể hoàn thiện lại bài viết hơn. Cảm ơn các bạn!

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

Tổng hợp Internet

CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ

The post Bài 19: Xử lý ngoại lệ trong PHP – PHP Exceptions appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-19-xu-ly-ngoai-le-trong-php-php-exceptions/feed/ 0
Bài 17: Xử lý date time ngày tháng trong PHP https://tanhongit.com/bai-17-xu-ly-date-time-ngay-thang-trong-php/ https://tanhongit.com/bai-17-xu-ly-date-time-ngay-thang-trong-php/#respond Sun, 23 Feb 2020 10:35:31 +0000 https://tanhongit.com/?p=2049 Ở bài viết trước đã học qua về cách xử lý đối với file trong PHP, tiếp tục series học PHP căn bản, bài này chúng ta sẽ tìm hiểu về phương pháp xử lý ngày tháng (date) trong PHP nhé! Vấn đề xử lý ngày tháng cực kì quan trọng khi bạn xử lý […]

The post Bài 17: Xử lý date time ngày tháng trong PHP appeared first on Tân Hồng IT.

]]>
Ở bài viết trước đã học qua về cách xử lý đối với file trong PHP, tiếp tục series học PHP căn bản, bài này chúng ta sẽ tìm hiểu về phương pháp xử lý ngày tháng (date) trong PHP nhé!

Vấn đề xử lý ngày tháng cực kì quan trọng khi bạn xử lý với các bài viết và đăng lên website. Ví dụ bạn cần in ra ngày tháng đăng bài viết hiển thị theo kiểu ngày / tháng / năm hoặc ngày – tháng -năm thì bắt buộc bạn phải biết cách sử dụng các hàm xử lý ngày tháng trong PHP thì mới làm được.

date time xu ly thoi gina ngay thang php
Bài 17: Xử lý date time ngày tháng trong PHP

Không những thế nó còn có liên quan đặc biệt đến cấu trúc cơ sở dữ liệu database nữa nên tầm quan trọng của việc xử lý thời gian này là không hề nhỏ.

Thiết lập múi thời gian (timezone) tại Việt Nam

Để cấu hình và làm việc với thời gian datetime đúng theo giờ Việt Nam thì bắt buộc ban phải thiết lập time zone( múi giờ) cho nó.

Cú pháp để thiết lập time zone là: date_default_timezone_set(‘timezone_identifier’);

Trong đó timezone_identifier là time zone mà bạn muốn thiết lập.

Mình đang ở Châu Á và ở Việt Nam – Hồ Chí Minh nên sẽ có timezone là Asia/Ho_Chi_Minh, mỗi khu vực sẽ chênh lệch nhau thời gian nên các bạn phải chú ý khi website có liên quan đến nước ngoài.

date_default_timezone_set('Asia/Ho_Chi_Minh');

Về múi giờ các bạn có thể tham khảo thêm tại: http://php.net/manual/en/timezones.php

Hoặc các bạn có thể sử dụng đoạn code dưới đây để xuất ra màn hình danh sách tất cả các timezone:

<?php
$timezone = DateTimeZone::listIdentifiers() ;
foreach ($timezone as $value){
    echo $value. '<br/>';
}
?>

Hoặc ta cũng có thể sử dụng hàm timezone_abbreviations_list để xuất ra timezone theo code bên dưới.

<?php
foreach (timezone_abbreviations_list() as $timezone) {
    foreach ($timezone as $value) {
        if (isset($value['timezone_id'])) {
            echo $value['timezone_id'] . '<br>';
        }
    }
}
?>
Lưu ý: Hàm thiết lập timezine này các bạn nên đặt ở đầu trang để cách đoạn code bên dưới hoạt động được hiệu quả và trính vị lỗi nhé!

Định dạng ngày tháng với hàm date()

Hàm date dùng để chuyển đổi thời gian theo format mà lập trình viên chỉ định mong muốn.

Cú pháp: date(format, timestamp);

Trong đó:

  • format: định  dạng ngày tháng năm, giờ phút giây.
  • timestamp(không bắt buộc) mặc định là hàm time() (chính là thời gian hiện tại).

Danh sách các format định dạng của date()

  1. h: Trả về giờ trong ngày kiểu 12h.
  2. H: Trả về giờ trong ngày kiểu 24h.
  3. i: Trả về phút trong giờ.
  4. s: Trả về số giây trong phút.
  5. S: Trả về hậu tố tiếng Anh cho ngày trong tháng, 2 ký tự. (st, nd, rd, th)
  6. d: trả về ngày trong tháng(bằng số từ 1- đến31).
  7. t: Số ngày trong 1 tháng (28 -> 31)
  8. j: Trả về ngày trong tháng, nhưng nếu ngày<10 sẽ không hiển thị số 0.
  9. D: Trả về định dạng thứ trong tuần bằng tiếng anh viết tắt. (có 3 chữ cái)
  10. l: Trả về đầy đủ thứ trong tuần (tiếng anh).
  11. m: Trả về tháng trong năm (bằng số từ 1 đến 12).
  12. M: Trả về tháng trong năm nhưng bằng tiếng anh viết tắt.
  13. y: Trả về 2 số cuối cùng của năm.
  14. Y: trả về đầy đủ 4 số của năm.
  15. c: trả về thời gian kiểu ISO 8601, thường dùng tạo cho thẻ meta publish time trong SEO
  16. z: trả về số ngày trong năm (Ngày trong năm bắt đầu từ 0 -> 365)

Ngoài ra các bạn có thể xem chi tiết đầy đủ về các format khác tại đây

echo date("Y-m-d"),'<br>'; //kết quả trả ra có dạng như 2020-02-23
 
echo date("d-m-Y"),'<br>'; //kết quả trả ra có dạng như 23-02-2020
 
echo date("d-m-Y H:i:s"),'<br>'; //kết quả trả ra có dạng như 22-02-2020 12:25:31

Ngoài ra chúng ta có thể phân cách ngày tháng năm bằng các dấu chéo / hoặc dấu gạch nối - hoặc dấu hai chấm :

Truyền thêm chuỗi trong hàm date()

Để cho nội dung chuỗi mà các bạn muốn hiển thị được như ý muốn thì các bạn thêm dấu chéo ngược \ vào trước mỗi ký tự của chuỗi.

<?php
echo date('\B\â\y \g\i\ờ \l\à d-m-Y H:i:s');
?>

Phương pháp xử lý ngày tháng nâng cao trong PHP

Kiểu định dạng ngày tháng chuẩn trong MySQL

Để lưu đúng định dạng ngày tháng trong MySQL thì bạn sử dụng format bên dưới.

date('Y-m-d H:i:s');

Đây là định dạng chuẩn để bạn có thể sử dụng để đăng bài cũng như upload hay comment một content nào đó mà có lưu lên database.

Chuyển đồi kiểu định dạng ngày tháng

Ngoài cách đổi kiểu định dạng trực tiếp trong hàm date() thì ta có có một cách thay đổi kiểu định dạng xuất ra ngày tháng khác đó là hàm date_format()

<?php
$date = date_create("2020-02-23"); //tạo ngày có thể dùng hàm date_create
echo date_format($date,"d/Y/m");  //đổi định dạng
//output: 23/2020/02
?>

Cộng trừ ngày tháng với mktime()

Hàm mktime() sẽ tính toán đưa ra ngày chính xác bởi các tham số truyền vào.

mktime($hour, $minute, $second, $month, $day , $year);
Lưu ý: Hàm này sẽ trả về thời gian kiểu INT nên bạn phải sử dụng hàm date() để chuyển đổi ra định dạng mong muốn.
Ví dụ: ta sẽ cộng thêm 5 ngày và 6 giờ đối với ngày 23/02/2020
<?php
$date = mktime((0 + 6), 0, 0, 02, (23 + 5), 2020);
echo date('d/m/Y', $date); //output: 28/02/2020
?>

Ví dụ 2: ta sẽ cộng thêm 26 giờ đối với ngày 23/02/2020

<?php
$date = mktime((0 + 26), 0, 0, 02, 23, 2020);
echo date('d/m/Y', $date); //output: 24/02/2020 - ngày đã tự động tăng thêm 1 ngày
?>

Ví dụ 3: ta sẽ cộng thêm 15 ngày đối với ngày 23/02/2020

<?php
$date = mktime(0, 0, 0, 02, (23 + 15), 2020);
echo date('d/m/Y', $date); //output: 09/03/2020 - ngày và tháng đã tự động tăng phù hợp
?>

Các bạn để ý từ 2 ví dụ trên, nếu bạn công số giờ có kết quả quá 24, hoặc cộng số ngày có kết quả vượt qua số ngày trong tháng đó thì giờ hoặc ngày hoặc tháng sẽ tự động tăng thêm 1. Tương tự đối với năm cũng vậy. Chính vì thế khi thực hiện công trừ đối với thời gian bạn hãy kiểm tra cẩn thận để không bị sai lệch nhé!

<?php
//xuất ra ngày kế tiếp(ngày mai)
$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
echo date('d/m/Y', $tomorrow) . '<br>';

//Xuất ra ngày này tháng sau
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
echo date('d/m/Y', $lastmonth) . '<br>';

//xuất ra ngày này năm sau
$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);
echo date('d/m/Y', $nextyear) . '<br>';
?>

Thay đổi ngày tháng date_modify()

Hàm date_modify() giúp ta thay đổi ngày tháng hiện hành. Đây cũng là một phương pháp dùng để tính toán công trừ cho ngày tháng các bạn nhé!

<?php
$date=date_create("2020-02-23");
date_modify($date, "+11 days"); // thay đổi ngày bằng phép cộng
echo date_format($date,"d/Y/m");  //đổi định dạng
?>
Như vậy ta có thể sử dụng hàm date_modify() và hàm mktime() để tính ngày tháng đều được cả. Nhưng đối với mình lại thường hay dùng hàm mktime để tính hơn.

Lấy thông tin ngày giờ theo dạng mảng với getdate()

Hàm getdate() sẽ giúp ta chuyển đổi dữ liệu ngày tháng về dạng mảng trong PHP và ta có thể xuất ra màn hình theo phương pháp sau

<?php
var_dump(getdate());
/*kêt quả:
array (size=11)
  'seconds' => int 16
  'minutes' => int 3
  'hours' => int 4
  'mday' => int 23
  'wday' => int 0
  'mon' => int 2
  'year' => int 2020
  'yday' => int 53
  'weekday' => string 'Sunday' (length=6)
  'month' => string 'February' (length=8)
  0 => int 1582430596*/
?>
Khóa Giá trị ví dụ
“seconds” số giây 0 đến 59
“minutes” số phút 0 đến 59
“hours” số giờ 0 đến 23
“mday” Ngày trong tháng 1 đến 31
“wday” Ngày trong tuần 0 (Sunday) đến 6 (Saturday)
“mon” Tháng 1 đến 12
“year” Năm 1999
“yday” Ngày của năm 0 đến 365
“weekday” Ngày trong tuần(dạng chữ) Sunday đến Saturday
“month” Tháng(dạng chữ) January đến December
0 time() timestamp,-2147483648 đến 2147483647.

Một số hàm lấy thông tin date/time khác

Lấy ngày cuối cùng của tháng

//last day of month
function lastday($month = '', $year = '') {
   if (empty($month)) {
      $month = date('m');
   }
   if (empty($year)) {
      $year = date('Y');
   }
   $result = strtotime("{$year}-{$month}-01");
   $result = strtotime('-1 second', strtotime('+1 month', $result));
   return date('Y-m-d', $result);
}
echo lastday('6','2020');

Ở hàm trên bạn sẽ thấy trong code có tạo 2 biến $year$month. Đầu tiên sẽ kiểm tra nếu ko có 2 thông số truyền vào phù hợp thì hàm sẽ tự đông lấy năm và tháng thông qua thời gian của hiện tại. Sau đó ta sẽ gán biến $result bằng ngày đầu tiên của tháng trong năm hiện tại. Tiếp tục ta gán đè biến $result thêm 1 lần nữa như sau:

ở lệnh strtotime(‘-1 second’, strtotime(‘+1 month’, $result)); ta thấy hàm strtotime được lồng bên trong sẽ tính bằng cách lấy năm hiện tại, còn tháng hiện tại thì cộng thêm 1 với thời gian là 0h0m0s. Khi đó ta có thời gian là năm hiện tại, tháng tiếp theo của tháng hiện tại và ngày đầu tiên của tháng đó.

Tiếp theo đi ra lệnh strtotime bên ngoài thời gian sẽ bị trừ đi 1s, tức là khi này từ 0h của ngày đầu tiên của tháng tiếp theo đó sẽ bị trừ còn 23h59m59s của ngày trước đó. Tự khắc thời gian sẽ bị lùi về 1 ngày cũng như lùi về 1 tháng. Như vậy kết quả xuất ra màn hình sẽ là ngày cuối cùng của tháng hiện tại.

Lấy ngày đầu tiên của tháng chỉ định.

//first day of month
function firstDay($month = '', $year = '')
{
    if (empty($month)) {
      $month = date('m');
   }
   if (empty($year)) {
      $year = date('Y');
   }
   $result = strtotime("{$year}-{$month}-01");
   return date('Y-m-d', $result);
}
echo lastday('6','2020');

Ở hàm trên bạn sẽ thấy trong code có tạo 2 biến $year$month. Đầu tiên sẽ kiểm tra nếu ko có 2 thông số truyền vào phù hợp thì hàm sẽ tự đông lấy năm và tháng thông qua thời gian của hiện tại. Sau đó ta sẽ gán biến $result bằng ngày đầu tiên của tháng trong năm hiện tại. Rồi ta xuất ra trong định dạng của hàm date()

Các bạn hãy tham khảo về hàm strtotime() ở mục bên dưới để hiểu hơn nhé.

Hàm strtotime() xử lý ngày tháng trong PHP

Hàm này giúp tạo ra một kiểu định dạng thời gian theo kiểu INT từ một chuỗi.

Trường hợp này được sử dụng nhiều khi lấy dữ liệu từ MySQL với định dạng là datetime.

cú pháp: strtotime($time)

echo date('d/m/Y',strtotime('23-02-2020'));

Công dụng của hàm này chưa phải chỉ mỗi như vậy. Nó còn dùng để thực hiện một số hàm nâng cao khác, ví dụ như hàm lấy ngày cuối , ngày đầu trong tháng đã được giới thiệu ở phần trên.

Phép toán với hàm strtotime

Bắt đầu từ thời điểm nào đó trong quá khứ hoặc tương lai.
<?php
$date = strtotime('+1 day',strtotime('2020-02-23'));    //+ tính từ ngày nào đó.
echo date("d/m/Y", $date);
//output: 24/02/2020

$date2 = strtotime('-2 day',strtotime('2020-02-23'));    //- tính từ ngày nào đó.
echo date("d/m/Y", $date2);
//output: 21/02/2020
?>
Cộng 1 tháng tính từ thời điểm hiện tại.
<?php
echo date( "Y-m-d", strtotime( "2020-02-23 +1 month" ) );   
//output: 2020-03-23
?>
Cộng gộp 2 thời gian khác nhau

Áp dụng từ việc công trừ ngày hoặc tháng từ 2 ví dụ trên, ta có thể sử dụng phương pháp đó để cộng dồn 2 thời gian khác nhau lại với nhau theo hàm bên dưới.

<?php 
date_default_timezone_set('Asia/Ho_Chi_Minh');
function add2times($hour_one,$hour_two){
    
    $h =  strtotime($hour_one);
    $h2 = strtotime($hour_two);
 
    $minute = date("i", $h2); //gán phút của giờ thứ 2
    $second = date("s", $h2);//gán giây của giờ thứ 2
    $hour = date("H", $h2);//gán giờ của giờ thứ 2
 
    //lấy giấy, phút, giờ của giờ thứ 1 cộng cho giờ thứ 2 bằng phép cộng dồn với hàm strtotime()
    $convert = strtotime("+$minute minutes", $h); //biến $minute là phút của giờ thứ 2
    $convert = strtotime("+$second seconds", $convert); //biến $second là giây của giờ thứ 2
    $convert = strtotime("+$hour hours", $convert);//biến $hour là giờ của giờ thứ 2
    echo date('H:i:s', $convert);
}
add2times(date('H:m:s'),"8:10:56");
?>

Hàm strtotime này có thể sau này mình sẽ viết một bài riêng để nói chuyên về nó sau vì hàm này được dùng để tính toán và ứng dụng rất nhiều.

So sánh sự chệnh lệch giữa 2 ngày

trong trường hợp so sánh độ chênh lệch của 2 ngày ta dùng hàm diff().

$date1->diff($date2);

<?php
$t1=new DateTime('2020-02-23 17:0:0');
$t2=new DateTime('2020-02-24 18:1:50');
$ss=$t1->diff($t2);
var_dump($ss);    
/*object(DateInterval)[3]
  public 'y' => int 0
  public 'm' => int 0
  public 'd' => int 1
  public 'h' => int 1
  public 'i' => int 1
  public 's' => int 50
  public 'f' => float 0
  public 'weekday' => int 0
  public 'weekday_behavior' => int 0
  public 'first_last_day_of' => int 0
  public 'invert' => int 0
  public 'days' => int 1
  public 'special_type' => int 0
  public 'special_amount' => int 0
  public 'have_weekday_relative' => int 0
  public 'have_special_relative' => int 0*/
//từ kết quả var_dump trên ta thấy độ chênh lệch là 1 ngày 1h 1 phút và 50 giây
?>

Kiểm tra tính hợp lệ của ngày tháng.

Để kiểm tra tính hợp lệ về định dạng cho ngày tháng ta dùng hàm checkdate. Kết quả đúng sẽ trả về true, sai sẽ trả về false

Cú pháp: checkdate($mouth, $day, $year);

<?php
var_dump(checkdate(02, 30, 2020)); //output: false
var_dump(checkdate(2, 23, 2020)); //output: true
?>

Kết thúc

Qua bài viết trên mình đã liệu kê một số phương pháp, một số hàm cần thiết để xử lý thời gian date/time trong PHP.

Tuỳ vào mỗi trường hợp và tính đơn giản của bài toán mà ta sẽ phải áp dụng các hàm tính toán ngày thang dạng nâng cao nói trên theo cách phù hợp nhất. Vấn đề này các bạn cần làm nhiều bài tập thì sẽ tự  lựa chọn phù hợp được.

Mỗi bài viết về kiến thức học PHP của mình đều có thể chưa hoàn toàn đầy đủ, cho nên mong các bạn hãy tra google khi tham khảo và mong bạn có thể gửi lại comment bổ sung bên dưới để mình có thể hoàn thiện lại bài viết hơn. Cảm ơn các bạn!

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ

The post Bài 17: Xử lý date time ngày tháng trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-17-xu-ly-date-time-ngay-thang-trong-php/feed/ 0
Bài 15: Session trong PHP https://tanhongit.com/bai-15-session-trong-php/ https://tanhongit.com/bai-15-session-trong-php/#respond Tue, 18 Feb 2020 17:21:21 +0000 https://tanhongit.com/?p=1985 Ở bài 14 mình đã cho các bạn biết về khái niệm và cách thiết lập cookie trong PHP, tiếp tục series học PHP căn bản, sang bài này mình sẽ giới thiệu Session trong PHP là gì, hiểu nó và cách sử dụng nó như thế nào! Session là một biến được sử dụng […]

The post Bài 15: Session trong PHP appeared first on Tân Hồng IT.

]]>
bài 14 mình đã cho các bạn biết về khái niệm và cách thiết lập cookie trong PHP, tiếp tục series học PHP căn bản, sang bài này mình sẽ giới thiệu Session trong PHP là gì, hiểu nó và cách sử dụng nó như thế nào!

Session là một biến được sử dụng để lưu lại dữ liệu của người sử dụng website hoặc là lưu trữ tùy chọn cấu hình hệ thống cho người dùng. Không giống với cookie, biến session được lưu trên một tập tin trên máy chủ.

session trong php
Bài 15: Session trong PHP

Các ứng dụng thường dùng đối với Session

  • Session dùng theo dõi và kết nối giữa các phiên làm việc của người dùng
  • Session dùng để tạo các ứng dụng giỏ hàng, đăng nhập,…
  • Đếm sngười dùng đang online,…
  • Bạn muốn truyền giá trị từ trang này sang trang khác.
  • Thay thế cho cookie nếu trình duyệt đó không hỗ trợ cookies.

Quy cách mà Session hoạt động

Khi một session bắt đầu, những điều sau sẽ xảy ra:

  • Đầu tiên, PHP tạo một định danh duy nhất cho session cụ thể đó, định danh này là chuỗi kí tự ngẫu nhiên của 32 số hexa, như 3c7foj34c3jj973hjkop2fc937e3443.
  • Một cookie được gọi là PHPSESSID sẽ được gửi tự động đến máy tính người dùng để lưu trữ chuỗi định danh session duy nhất ở trên.
  • Một file được tạo tự động trên Server trong thư mục tạm thời đã được chỉ định và nó mang tên của định danh duy nhất và được bắt đầu bằng sess_. Ví dụ như: sess_3c7foj34c3jj973hjkop2fc937e3443.

Khi PHP script muốn lấy giá trị từ một biến session, PHP tự động lấy chuỗi định danh session duy nhất này từ PHPSESSID cookie, sau đó tìm file mang tên đó trong thư mục tạm thời của nó, một xác thực có thể được hoàn thành bằng việc so sánh các giá trị đó.

Một session kết thúc khi người dùng tắt trình duyệt hoặc sau khi rời khỏi site này, Server sẽ chấm dứt session sau một thời gian đã định trước, thường là 30 phút.

Đăng ký bắt đầu tạo một session

Trước khi bạn sử dụng session bạn phải khai báo cho PHP biết bằng cách đặt dòng lệnh session_start() phía trên đầu mỗi file. Nếu bạn dùng nhiều file include lẫn nhau thì đặt nó ở file chính.

Đầu tiên hàm này kiểm tra một session đã được bắt đầu hay chưa, nếu chưa thì nó sẽ bắt đầu một session. Luôn nhớ rằng lời gọi hàm session_start() này được đề nghị đặt ở đầu của mỗi file (trước các thẻ html).

Các biến session được lưu trữ trong mảng liên hợp là $_SESSION[”]. Các biến này có thể được truy cập trong suốt vòng đời của một phiên session.

<?php
// bắt đầu session (luôn đặt ở đầu file)
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// Tạo biến session
$_SESSION["user_id"] = "123456";
$_SESSION["username"] = "tanhongit";
echo "Các biến session đã được tạo.";
?>
</body>
</html>
<?php	//Start the session	
session_start();	
?>	
<!DOCTYPE html>	
<html>	
<body>	
<?php	
//Set session variables	
$_SESSION["favcolor"] = "green";	
?>

Lấy và đọc giá trị của Session trong PHP

Bạn hãy tạo 2 file có nội dung code bên dưới. Bạn hãy chạy làn lượt từng file trên trình duyệt và xem kết quả nhé!

Lưu ý rằng các biến session không được chuyển riêng lẻ đến từng trang mới, thay vào đó chúng được truy cập từ session mà chúng ta khai báo ở đầu mỗi trang (session_start()) và các giá trị biến session được lưu trữ trong biến toàn cầu $_SESSION:

<?php
// bắt đầu session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
 
<?php
// Tạo biến session
$_SESSION["user_id"] = "123456";
$_SESSION["username"] = "tanhongit";
echo "Các biến session đã được tạo.";
?>
</body>
</html>
<?php
// bắt đầu session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
    <?php
    // hiển thị các biến session được tạo ở file session_demo1.php
    echo "user_id là: " . $_SESSION["user_id"] . "<br>";
    echo "username là: " . $_SESSION["username"];
    ?>
</body>
</html>

kết quả bạn sẽ thấy sau khi chạy lần lượt 2 file là thông tin của session được lưu lại:

user_id là: 123456
username là: tanhongit

Ngoài ra để tránh gặp lỗi, các bạn hãy nhớ luôn sử dụng hàm isset() để kiểm tra xem nó có tồn tại hay không rồi hẵn láy nhé! Ví dụ về hàm isset() mình đã có làm nhiều trong các bài viết trước rồi, và mình cũng sẽ có viết riêng 1 bài nói về hàm isset() cho các bạn tham khảo nhé!

Để in tất cả các biến session, sử dụng hàm print_r():

print_r($_SESSION);

Chỉnh sửa, thay đổi giá trị của biến Session trong PHP

Để thay đổi giá trị của một session, ta chỉ cần thiết lập giá trị mới đè lên giá trị cũ của session đó.

<?php
// bắt đầu session
session_start();
?>
<!DOCTYPE html>
<html>
<body>
    <?php    
    $_SESSION["username"] = "tanhongitcom";
    print_r($_SESSION);
    ?>
</body>
</html>

Kết quả: Array ( [user_id] => 123456 [username] => tanhongitcom )

Qua ví dụ dưới đây sẽ cho các bạn thấy rõ hơn về sự thay đổi giá trị của Session.

Ví dụ: Xuất ra số lần truy cập vào trang web thông qua session

<?php
session_start();

if (isset($_SESSION['count'])) {
    $_SESSION['count'] += 1;
} else {
    $_SESSION['count'] = 1;
}
$mess = "Bạn đã truy cập trang này " .  $_SESSION['count'] . " lần trong session này.";
?>
<html>
<body>
    <?php echo ($mess); ?>
</body>
</html>

Sau khi bắt đầu 1 session, ta tạo 1 biến session có tên là count, tiếp tục với biểu thức điều kiện if sẽ kiểm tra số lần load vào trang này và xuất ra tổng số lần. Bạn thử load lại nhiều lần sẽ thấy giá trị của nó thay đổi lần lượt tăng thêm 1.

Các xoá, huỷ một session trong PHP

  • Xóa tất cả biến session đã tạo ta sử dựng hàm session_unset()
  • Xóa luôn toàn bộ session, ta sử dụng hàm session_destroy()
  • Hoặc sử dụng hàm unset() để xóa một biến.

Trong đó hàm unset() dùng để giải phóng một biến ra khỏi bộ nhớ.

// Xóa session username
unset($_SESSION['username']);
  
// Xóa hết session
session_destroy();

BÀI TẬP

  1. Xây dựng ứng dụng lưu phiên đăng nhập người dùng
  2. Xây dựng ứng dụng lưu thông tin giỏ hàng

Kết thúc

Vậy là qua bài viết trên mình đã giới thiệu cho các bạn về session, qua 2 bài vừa rồi nói về cookie, session là 2 khái niệm bạn sẽ phải đụng chạm rất nhiều vào các ứng dụng, các dự án sau này. Các bạn hãy áp dụng thật nhiều để nắm rõ cách sử dụng và hoạt động của nó nhé! Qua bài viết tiếp theo chúng ta sẽ qua một khái niệm mới về file và các hàm xử lý file trong PHP.

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ

The post Bài 15: Session trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-15-session-trong-php/feed/ 0
Bài 13: Phương thức GET và POST trong PHP https://tanhongit.com/bai-13-phuong-thuc-get-va-post-trong-php/ https://tanhongit.com/bai-13-phuong-thuc-get-va-post-trong-php/#respond Tue, 18 Feb 2020 11:45:18 +0000 https://tanhongit.com/?p=1978 Tiếp tục series học PHP căn bản, ở bài 13 này chúng ta sẽ học về 2 phương thức truyền tải dữ liệu thông dụng trong mô hình Client-Server đó là Get và Post. Các bạn có thể xem lại khái niệm của Client-Server.  Phương thức GET trong PHP Khi người dùng phía client sử […]

The post Bài 13: Phương thức GET và POST trong PHP appeared first on Tân Hồng IT.

]]>
Tiếp tục series học PHP căn bản, ở bài 13 này chúng ta sẽ học về 2 phương thức truyền tải dữ liệu thông dụng trong mô hình Client-Server đó là GetPost. Các bạn có thể xem lại khái niệm của Client-Server. 

get va post trong php
Phương thức GET và POST trong PHP

Phương thức GET trong PHP

Khi người dùng phía client sử dụng phương thức GET gửi dữ liệu lên server thông qua các tham số (parameter) trên thanh địa chỉ URL của Browser. Các tham số trên URL bắt đầu bằng dấu chấm hỏi ( ? ) và được ngăn cách với nhau bởi dấu và ( & ). Server sẽ phân tích tất cả những thông tin đằng sau dấu hỏi (?) chính là phần dữ liệu mà Client gửi lên.

Ví dụ: ta có URL https://tanhongit.net/?p=7740&preview=true

Khi truy cập, từ Server sẽ hiểu giá trị p = 7740 và giá trị preview = true.

Lưu ý 1: khi muốn truyền nhiều cặp giá trị lên Server chúng ta sẽ sử dụng dấu và ( & ), và vị trí các cặp giá trị không quan trọng. Nghĩa là từ ví dụ trên, giá trị preview nằm trước giá trị p cũng được.

Đó là ví dụ về phần Client truy cập từ thanh địa chỉ URL. Chúng ta bây giờ sẽ chuyên sang các vấn đề trong code PHP.

Trong code khi các dữ liệu mà Client gửi lên bằng phương thức GET đều được lưu trong một biến toàn cục mà PHP tự tạo ra đó là biến $_GET. ( $_GET là một biến toàn cục lưu trữ dưới dạng mảng bất tuần tự.)

<?php
$_GET = [
    'name' => 'TanHongIT',
    'website' => 'tanhongit.net'
];
?>  //biến $_GET là một mảng chứa nhiều phần tử

Lưu ý về phương thức GET trong PHP

  • Phương thức GET được giới hạn gửi tối đa chỉ 1024 ký tự.
  • Không bao giờ sử dụng phương thức GET nếu gửi password hoặc thông tin nhay cảm lên Server.
  • GET không thể gửi dữ liệu nhị phân, ví dụ như hình ảnh hoặc các loại tài liệu lên Server.
  • Dữ liệu gửi bởi phương thức GET có thể được truy cập bằng cách sử dụng biến môi trường QUERY_STRING.
  • PHP cung cấp mảng liên hợp $_GET để truy cập tất cả các thông tin đã được gửi bởi phương thức GET.

Ví dụ thực hành

Ví dụ 1: Bạn khởi tạo 1 file demo.php nằm trong thư mục WWW của WampServer hoặc tạo trong thư mục htdocs nếu bạn dùng Xampp, sau đó bạn dán đoạn code bên dưới vào.

<?php
$_GET = [
    'title' => 'TanHongIT',
    'website' => 'tanhongit.net'
];
?> 
<!DOCTYPE html>
<html lang="en">
<body>
    <form action="<?php $_PHP_SELF ?>" method="GET">
        <?php foreach ($_GET as $key => $value){  
            echo $key . ' - ' . $value . '<br>';
        } ?>
        <input type="submit">
    </form>
</body>
</html>

khi truy cập vào http://localhost/demo.php?title=tanhongit&website=tanhongit.net hoặc http://localhost//demo.php thì kết quả đều ra như sau:

title - TanHongIT
website - tanhongit.net

Ở ví dụ trên mình sử dụng phương thức GET ngay trong 1 file duy nhất, mình đã sử dụng vòng lặp Foreach để lấy toàn bộ key và value có trong biến $_GET là một mảng có nhiều phần tử.

GET còn có thể sử dụng để truyền dữ liệu từ file này sang file khác. hãy làm tiếp ví dụ 2.

Ví dụ 2: Tạo 2 file, 1 file có tên get_demo.php và một file demo.html

Đầu tiên, ở trong file demo.html ta sẽ tạo 1 form để lấy dữ liệu nhập vào từ bàn phím và gửi lên server.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div class="container">
        <form action="get_demo.php" method="GET"> <!--thêm thuộc tính action chuyển hướng đến file get_demo.php -->
            <div class="form-group">
                <label for="">Title</label>
                <input type="text" class="form-control" id="" placeholder="Nhập vào title..." name="title"> <!--tạo một trường có tên là title để truyền dữ liệu lên file get_demo.php-->
            </div>

            <div class="form-group">
                <label for="">Website</label>
                <input type="text" class="form-control" id="" placeholder="Nhập vào url website..." name="web"> <!--tạo một trường có tên là web để truyền dữ liệu lên file get_demo.php-->
            </div>

            <button type="submit" class="btn btn-primary">Submit</button>
        </form>
    </div>
</body>
</html>

Ở file demo.html mình có tạo 2 trường nhập liệu trong form có tên là title web để truyền dữ liệu nhập từ bàn phím vào file get_demo.php

Tiếp theo ta viết code để phía Server xuất ra màn hình sau khi nó đã nhận dữ liệu được nhập vào từ file demo.html thông qua file get_demo.php

<?php
echo 'Kết quả nhập liệu của bạn là: <br>';
echo 'Title: ' . $_GET['title'] . '<br>';
echo 'Website: ' . $_GET['web'];

Hãy test thử bằng cách chạy file demo.html lên theo đường link http://localhost/demo.html sau đó nhập vào các trường dữ liệu và nhấn vào button Submit. Lập tức Server sẽ tự động chuyển link sang file get_demo.php và xuất ra thông tin bạn đã nhập liệu.

demo get php url method get php

Lưu ý 2: Vì đây là phương thức GET nên khi truyền dữ liệu bạn sẽ có 2 cách truyền, 1 là truyền dữ liệu từ form sau đó gửi lên Server, 2 là ta có thể truyền tham số trực tiếp thông qua paramter trên địa chỉ URL

Ví dụ: http://localhost/get_demo.php?title=hello&web=chaomoinguoi.com

Kết quả nhận được sau khi Enter sẽ như hình dưới:

Lưu ý 3: Dùng phương thức GET thì dữ liệu luôn được gửi một cách tường minh, chúng ta có thể thấy mọi thông tin trên URL và có thể chỉnh sửa trực tiếp cho nên nó không bảo mật tốt.
Vì thế khi muốn tạo dữ liệu nào đó ta không nên sử dụng phương thức GET mà phải dùng POST vì GET luôn để lộ thông tin trên địa chỉ URL nên rất dễ bị hack đánh cắp dữ liệu.

Phương thức POST trong PHP

Phương thức POST sẽ trái ngược với phương thức GET về tính bảo mật cũng như tốc độ.

Về phương thức GET, chúng ta có thể xem thông tin trên thanh địa chỉ URL, dữ liệu được gửi đi bằng GET sẽ thông qua các paramter trên URL. POST thì ngược lại, nó không gửi dữ liệu đi bằng paramter trên URL mà thông qua HTTP header, vì vậy việc bảo mật phụ thuộc vào giao thức HTTP mà website đó đang sử dụng.

Parameters được truyền trong request body nên có thể truyền dữ liệu lớn, hạn chế tùy thuộc vào cấu hình của Server. Không cache và bookmark được cũng như không được lưu lại trong browser history. POST không có bất kì hạn chế nào về kích thước dữ liệu sẽ gửi, có thể gửi dữ liệu nhị phân, hình ảnh.

Nội dung dữ liệu được gửi đi bằng phương thức POST sẽ luôn bị ẩn đi và chúng ta không thể thấy được.

Phương thức Post trong mô hình Client-Server

Các bạn hãy tìm hiểu và làm ví dụ bên dưới để hiểu cách phương thức POST truyền dữ liệu lên Server như thế nào nhé!

Phía Client gửi lên

Với phương thức GET, dữ liệu sẽ được thấy trên URL, nhưng phương thức POST thì hoàn toàn ngược lại, POST sẽ phải gửi dữ liệu qua form HTML và các giá trị sẽ được định nghĩa trong các thẻ input gồm các kiểu (textbox, radio, checkbox, password, textarea, hidden) và được nhận dang thông qua tên (name) của các thẻ input đó.

Bạn hãy tạo file demo.html trong thư mục WWW của WampServer hoặc tạo trong thư mục htdocs nếu bạn dùng Xampp và chèn đoạn code bên dưới vào.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div class="container">
        <form action="post_demo.php" method="POST"> <!--thêm thuộc tính action chuyển hướng đến file post_demo.php và sử dụng phương thức method = post-->
            <div class="form-group">
                <label for="">Title</label>
                <input type="text" class="form-control" id="" placeholder="Nhập vào title..." name="title"> <!--tạo một trường có tên (name) là title để truyền dữ liệu lên file post_demo.php-->
            </div>
            <div class="form-group">
                <label for="">Website</label>
                <input type="text" class="form-control" id="" placeholder="Nhập vào url website..." name="web"> <!--tạo một trường có tên (name) là web để truyền dữ liệu lên file post_demo.php-->
            </div>
            <button type="submit" class="btn btn-primary">Submit</button>
        </form>
    </div>
</body>
</html>

Phần code trên mục đích dùng để nhập liệu từ phía Client để gửi lên Server. Giờ chúng ta sang phần Server.

Phía Server nhận dữ liệu và trả về

Tất cả các dữ liệu gửi bằng phương thức POST đều được lưu trong một biến toàn cục $_POST do PHP tự tạo ra, vì thế từ bây giờ bạn chỉ cần thao tác lấy hoặc gửi dữ liệu thông qua biến $_POST này là được.

Ở file demo.html mình có tạo 2 trường nhập liệu trong form có tên là title web để truyền dữ liệu nhập từ bàn phím vào file post_demo.php. Tiếp theo ta sẽ code trên file post_demo.php để lấy dữ liệu và xuất ra màn hình.

<?php
echo 'Kết quả nhập liệu của bạn là: <br>';
echo 'Title: ' . $_POST['title'] . '<br>';
echo 'Website: ' . $_POST['web'];

Hãy test thử bằng cách chạy file demo.html lên theo đường link http://localhost/demo.html sau đó nhập vào các trường dữ liệu và nhấn vào button Submit. Lập tức Server sẽ tự động chuyển link sang file post_demo.php và xuất ra thông tin bạn đã nhập liệu.

demo post php

Nhưng có một điều khác biệt ở đây bạn cần quan tâm đó là khi sử dụng GET, đường dẫn URL sẽ tiết lộ bất kỳ thông tin mà bạn đã nhập liệu, còn khi đã dùng POST thì bị ẩn.

Điều này chứng minh POST sẽ có tính bảo mật hơn GETPOST sẽ phù hợp với các chức năng về tạo dữ liệu, đăng ký, đăng nhập,…

Những lưu ý cần biết trong phương thức POST trong PHP

  • Phương thức POST không có bất kì hạn chế nào về kích thước dữ liệu sẽ gửi.
  • Phương thức POST có thể sử dụng để gửi ASCII cũng như dữ liệu nhị phân.
  • Dữ liệu gửi bởi phương thức POST thông qua HTTP header, vì vậy việc bảo mật phụ thuộc vào giao thức HTTP. Bằng việc sử dụng Secure HTTP, bạn có thể chắc chắn rằng thông tin của mình là an toàn.
  • PHP cung cấp mảng liên hợp $_POST để truy cập tất cả các thông tin được gửi bằng phương thức POST.

Kiểm tra isset với GET và POST trong PHP

Trước khi lấy một dữ liệu nào đó từ client bạn phải kiểm tra nó đã tồn tại không rồi mới lấy.Vì nếu không kiểm tra trước khi lấy, phía client chưa cung cấp đầy đủ dữ liệu mà server lại nhận thì sẽ có lỗi ngay. Vì thế ở những trường hợp mà ta không chắc chắn một biến luôn tồn tại hoặc một trường dữ liệu được nhập đầy đủ thì hãy kiểm tra nó trước khi gửi request.

Để kiểm tra ta sẽ dùng hàm isset(). Hàm isset() trong PHP có chức năng kiểm tra xem biến có tồn tại hay không. Nó sẽ trả về TRUE nếu biến đó có tồn tại và ngược lại FALSE nếu biến đó không tồn tại. Hàm isset() sẽ dùng cho cả 2 phương thức GET và POST.

Cú pháp: isset($bien);

Trong đó: $bien là biến mà bạn muốn kiểm tra sự tồn tại.

Từ ví dụ về phần POST trong PHP ở trên, nếu bạn trực tiếp truy cập vào http://localhost/post_demo.php mà chưa nhập đầy đủ thông tin ở http://localhost/demo.html thì sẽ xuất hiện lỗi ngay.

Vậy từ ví dụ trên ta chỉ cần thêm vào file file post_demo.php như sau:

<?php
echo 'Kết quả nhập liệu của bạn là: <br>';
if (isset($_POST['title']) && isset($_POST['web'])) {
    echo 'Title: ' . $_POST['title'] . '<br>';
    echo 'Website: ' . $_POST['web'];
}

Bây giờ bạn hãy thử truy cập lại http://localhost/post_demo.php , nếu chưa đươc nhập đủ dữ liệu ở http://localhost/demo.html thì nó sẽ không hiện gì cả, còn nhập đầy đủ các trường dữ liệu thì nó mới hiện lên cho ta xem.

Kết luận: Hàm isset() thật sự rất hữu ích đối với chúng ta trong việc ràng buộc dữ liệu nên các bạn hãy thường xuyên sử dụng để hiểu rõ và áp dụng dễ dàng hơn sau này nhé!

So sánh giống và khác nhau giữa GET và POST

GET và POST hầu như chẳng có gì giống nhau ngoài tác dụng là truyền tải dữ liệu lên Server.

Cho nên mình sẽ nói về những đặc điểm khác nhau của 2 phương thức này nhé!

  1. Giới hạn dữ liệu: GET giới hạn gửi tối đa chỉ 1024 ký tự. Còn POST không có bất kì hạn chế nào về kích thước dữ liệu sẽ gửi.
  2. Khả năng: Phương thức POST có thể sử dụng để gửi ASCII cũng như dữ liệu nhị phân, các loại tệp, hình ảnh còn GET thì không.
  3. Tốc độ: GET nhanh hơn rất nhiều so với POST về quá trình thực thi – vì dữ liệu gửi đi luôn được web browser lưu cached lại. Khi dùng phương thức POST thì server luôn thực thi và trả kết quả cho client, còn dùng GET thì web browser cached sẽ kiểm tra có kết quả tương ứng đó trong bộ nhớ cached chưa, nếu có thì trả về ngay mà không cần đưa tới server.
  4. Bảo mật: Phương thức POST bảo mật hơn GET vì dữ liệu được gửi ngầm, không xuất hiện trên URL, mắt thường không nhìn thấy được và dữ liệu cũng không được lưu lại. Trong khi đó với GET thì dữ liệu gửi đi được tường minh bạn có thể hiển thị lại được các dữ liệu này trên URL.

Link tham khảo: https://www.diffen.com/difference/GET-vs-POST-HTTP-Requests

Khi nào nên dùng GET và POST trong PHP

Cả 2 phương thức đều có những ưu và nhược điểm khác nhau, vậy khi nào chúng ta nên dùng GET và khi nào nên dùng POST.

Phương thức GET có tốc độ thực thi nhanh như độ bảo mật lại rất kém nên GET chỉ nên dùng cho các công việc lấy dữ liệu từ server về client, như vậy quá trình truy xuất sẽ nhanh hơn.

Đối với POST sẽ có độ bảo mật cao nên phù hợp với các công việc tạo dữ liệu, upload, truyền tải thông tin lên server, những công việc mang tính bảo mật cao.

Ví dụ:

  • Khi upload hình ảnh lên web thì ta sẽ dùng POST, còn khi muốn tải ảnh từ Web server về ta sẽ dùng GET.
  • Khi đăng ký, đăng nhập hoặc comment vào một website ta sẽ dùng POST, còn khi lấy tin bài viết từ web ra thì ta dùng GET.
  • Khi request sử dụng câu lệnh select thì dùng GET, khi request có sử dụng lệnh insert update, delete thì nên dùng POST.
  • Ngoài ra khi cần xử lý các thông tin nhạy cảm ví dụ như email, password thì bạn phải sử dụng POST.

Kết thúc

Qua bài viết trên mình đã nếu ra những nội dung liên quan đến 2 phương thức method truyền tải dữ liệu thông dụng trong PHP là GET và POST. Các bạn cần phải hiểu rõ những tính chất của mỗi phương thức này và khi nào nên dùng nó tùy vào từng trường hợp cụ thể.

Nhưng có một điều lưu ý rằng những nội dung, dữ liệu quan trọng hoặc cần truyền tải một loại thông tin gì đó lên server thì ta phải dùng POST để tăng tính bảo mật cho Website nhé!

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

via tanhongit.net

CHÚC CÁC BẠN THÀNH CÔNG

The post Bài 13: Phương thức GET và POST trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-13-phuong-thuc-get-va-post-trong-php/feed/ 0
Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP https://tanhongit.com/bai-12-chuoi-string-va-cac-ham-xu-ly-chuoi-trong-php/ https://tanhongit.com/bai-12-chuoi-string-va-cac-ham-xu-ly-chuoi-trong-php/#respond Tue, 18 Feb 2020 10:11:55 +0000 https://tanhongit.com/?p=1967 Tiếp tục series học PHP căn bản, bài này mình sẽ giới thiệu về chuỗi (String) trong PHP và tổng hợp một số hàm xử lý chuỗi nhé! Về chuỗi mình trước đây đã từng có nói sơ qua ở bài 3. các kiểu dữ liệu trong PHP rồi, nhưng ở bài này mình sẽ […]

The post Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP appeared first on Tân Hồng IT.

]]>
Tiếp tục series học PHP căn bản, bài này mình sẽ giới thiệu về chuỗi (String) trong PHP và tổng hợp một số hàm xử lý chuỗi nhé! Về chuỗi mình trước đây đã từng có nói sơ qua ở bài 3. các kiểu dữ liệu trong PHP rồi, nhưng ở bài này mình sẽ giới thiệu lại luôn nhé!

string ham xu ly chuoi trong php
Chuỗi (String) và các hàm xử lý chuỗi trong PHP

Chuỗi trong PHP là gì?

Kiểu chuỗi trong PHP nói đơn giản nó là 1 dãy các ký tự, nó bao gồm string(chuỗi) và kiểu char(ký tự). Để khai báo chuỗi cho 1 biến, các bạn chỉ cần gán 1 chuỗi vào biến đó.

Chuỗi phải được bao quanh bằng dấu nháy đơn  hoặc dấu nháy kép . Chuỗi sử dụng nháy đơn là một chuỗi tĩnh, còn chuỗi sử dụng nháy kép là một chuỗi động, thay đổi tùy theo giá trị của biến.

Không có giới hạn về độ dài của chuỗi, có thể dài tùy ý nếu bộ nhớ cho phép.

Ví dụ:

$string_1 = "Chào mừng đến với tanhongit.net";
$string_2 = "abc 123 hello";

Các chuỗi được giới hạn bởi các dấu nháy kép được PHP xử lý bằng 2 cách sau đây:

  • 1. Các chuỗi kí tự bắt đầu với (\) được thay thế với một kí tự đặc biệt
  • 2. Các biến (bắt đầu với $) được thay thế bằng biểu diễn chuỗi của giá trị của nó.

Các quy tắc thay thế:

  • \n được thay thế bằng ký tự newline (dòng mới)
  • \r được thay thế bởi ký tự carriage-return, được hiểu là đưa con trỏ về đầu dòng nhưng không xuống dòng.
  • \t được thay thế bởi ký tự tab
  • $ được thay thế bằng một dấu $
  • \” được thay thế bằng một dấu nháy kép “
  • \\ được thay thế bằng một dấu nháy đơn \

Các hàm xử lý chuỗi trong PHP

strlen($string)

Hàm này có tác dụng đếm xem chuỗi $string có bao nhiêu ký tự và xuất ra màn hình độ dài của chuỗi.

<?php
      $string = 'tanhongit.net';
      echo strlen($string);
      //kết quả : 13
?>

strpos($string, $keyword)

Hàm này có tác dụng kiểm tra xem đoạn ký tự $keyword có tồn tại trong chuỗi $string hay không và xuất ra màn hình vị trí bắt đầu tồn tại của $keyword đó trong chuỗi.

<?php
      $string = 'tanhongit.net';
      echo strpos($string,'it');
      //kết quả trả về vị trí bắt đầu của chuỗi cần tìm: 7
?>

explode($separator, $string, $limit)

Hàm này sẽ chuyển một chuỗi $string thành một mảng gồm các phần tử là các ký tự trong mảng. Điều kiện tách mảng sẽ là chuỗi ký tự $separator, và giới hạn phần tử sẽ là $limit.

<?php
      $string = 'tanhongit.net welcome';
      var_dump(explode('t',$string)); //nếu không thêm vào giới hạn tách phần tử $limit thì chuỗi sẽ được tách tối đa phần tử
      /*array (size=4)
      0 => string '' (length=0)
      1 => string 'anhongi' (length=7)
      2 => string '.ne' (length=3)
      3 => string ' welcome' (length=8) */

      var_dump(explode('t',$string,2)); //có thêm giới hạn tách chuỗi chỉ gồm 2 phần tử
      /*array (size=2)
      0 => string '' (length=0)
      1 => string 'anhongit.net welcome' (length=20) */
?>

implode($separator, $array)

Hàm này có tác dụng nối tất cả các phần tử của mảng $array thành chuỗi với mỗi phần tử cách nhau bằng chuỗi $separator.

<?php
      $array = array('tanhongit.net','welcome','123456');
      var_dump(implode('-', $array)); 
      //kết quả: 'tanhongit.net-welcome-123456'

      var_dump(implode(' ', $array)); 
      //kết quả : 'tanhongit.net welcome 123456'
?>

str_word_count($string)

Hàm này sẽ đếm tổng số lượng trả về số từ trong chuỗi $string.

<?php
      $string = 'tanhongit.net welcome';
      var_dump(str_word_count($string));
      /*Kết quả: 3 */
?>

substr($string,$start,$length)

Hàm này có tác dụng cắt ra một chuỗi con nằm trong chuỗi $string bắt đầu từ ký tự có vị trí thứ $start và chiều dài chuỗi con là $length

<?php
      $string = 'tanhongit.net welcome';
      echo substr($string,0,9) . '<br>'; // output: tanhongit
      echo substr($string,-4) . '<br>'; // output: come
      echo substr($string,-4,3) . '<br>'; // output: com
      echo substr($string,5) . '<br>'; // output: ngit.net welcome
?>

Nếu $startsố dương thì vị trí bắt đầu sẽ tính từ trái sang phải trong chuỗi. Ngược lại, nếu $startsố âm thì vị trí bắt đầu sẽ được tính từ phải sang trái của chuỗi.

strstr($string, $start_string)

Tác dụng của hàm này sẽ tách một chuỗi con từ chuỗi $string được tính bắt đầu từ $start_string cho đến hết chuỗi cha.

<?php
      $string = 'tanhongit.net welcome';
      echo strstr($string,'net') . '<br>'; // output: net welcome
      echo strstr($string,'n') . '<br>'; // output: nhongit.net welcome
      echo strstr($string,'.') . '<br>'; // output: .net welcome
?>

strtolower($string)

Hàm có tác dụng chuyển chuỗi $string sang dạng chữ thường.

<?php
      $string = 'TANHONGIT.NET';
      echo strtolower($string); //output: tanhongit.net
?>

strtoupper($string)

Hàm có tác dụng chuyển đổi chuỗi $string sang dạng in hoa.

<?php
      $string = 'tanhongit.net';
      echo strtoupper($string); //output: TANHONGIT.NET
?>

strip_tags($string, $allow)

Hàm này sẽ loại bỏ toàn bộ các thẻ html có trong chuỗi $string, trừ các thẻ được cho phép $allow.

<?php
      $string = '<p><b><i>tanhongit.net</i></b></p>';
      echo strip_tags($string); //output: tanhongit.net
      echo strip_tags($string, '<b>'); //output : <b>tanhongit.net</b>
      echo strip_tags($string, '<i>'); //output : <i>tanhongit.net</i>
?>

 

Sẽ còn cập nhật…

Kết thúc

Bài viết này mình đã liệt kê một số hàm thường được sử dụng để xử lý chuỗi trong PHP, Nếu các bạn muốn xem thêm hãy truy cập link này để tham khảo nhé!

Vậy là trong lộ trình học php căn bản thì tới đây mình đã liệt kê hết các kiến thức về chuỗi giúp các bạn học tập. Cho nên sang bài tiếp theo chúng ta sẽ qua một số phương thức bắt buộc phải biết trong PHP nhé!

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

via tanhongit.net

CHÚC CÁC BẠN THÀNH CÔNG

The post Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-12-chuoi-string-va-cac-ham-xu-ly-chuoi-trong-php/feed/ 0
Bài 11: Các hàm xử lý mảng (Array) trong PHP https://tanhongit.com/bai-11-cac-ham-xu-ly-mang-array-trong-php/ https://tanhongit.com/bai-11-cac-ham-xu-ly-mang-array-trong-php/#respond Tue, 18 Feb 2020 09:54:49 +0000 https://tanhongit.com/?p=1962 Khái niệm và những vấn đề liền quan về các loại mảng có trong PHP mình đã giới thiệu ở bài 10 : Mảng trong PHP. Tiếp tục series học PHP căn bản, bài này mình sẽ liệt kê các hàm dùng để xử lý mảng hay dùng trong PHP để các bạn tiện tra […]

The post Bài 11: Các hàm xử lý mảng (Array) trong PHP appeared first on Tân Hồng IT.

]]>
Khái niệm và những vấn đề liền quan về các loại mảng có trong PHP mình đã giới thiệu ở bài 10 : Mảng trong PHP. Tiếp tục series học PHP căn bản, bài này mình sẽ liệt kê các hàm dùng để xử lý mảng hay dùng trong PHP để các bạn tiện tra cứu cũng như học tập nhé!

cac ham xu ly mang php
Bài 11: Các hàm xử lý mảng PHP

is_array($array)

Hàm có tác dụng kiểm tra xem một biến có phải mảng hay không. Trả về true nếu là mảng và ngược lại sẽ trả về false.

<?php
   $bien1 = array("tanhongit.net", "php căn bản");
   $bien2 = '';
   var_dump(is_array($bien1)); // Kết quả trả về true 
   var_dump(is_array($bien2)); // Kết quả trả về false
?>

in_array($value,$array)

Hàm có tác dụng kiểm tra xem mảng $array có tồn tại giá trị $value hay không. Nếu có sẽ trả về true và ngược lại trả về false.

<?php
   $bien1 = array("tanhongit.net", "php căn bản");
   var_dump(in_array("tanhongit.net",$bien1)); // Kết quả trả về true 
   var_dump(in_array("hello",$bien1)); // Kết quả trả về false
?>

array_values($array)

Chuyển mảng $array sang dạng mảng chỉ mục.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_values($array));

    /* Kêt quả của mảng là array (size=2)
        0 => string 'tanhongit.net' (length=13)
        1 => string '123456' (length=6)
    ) */
?>

array_count_values($array)

Đếm số lần xuất hiện của các phần tử giống nhau trong mảng $array và trả về một mảng kết quả với các value là các giá trị đếm đó.

<?php
    $array = array('tanhongit.net', 'hello', '123456', 'hello');
    var_dump(array_count_values($array));
    /*array (size=3)
    'tanhongit.net' => int 1
    'hello' => int 2  //'hello xuất hiện 2 lần'
    123456 => int 1 */
?>

array_keys($array)

Hàm này có tác dụng trả về một dạng mảng chỉ mục mà trong mảng đó sẽ có phần tử là key của mảng ban đầu.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_keys($array));

    /* kết quả : array (size=2)
  0 => string 'username' (length=8)
  1 => string 'password' (length=8)
     */
?>

array_change_key_case($array, $case)

Tác dụng của hàm này là chuyển tất cả các chỉ mục key trong mảng $array sang chữ hoa nếu $case = 1 và sang chữ thường nếu $case = 0.

Ta có thể dùng hằng số CASE_UPPER thay cho số 1 và CASE_LOWER thay cho số 0.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    $array = array_change_key_case($array,1);
    var_dump($array);

    /* kết quả : array (size=2)
  'USERNAME' => string 'tanhongit.net' (length=13)
  'PASSWORD' => string '123456' (length=6)
     */
?>

array_key_exists($key,$array)

Kiểm tra xem khoá $keytồn tại trong mảng $array hay không. Nếu có sẽ trả về true và trả về false nếu không có.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_key_exists("username",$array)); //kết quả var_ dump sẽ trả về true
    var_dump(array_key_exists("hello",$array)); //kết quả var_ dump sẽ trả về false
?>

array_pop($array)

Tác dụng của hàm này sẽ cắt phần tử cuối cùng ra khỏi mảng.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_pop($array)); //phần tử cuối cùng sẽ bị cắt mất khỏi mảng
    //kết quả output: '123456' 

    var_dump($array);
    //kết quả màn hình:  array (size=1)
    //'username' => string 'tanhongit.net' (length=13)
?>

Ta có thể xuất ra phần tử đã bị cắt từ hàm array_pop($array) bằng cách gán giá trị của nó vào một biến và xuất biến đó ra. Nhuw sau:

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    $pop = array_pop($array); //gán giá trị đã bị cắt cuối mảng vào 1 biến
    var_dump($array); // xuất mảng
    echo $pop; // xuất giá trị đã bị cắt khỏi mảng bởi hàm array_pop
?>

array_push($array,$value1,$value2…)

Hàm này có tác dụng thêm một hoặc nhiều phần tử vào cuối mảng với các các giá trị $value1, $value2 được truyền vào.

Nếu ta var_dump hàm array_push này thì kết quả màn hình sẽ trả về tổng cộng số lượng phần tử có trong mảng sau khi thêm.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_push($array,"hello")); 
    //kết quả output: 3
    var_dump($array);
    /*kết quả: array (size=3)
    'username' => string 'tanhongit.net' (length=13)
    'password' => string '123456' (length=6)
    0 => string 'hello' (length=5) */
?>

array_shift($array)

Trái ngược với hàm array_pop, hàm array_shift sẽ cắt phần tử đầu tiên trong mảng $array ra khỏi mảng. Ta có thể xuất giá trị đã bị cắt khỏi mảng đó bằng cách gán giá trị của array_shift($array) vào 1 biến và xuất nó ra.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    $shift = array_shift($array); //gán giá trị của phần tử đầu tiên trong mảng đã bị cắt vào 1 biến
    var_dump($array);
    /*kết quả màn hình:  array (size=1)
    'password' => string '123456' (length=6)*/
    echo $shift; //giá trị của phần tử đầu tiên trong mảng đã bị cắt đi

array_unshift($array,$value1,$value2…)

Trái ngược với array_push, hàm array_unshift sẽ thêm một hoặc nhiều phần tử vào đầu mảng với các các giá trị $value1, $value2 được truyền vào.

Nếu ta var_dump hàm array_push này thì kết quả màn hình sẽ trả về tổng cộng số lượng phần tử có trong mảng sau khi thêm.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_unshift($array,"hello")); 
    //kết quả output: 3
    var_dump($array);
    /*kết quả: array (size=3)
  0 => string 'hello' (length=5)
  'username' => string 'tanhongit.net' (length=13)
  'password' => string '123456' (length=6) */
?>

array_combine($array_keys, $array_values)

Tác dụng của hàm là trộn 2 mảng $array_keys$array_values thành một mảng kết hợp. Trong đó, $array_keys là danh sách keys, $array_value là danh sách value tương ứng với key. Với điều kiện là 2 mảng này phải bằng nhau.

<?php
    $array_keys = array('username','password');
    $array_values = array('tanhongit.net','123456');
    
    var_dump(array_combine($array_keys,$array_values)); 
    /*output: array (size=2)
    'username' => string 'tanhongit.net' (length=13)
    'password' => string '123456' (length=6) */
?>

array_merge($array,$array…)

Cao cấp hơn hàm array_combine (chỉ có tác dụng gộp 2 mảng thành 1), hàm array_merge này có tác dụng gộp 2 hoặc nhiều mảng hơn nữa thành 1 mảng duy nhất

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456',
    );
    $array1 = array(1, 2, 3);
    $array2 = array(
      1 => 'hello',
      'name' => 'Hồng'
    );
    var_dump(array_merge($array,$array1,$array2)); 
    /*kết quả: array (size=7)
    'username' => string 'tanhongit.net' (length=13)
    'password' => string '123456' (length=6)
    0 => int 1
    1 => int 2
    2 => int 3
    3 => string 'hello' (length=5)
    'name' => string 'Hồng' (length=4) */
?>

array_rand($array, $number)

Hàm có tác dụng lấy ra key ngẫu nhiên trong mảng với $number là số lượng muốn lấy. Mình sẽ lấy ví dụ tiếp tục từ phần array_merge trên:

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456',
    );
    $array1 = array(1, 2, 3);
    $array2 = array(
      1 => 'hello',
      'name' => 'Hồng'
    );
    echo array_rand(array_merge($array,$array1,$array2));  //lấy 1 phần tử ngẫu nhiên trong mảng kết hợp
    //kêt quả lệnh echo: password

    var_dump(array_rand(array_merge($array,$array1,$array2), 3)); //lấy 3 phần tử ngẫu nhiên trong mảng kết hợp
    /*kết quả: array (size=3)
    0 => string 'password' (length=8)
    1 => int 2
    2 => int 3 */
?>

array_unique($array)

Hàm giúp loại bỏ giá trị trùng nếu có trong mảng $array.

<?php
    $array = array('tanhongit.net', 'hello', '123456', 'hello');
    var_dump(array_unique($array));
    /*array (size=3)
    0 => string 'tanhongit.net' (length=13)
    1 => string 'hello' (length=5)
    2 => string '123456' (length=6) */
?>

array_flip($array)

Hàm này có tác dụng chuyển đổi key của mảng thành value và ngược lại.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456'
    );
    var_dump(array_flip($array)); 
    /*kết quả: array (size=2)
  'tanhongit.net' => string 'username' (length=8)
  123456 => string 'password' (length=8) */
?>

array_reverse($array)

Hàm có tác dụng đảo ngược lại vị trí sắp xếp của tất cả phần tử có trong mảng.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456',
    );
    var_dump(array_reverse($array)); 
    /*kết quả: array (size=2)
  'password' => string '123456' (length=6)
  'username' => string 'tanhongit.net' (length=13) */
?>

array_search($keyword, $array)

Hàm có tác dụng tìm kiếm giá trị của mảng và trả về key của phần tử đó nếu có. Trong đó $keyword là giá trị truyền vào, $array là mảng cần tìm.

<?php
    $array = array(
    'username' => 'tanhongit.net',
    'password' => '123456',
    );
    var_dump(array_search('tanhongit.net',$array)); 
    /*kết quả: string 'username' (length=8) */
?>

array_slice($array,$begin,$number)

Hàm có tác dụng lấy ra số lượng các phần tử được truyền vào thông qua $number và bắt đầu lấy ra từ $begin trong mảng.

<?php
      $array = array(
      'username' => 'tanhongit.net',
      'password' => '123456',
      );
      var_dump(array_slice($array, 0)); //lấy ra các phần tử bắt đầu từ chỉ mục $key = 0
      /*kết quả: array (size=2)
      'username' => string 'tanhongit.net' (length=13)
      'password' => string '123456' (length=6) */
      var_dump(array_slice($array, 0 , 1)); //lấy ra 1 phần tử bắt đầu từ chỉ mục $key = 0
      /*Kết quả: array (size=1)
      'username' => string 'tanhongit.net' (length=13) */
      var_dump(array_slice($array, 1 , 1)); //lấy ra 1 phần tử bắt đầu từ chỉ mục $key = 1
      /*Kết quả: array (size=1)
      'password' => string '123456' (length=6) */ 
?>

Sẽ còn cập nhật…

Kết thúc

Bài viết này mình đã liệt kê một số hàm thường được sử dụng để xử lý mảng trong PHP, Nếu các bạn muốn xem thêm hãy truy cập link này để tham khảo nhé!

Vậy là trong lộ trình học php căn bản thì tới đây mình đã liệt kê hết các kiến thức về mảng giúp các bạn học tập. Cho nên sang bài tiếp theo chúng ta sẽ qua chuỗi trong PHP và các vấn đề xoay quanh chuỗi nhé!

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

via tanhongit.net

CHÚC CÁC BẠN THÀNH CÔNG

The post Bài 11: Các hàm xử lý mảng (Array) trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-11-cac-ham-xu-ly-mang-array-trong-php/feed/ 0
Bài 10: Mảng (Array) Trong PHP https://tanhongit.com/bai-10-mang-array-trong-php/ https://tanhongit.com/bai-10-mang-array-trong-php/#respond Tue, 18 Feb 2020 06:39:18 +0000 https://tanhongit.com/?p=1952 Đây là bài viết thứ 10 trong series học PHP căn bản, trong bài này mình sẽ chỉ giới thiệu về mảng (Array) trong PHP và các kiến thức liên quan đến mảng mà các bạn cần nắm vững. Trước đây mình đã từng giới thiệu và nói qua về mảng ở bài 3: các […]

The post Bài 10: Mảng (Array) Trong PHP appeared first on Tân Hồng IT.

]]>
Đây là bài viết thứ 10 trong series học PHP căn bản, trong bài này mình sẽ chỉ giới thiệu về mảng (Array) trong PHP và các kiến thức liên quan đến mảng mà các bạn cần nắm vững.

Trước đây mình đã từng giới thiệu và nói qua về mảng ở bài 3: các kiểu dữ liệu trong PHP. Nhưng qua bài này mình sẽ trình bày lại tất cả nhé!

mang array trong php
Mảng (Array) Trong PHP

Cũng như bao ngôn ngữ lập trình khác. PHP cũng tồn tại một loại dữ liệu được gọi là mảng. Mảng Array là một loại biến đặc biệt, trong nó giữ nhiều giá trị. Mỗi giá trị trong mảng được gọi là phần tử của mảng.

Một mảng là một cấu trúc dữ liệu mà lưu giữ danh sách các phần tử có cùng kiểu dữ liệu và nó là một trong các kiểu dữ liệu trong php có độ phức tạp tính toán cao. Riêng với PHP thì các phần tử của mảng có thể không cùng kiểu dữ liệu, và các phần tử của mảng thường được truy xuất thông qua các chỉ mục(vị trí) của nó nằm trong mảng.

Cú pháp tạo một mảng

Để tạo mảng chúng ta sử dụng hàm array() trong PHP (Từ PHP 5.4 trở lên bạn chỉ cần viết giá trị trong cặp dấu [ ] cũng được)

Note: Các bạn dùng hàm var_dump($mang); để in ra các phần tử của mạng để test trong quá trình học nhé. Hàm này có thể sử dụng được tất cả các kiểu dữ liệu trong php. (Hàm var_dump chỉ dùng để test).

//cách tạo mảng 1
<?php
    $names=array("Tan","Binh","Minh");
    var_dump($names);
?>
//cách tạo mảng 2
<?php 
$names=array(
0 => 'Tan',
1 => 'Binh',
2 => 'Minh'
); 
var_dump($names); 
?>
//cách tạo mảng 3 
<?php 
$names=array(); 
$names[0] = 'Tan';
$names[1] = 'Binh';
$names[2] = 'Minh';
var_dump($names);
?>
//cách tạo mảng 4 
<?php 
$names=array(); 
$names[] = 'Tan'; 
$names[] = 'Binh'; 
$names[] = 'Minh'; 
var_dump($names); 
?>

Có 3 loại mảng trong PHP

  1.  Mảng indexed – Mảng được lập chỉ mục
  2. Mảng associative – Mảng liên hợp
  3. Mảng Multidimensional – Mảng chứa một hoặc nhiều mảng

Chúng ta sẽ cùng tìm hiểu theo thứ tự từng loại mảng trên.

Loại 1. Indexed Arrays – Mảng được lập chỉ mục

Các mảng này có thể lưu trữ số, chuỗi và bất kỳ đối tượng nào nhưng chỉ mục của chúng sẽ được biểu diễn bằng dạng số. Một biến mảng dạng này chỉ số sẽ gán một cách tự động, theo chỉ mục mảng mặc định bắt đầu từ số không khi phần tử đầu tiên được thêm vào, cứ thế phần tử thứ 2 thêm vào mảng sẽ có chỉ số là 1.

Ví dụ minh họa cách tạo và truy cập mảng số được lập chỉ mục trong PHP.

<?php
    /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */
    $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong");
    
    foreach( $names as $value ) // sử dụng vòng lặp foreacch để duyệt phần tử trong mảng
    {
    echo "Tên: $value <br />";
    }
    var_dump($names); //xuất mảng
    
    /*Ví dụ 2: xuất lần lượt các giá trị có trong mảng */
    $numbers[0] = "one";
    $numbers[1] = 2;
    $numbers[2] = "three";
    $numbers[3] = 4;
    $numbers[4] = "five";
    
    var_export($numbers);
?>

sau khi chạy lên, kết quả của lệnh var_dump($names); trên màn hình như sau:

array (size=5)
  0 => string 'Nam' (length=3)
  1 => string 'Mai' (length=3)
  2 => string 'Trúc' (length=5)
  3 => string 'Linh' (length=4)
  4 => string 'Phong' (length=5)

Như vậy phần tử có chỉ số 0 thì giá trị là 'Nam', chỉ số 1 giá trị là ‘Mai’ … chỉ số này dùng với ký hiệu Array_Name[indexed] để truy xuất ( đọc hoặc gán) phần tử mảng:

Ví dụ về truy xuất Array_Name[indexed]

Từ ví dụ bên trên ta sẽ truy xuất 1 phần tử trong mảng ra như sau:

<?php
    /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */
    $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong");
    
    foreach( $names as $value ) // sử dụng vòng lặp foreacch để duyệt phần tử trong mảng
    {
    echo "Tên: $value <br />";
    }
    var_dump($names);

    //truy xuất phần tử có chỉ mục là số 1 có trong mảng $names
    echo $names[1];

    //kết quả xuất ra màn hình sẽ là 'Mai'
?>

Thêm phần tử mới vào mảng

Bạn có thể thêm phần tử mới vào trong mảng bằng cách viết bên dưới:

$arrayName[indexed] = $giatri; 

// biến $giatri có thể là một biến có sẵn hoặc cũng có thể là một giá trị mới mà bạn muốn gán vào.
//phần tử mới nhất được thêm vào sẽ luôn nằm cuối mảng, dù cho giá trị index có là bao nhiêu đi chăng nữa

Ví dụ 1:

<?php
    /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */
    $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong");

    //thêm 2 phần tử mới vào mảng $names
    $names[7]=0;
    $names[6]=9;

    var_dump($names);
?>

Kết quả thấy được sẽ là:

array (size=7)
  0 => string 'Nam' (length=3)
  1 => string 'Mai' (length=3)
  2 => string 'Trúc' (length=5)
  3 => string 'Linh' (length=4)
  4 => string 'Phong' (length=5)
  7 => int 0
  6 => int 9

Bạn thấy mặc dù chỉ số 6 bé hơn chỉ số 7 nhưng khi biểu diễn trong mảng nó lại nằm dưới chỉ số 7, Bởi vì khi thêm phần tử mình đã cố ý thêm phần tử có chỉ số 7 trước cho nên nó sẽ được thêm vào mảng trước phần tử có chỉ số là 6.

Điều này sẽ tuân thủ quy tắc: phần tử mới nhất được thêm vào sẽ luôn nằm cuối mảng, dù cho giá trị index có là bao nhiêu đi chăng nữa


Có một cách thêm thứ 2 mà bạn cần biết đó là phương pháp thêm sau:

$arrayName[] = $giatri;

// biến $giatri có thể là một biến có sẵn hoặc cũng có thể là một giá trị mới mà bạn muốn gán vào.
// Phần tử này khi được thêm vào sẽ nằm phía sau phần tử cuối cùng của mảng. Khi đó chỉ số phần tử này sẽ bằng chỉ số lớn nhất của mảng cộng thêm 1
// nếu đây là phần tử đầu tiên của mảng thì chỉ số sẽ là 0

Ví dụ 2:

<?php
    /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */
    $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong");

    //thêm 2 phần tử mới vào mảng $names
    $names[7]=0;
    $names[6]=9;

    //thêm phần tử mới vào mảng $names theo cách 2
    $names[] = 100;
    $names[] = "hé nô";

    var_dump($names);
?>

Kết quả trên màn hình sẽ là:

array (size=9)
  0 => string 'Nam' (length=3)
  1 => string 'Mai' (length=3)
  2 => string 'Trúc' (length=5)
  3 => string 'Linh' (length=4)
  4 => string 'Phong' (length=5)
  7 => int 0
  6 => int 9
  8 => int 100
  9 => string 'hé nô' (length=7)

2 cách thêm phần tử vào mảng trên cách nào cũng đúng cả, tuỳ vào cách sử dụng của mỗi người và tuỳ vào trường hợp của bài toán mà ta sẽ phải lựa chọn cho phù hợp.

Từ 2 ví dụ trên, ta thấy chỉ số index không phải là thứ tự sắp xếp các phần tử trong mảng. Và chỉ số index không phải và không liên quan đến số lượng phần tử có trong mảng Mục đích của nó chỉ là lập chỉ mục cho các phần tử có trong mảng mà thôi.

Loại 2. Associative Arrays– Mảng liên hợp

Các mảng liên hợp là khá giống với các mảng Indexed về tính năng, nhưng chúng khác nhau về chỉ mục. Chỉ mục của Associative Arrays sẽ ở dạng chuỗi(string) nhằm giúp bạn có thể thiết lập một liên kết mạnh giữa keyvalue.

<?php
    $numbers  =  [
        'one' => "số 1",
        'two' => "số 2",
        'three' => "số 3",
        'four' => "số 4"
    ];
    //dùng vòng lặp foreach để duyệt mảng
    foreach ($numbers as $key => $value) {
        echo "$key ($value)", PHP_EOL; // PHP_EOL tương tự như dấu cách (space)
    }

    // Kết quả màn hình: one (số 1) two (số 2) three (số 3) four (số 4)

    var_dump($numbers);
?>

Kết quả của var_dump($numbers); trên màn hình:

array (size=4)
  'one' => string 'số 1' (length=6)
  'two' => string 'số 2' (length=6)
  'three' => string 'số 3' (length=6)
  'four' => string 'số 4' (length=6)

Như vậy, từ ví dụ trên ta thấy chỉ mục của các phần tử bây giờ không còn là các số nguyên nữa mà là các chuỗi ký tự.

Trong vòng lặp foreach, khi xuất ra các $key (các chỉ mục) thì sẽ có giá trị tương ứng là các $value.

Và để lấy giá trị của phần tử bất kỳ trong mảng ta cũng không thể sử dụng theo cách echo $numbers[0] giống mảng indexed nữa, ta phải gọi đúng chỉ mục là các chuỗi ký tự giống như sau: echo $numbers[‘one’]. Như vậy mới có kết quả ra màn hình là ‘số 1’.

Mảng liên hợp này rất hữu ích khi bạn lấy dữ liệu từ cơ sở dữ liệu.

Loại 3. Multidimensional Arrays– Mảng đa chiều

Mảng đa chiều là mảng trong nó chứa một hay nhiều mảng khác. Tức là trong 1 mảng, mỗi phần tử của nó có thể sẽ là một mảng (các mảng con), và có thể mỗi phần tử của mảng con cũng sẽ là một mảng (các mảng cháu),..v.v..

Ví dụ: mảng 2 chiều xuất ra thông tin điểm môn học của các học sinh.

<?php
    $diem = [
        'Nguyễn Văn A' => [
            'Toán' => 8,
            'Lý' => 7,
            'Hóa'  => 9
        ],
        'Nguyên Văn B' => [
            'Toán' => 6,
            'Lý' => 5,
            'Hóa'  => 7
        ],
        'Nguyễn C' => [
            'Toán' => 4,
            'Lý' => 9,
            'Hóa'  => 7
        ],
    ];
    foreach ($diem as $ten => $diem_hoc_tap) {
        echo $ten . "<br>";
        foreach ($diem_hoc_tap as $tem_mon => $diem_cua_mon) {
            echo "__$tem_mon" . " - " . $diem_cua_mon . "<br>";
        }
        echo "<br>";
    }
?>

Kết quả:

Nguyễn Văn A
__Toán - 8
__Lý - 7
__Hóa - 9
Nguyên Văn B
__Toán - 6
__Lý - 5
__Hóa - 7

Nguyễn C
__Toán - 4
__Lý - 9
__Hóa - 7

Các xuất phần tử trong mảng đa chiều  bạn cần phải truyền đủ các chỉ mục thuộc các cấp có trong mảng.

Ở ví dụ trên là mảng 2 chiều, như vậy ta sẽ truyền cả 2 chỉ mục mới có thể xuất ra màn hình, nếu không sẽ báo lỗi.

echo $diem['Nguyễn Văn A']['Toán']; // kết quả : 8
Ưu điểm của mảng đa chiều là chúng cho phép chúng ta nhóm các dữ liệu liên quan lại với nhau. 

Vì sao nên sử dụng mảng để chứa dữ liệu

Chúng ta nên sử dụng mảng để chứa dữ liệu vì 3 lý do sau đây

  • Nội dung của Mảng có thể được kéo dài mà vẫn tiết kiệm bộ nhớ
  • Mảng giúp dễ dàng lưu trữ và thao tác với các thông tin có liên quan đến nhau
  • Sử dụng mảng giúp viết code sạch hơn.

So sánh 2 mảng bằng nhau với toán tử “=”

So sánh hai mảng nếu chúng bằng nhau thì trả về true. Dối với cách so sánh này ta có thể so sánh giữa chuỗi và số, miễn giống nhau kết quả vẫn là true.

Ví dụ:

<?php
  $x = array("id" => 1);
  $y = array("id" => "1");
  if($x == $y)
  {
    echo "true";
  }
  else
  {
    echo "false";
  }
//output: true 
?>

Vì thế phương pháp so sánh này không mang tính tuyệt đối.

So sánh 2 mảng bằng nhau với “===”

Toán tử “===” sẽ đem tất cả giá trị (value)kiểu dữ liệu của key trong từng mảng ra để so sánh. Vì thế đây là phương pháp so sánh mang tính tuyệt đối.

<?php
  $x = array("id" => 1);
  $y = array("id" => "1");
  if($x === $y)
  {
    echo "true";
  }
  else
  {
    echo "false";
  }
//output: false
?>
<?php
  $x = array("id" => 1);
  $y = array("id" => 1);
  if($x === $y)
  {
    echo "true";
  }
  else
  {
    echo "false";
  }
//output: true
?>

 

Kết thúc

Vậy là qua bài trên mình đã giới thiệu cho các bạn về mảng cũng như nói rõ các loại mảng có trong PHP mà bạn cần nắm. Mảng là khái niệm mà bạn nên nắm vững để sau này đi vào phần lập trình PHP hướng đối tượng các bạn sẽ phải dùng rất nhiều.

Hàm, mảng và vòng lặp là 3 khái niệm bạn cần vững vàng để sau này áp dụng vào lập trình PHP có lết hợp với cấu trúc dữ liệu MySql cũng như lập trình hướng đối tượng. Nếu có thắc mắc hay có chỗ nào sai sót mong các bạn để lại comment bên dưới bài viết chúng mình cũng thảo luận nhé!

Ở bài viết tiếp theo của series học PHP căn bản mình sẽ nói về các hàm xử lý cho mảng để các bạn có thể áp dụng sau này. Hãy tiếp tục với series học PHP căn nản nha ❤

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

CHÚC CÁC BẠN THÀNH CÔNG

The post Bài 10: Mảng (Array) Trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-10-mang-array-trong-php/feed/ 0
Bài 9: Hàm (Function) Trong PHP https://tanhongit.com/bai-9-ham-function-trong-php/ https://tanhongit.com/bai-9-ham-function-trong-php/#respond Tue, 18 Feb 2020 05:25:08 +0000 https://tanhongit.com/?p=1947 Tiếp tục series học PHP căn bản thì trong bài học này mình sẽ giới thiệu cho các bạn về hàm (function) trong PHP là gì, cấu trúc của một hàm và cách sử dụng nó như thế nào nhé! Hàm là gì? Hàm (Hay còn gọi là function) là một hoặc nhiều đoạn code […]

The post Bài 9: Hàm (Function) Trong PHP appeared first on Tân Hồng IT.

]]>
Tiếp tục series học PHP căn bản thì trong bài học này mình sẽ giới thiệu cho các bạn về hàm (function) trong PHP là gì, cấu trúc của một hàm và cách sử dụng nó như thế nào nhé!

function ham trong php
Bài 9 Hàm (Function) Trong PHP

Hàm là gì?

Hàm (Hay còn gọi là function) là một hoặc nhiều đoạn code được viết ra để thực thi một hoặc nhiều hành động mỗi khi gọi nó, hàm có khả năng gọi đi gọi lại để sử dụng nhiều lần trong chương trình.

Để giảm thời gian lặp lại 1 thao tác code nhiều lần, PHP đã hỗ trợ người lập trình việc tự định nghĩa cho mình những hàm có khả năng lặp lại nhiều lần trong website. Việc này cũng giúp cho người lập trình kiểm soát mã nguồn một cách mạch lạc. Đồng thời có thể tùy biến ở mọi trang mà không cần phải khởi tạo hay viết lại mã lệnh như HTML thuần.

PHP hiện nay có hơn 700 Function được xây dựng sẵn để thực hiện các nhiệm vụ khác nhau.

Vì sao nên sử dụng hàm

Hàm giúp tổ code tốt hơn: Hàm giúp nhóm các block code thực hiện chức năng liên quan đến nhiệm vụ cụ thể lại.

Tái sử dụng Code – Một khi đã được sử dụng, Hàm có thể sử dụng mà không cần định nghĩa lại. Việc này giúp tiết kiệm thời gian lập trình, giảm trùng lặp code, giảm kích thước chương trình.

Dễ dàng bảo trì (Easy Maintenance) – Hàm giúp chúng ta có sửa 1 chỗ và cập nhật cả chương trình.

Quy tắc khi tạo hàm

  • Tên hàm phải bắt đầu với một ký tự hoặc dấu gạch dưới.
  • Tên hàm không được bắt đầu bằng số.
  • Đặt tên của hàm phải là duy nhất.
  • Tên của hàm không chứa dấu cách.
  • Tên của hàm phải mô tả được công việc của nó
  • Hàm chấp nhận tham số và có thể trả về giá trị

Cấu trúc của một hàm

Hàm tự định nghĩa

<?php
function functionName() {
    //code được thực thi;
}
// Gọi function
functionName(); 
?>

Trong đó functionName là tên cùa hàm, cách đặt tên hàm cũng phải tuân thủ theo các ràng buộc tương tự như đặt tên biến.

Ví dụ: Xuất thứ tự chữ cái từ một tới 5 có sử dụng duyệt mảng.

<?php
    function xuatchucai(){
        $name= array("one", "two", "three", "four", "five");
        foreach ($name as $value){ 
            echo "$value <br>"; 
        }
    }
    //gọi hàm
    xuatchucai();
?>

Hàm tự định nghĩa với các tham số

Trong PHP chúng ta có thể khai báo hàm có tham số hoặc không có tham số. Các tham số đóng vai trò là các biến sử dụng bên trong hàm và chúng ta có thể truyền dữ liệu đầu cho các biến này khi gọi hàm.

<?php
function functionName($giatri1, $giatri2) {
    //code được thực thi;
}
?>

Trong đó, các biến $giatri1, $giatri2 là các tham số mà bạn muốn truyền vào. Các tham số này la các biến truyền vào thuộc một kiểu dữ liệu bất kỳ nào đó ( và Không giới hạn số lượng tham số truyền vào.)

Ví dụ:

<?php
    function output($string){
        echo "$string <br>";
    }
    //gọi hàm
    output("Chào Mừng");
    output("Đến với");
    output("Series Học PHP căn bản");
?>

Hàm tự định nghĩa với giá trị trả về

Hàm có thể trả về một giá trị khi được gọi. Để khai báo một hàm với giá trị trả về chúng ta sử dụng từ khoá return.

<?php
function functionName(có hoặc không có đối số) {
    //code được thực thi;
    return giatri;
}
?>

Lệnh return dùng để trả về cho hàm một giá trị. (Sau khi thực thi xong, hàm sẽ có một giá trị, lúc đó nó có thể được sử dụng giống như một biến)

Lưu ý: Trong một hàm, sau khi thực thi xong lệnh return thì hàm sẽ kết thúc (tức là những câu lệnh nằm phía sau lệnh return sẽ không được thực thi). Cho nên trong một hàm, lệnh return cần phải được đặt ở vị trí cuối cùng.

Ví dụ: tính tích của 2 số đơn giản.

<?php
    function tich($a, $b){
        $ketqua = $a * $b;
        return $ketqua;
    }
    //gọi hàm
    echo tich(15,20);
    //ket qua xuat ra man hinh se la 300
?>
Lưu ý: Khi đặt tên hàm, tên hàm có thể là một tổ hợp bất kỳ những chữ cái, con số và dấu gạch dưới, nhưng không được bắt đầu bằng số mà phải bắt đầu từ chữ cái và dấu gạch dưới.

Cách gọi hàm

Nếu các bạn để ý các ví dụ bên trên thì bạn sẽ thấy ở mỗi ví dụ mình đều cho lại 1 comment gọi hàm trong chương trình. Cách gọi một function rất đơn giản, sau khi bạn đã xây dựng hàm xong thì bạn chỉ cần code theo cú pháp tương tự mãu bên dưới.

functionName();
//hoặc
functionName($param);

Trong đó:

  • functionName: là tên của hàm các bạn muốn gọi.
  • $param: là tham số các bạn muốn truyền vào hàm (nếu lúc khai báo hàm có yêu cầu truyền tham số).

Bạn hãy xem lại ví dụ bên dưới

<?php
    function xuatchucai(){
        $name= array("one", "two", "three", "four", "five");
        foreach ($name as $value){ 
            echo "$value <br>"; 
        }
    }
    //sau khi xây dựng xong 1 hàm bạn hãy đóng làm lại bằng dấu } và sau đó gọi hàm bằng cách viết lại têm của hàm đó và thêm () phía sau.
    xuatchucai();
    //Không được code dòng gọi hàm khi vẫn đang trong hàm mà bạn đang xây dựng
?>
Lưu ý: Bạn không được gọi hàm khi bạn vẫn chưa xây dựng xong hàm đó hoặc chưa thực hiện đóng hàm lại nhé!

Thiết lập giá trị mặc định cho tham số hàm trong PHP

Bạn có thể thiết lập một tham số có một giá trị mặc định nếu người gọi hàm không truyền cho nó.

Nếu một hàm trong php bạn khai báo có biến truyền vào nhưng đến lúc gọi hàm để sử dụng bạn lại không truyền biến vào thì hệ thống sẽ báo lỗi ngay. Vì thế, để không bị ràng buộc khi sử dụng hàm có tham số truyền vào, ta sẽ thiết lập giá trị mặc định cho tham số đó ngay từ bước đầu xây dựng hàm.

<?php
function functionName($giatri = "gia tri mac dinh") {
    //code được thực thi;
}
?>

Ví dụ 1:

<?php
    function printMessage($param = "Giá trị mặc định")
    {
    echo $param;
    }
    //gọi hàm có truyền tham số là một chuỗi
    printMessage("Tham số này là một chuỗi được truyền vào!!!<br />");
    //gọi hàm khi không truyền tham số nào cả
    printMessage();
?>

Kết quả:

Tham số này là một chuỗi được truyền vào!!!
Giá trị mặc định

Ví dụ 2:

<?php
    function printMessage($a, $b, $c = 5)//$c sẽ có gia trị mặc định là 5
    {
    echo $a + $b + $c;
    }
    //gọi hàm có truyền tất cả tham số vào
    printMessage(2,3,6); // khi này hàm sẽ tự hiểu $a =4, $b =7, $c = 6
    echo " - ";
    //gọi hàm khi không truyền tham số $c vào 
    printMessage(4,7); // khi này hàm sẽ tự hiểu $a =4, $b =7 và $c mặc định sẽ bằng 5
?>

Kết quả xuất ra màn hình: 11 – 16

Truyền tham số bằng tham chiếu trong PHP

Tương tự như phần giới thiệu về cách thay đổi phần tử hiện tại bằng cách thay đổi tham chiếu mà mình đã nói qua trong bài 7 Vòng lặp Foreach ở phần thay đổi phần tử bằng tham chiếu

Ở trong function, PHP cũng tạo ra một bản sao chép giá trị của biến đó khi nạp tham số vào hàm, cho nên khi thay đổi giá trị của tham số này trong hàm thì giá trị của biến gốc sẽ vẫn như cũ mà không bị thay đổi theo.

Đôi lúc ta cần phải thay đổi luôn cả gái trị của biến gốc đang được gọi tham số trong hàm đó vì một số lý do của chương trình. Chính vì thế khi này ta sẽ phải sử dụng tham số bởi dạng tham chiếu.

Để dễ hiểu các bạn hãy xem ví dụ dưới đây:

<?php
    // Tạo 1 biến
    $bien = 0;

    // Hàm tăng giá trị tham số truyền vào lên 1
    function tinh_cong(&$bien) //gọi tham chiếu bằng cách thêm dấu &
    {
        $bien = $bien + 1;
        return $bien;
    }

    // Xuất giá trị trả về của hàm cộng
    echo tinh_cong($bien); //kết quả màn hình: 1

    // Xuất giá trị của biến gốc
    echo $bien; //kết quả màn hình: 1
    //bạn sẽ thấy biến gốc bây giờ đã thay đổi
?>

==> Bạn có thể truyền một tham số bởi tham chiếu thông qua việc thêm một ký hiệu & trước tên biến trong lời gọi hàm hoặc định nghĩa hàm.

Kiểm tra hàm đã tồn tại

Trong thực tế khi xây dựng các dự án với PHP hướng thủ tục thì số lượng các hàm sẽ không dừng ở con số 5,10,20,… mà nó sẽ lớn hơn rất là nhiều, như vậy thì chuyện trùng lặp hàm là điều không thể tránh khỏi đối với một lập trình viên không chuyên nghiệp hoặc một lý do nào khác khiến việc trùng lặp hàm xảy ra. Chính vì đều đó trong PHP đã cung cấp cho chúng ta một hàm function_exists() để giải quyết vấn đề đó.

Cú Pháp

function_exists('functionName');

Trong đó: functionName là tên của hàm các bạn kiểm tra và hàm này sẽ trả về giá trị TRUE nếu hàm đã tồn tại và  ngược lại FALSE nếu chưa tồn tại.

<?php
if (!function_exists('loopNumber')) {
    function loopNumber($number = 0)
    {
        for ($i = 0; $i <= $number; $i++) {
            echo $i;
        }
    }
}
//theo toidicode

Built in Function trong PHP

Built in Functions là các Functions có sẵn khi cài đặt PHP. Nó thực hiện công việc thường gặp giúp PHP làm việc hiệu quả.

Built in Functions được chia thành nhiều loại khác nhau như: String Functions, Numeric Functions

Trong rất rất nhiều trường hợp nhằm giúp rút gọn code và tăng hiệu xuất cho code mà ta sẽ sử dụng hàm có sẵn trong PHP thay vì sử dụng các hàm tự tạo làm tốn thời gian biên dịch cho chương trình.

Kết thúc

Qua bài trên mình đã giới thiệu và hướng dẫn các bạn cách khai báo và sử dụng hàm (function) trong PHP, đây là kiến thức quan trọng trong lập trình hướng đội tượng và các bạn sẽ phải tận dụng hàm rất nhiều trong các trương trình, dự án sau này, cho nên các bạn hãy nắm vững khái niệm về hàm nhé! Nếu có thắc mắc gì các bạn hãy để lại comment bên dưới bài viết đê mọi người cùng thảo luận nhé!

Ở bài tiếp theo mình sẽ giới thiệu cho các bạn khái niệm về mảng ( Array) trong PHP.

Hãy tiếp tục trong series học PHP căn bản ở các bài viết tiếp theo các bạn nhé!

Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!

Xem thêm:

CHÚC CÁC BẠN THÀNH CÔNG

The post Bài 9: Hàm (Function) Trong PHP appeared first on Tân Hồng IT.

]]>
https://tanhongit.com/bai-9-ham-function-trong-php/feed/ 0