Tải nạp file dùng lệnh include - require, include_once - require_once trong php


Tải nạp file dùng lệnh include - require, include_once - require_once trong php


tự học php nâng cao 30/03/2017 323

Tìm hiểu sự khác biệt giữa include và require, khác biệt include và include_one - require và require_one. Tải nạp mã nguồn của một file vào file khác,... cách quản lý code trong php.

Cũng giống như các ngôn ngữ lập trình khác như C, JAVA, ... PHP cung cấp các câu lệnh dùng để tải nạp file mã nguồn vào file thực thi, giúp cho chương trình trở nên gọn gàng - dễ quản lý.

Có 4 câu lệnh được dùng để tải nạp file (load file) trong php:

  1. include(): tải nạp file nhiều lần và sẽ bỏ qua các lỗi ở mức độ warning
  2. include_once(): tải nạp file một lần duy nhất, bỏ qua các lỗi ở mức độ warning
  3. require(): tải nạp file nhiều lần nếu code có lỗi chương trình sẽ bị dừng ở vị trí lỗi mà không tải nạp tiếp
  4. require_once():  tải nạp file một lần nếu code có lỗi chương trình sẽ bị dừng ở vị trí lỗi mà không tải nạp tiếp

Vấn đề quản lý mã nguồn: dư thừa và bảo trì 

Giả sử, bạn cần xây dựng một trang web có 2 trang: trang chủ - nội dung tin tức. Và có layout như sau:


Các thành phần giống nhau giữa 2 trang là phần header, left panel - chỉ có phần content là khác nội dung. Bạn sẽ cần tạo 2 file: index.php (hiển thị trang chủ), trang_tin_tuc.php (hiển thị nội dung trang tin tức), giả sử sẽ được tạo trong thư mục hoc_php. Như vậy, ở file index.phptrang_tin_tuc.php các phần code giống nhau để xử lý cho việc hiển thị header, left panel - điều này dẫn đến vấn đề dư thừa mã nguồn. Thêm vào đó, nếu một lúc nào đó cần thiết để sửa code cho các chức năng này bạn lại phải cập nhật cho từng file khiến cho vấn đề bảo trì mã nguồn trở nên khó khăn, tính cấu trúc của trang web thiếu logic.

Để giải quyết vấn đề này, chúng ta tạo thêm 2 file: header.phpleft_panel.php cho chức năng hiển thị phần header của trang web và hiển thị phần panel bên trái, ở file nào cần dùng tới chúng ta chỉ cần triệu gọi hay còn gọi là tải nạp (load) chúng vào vị trí cần dùng là được. Tương tự, bạn cũng có thể tạo một nhóm các file thành các thư viện riêng rẽ - khai báo các hàm mà chúng được sử dụng nhiều lần, mỗi khi cần gọi hàm thì triệu gọi - tải nạp file thư viện mà thôi, không cần phải định nghĩa lại.

Tạo file header.php

<?php
	//Hiển thị tiêu đề trang web - tùy theo trang
	function show_title($title = '')
	{
		echo "<h1>$title</h1>";
	}
?>

Tạo file left_panel.php

<?php
	//Hiển thị menu dọc - tùy theo trang
	function show_panel($page = 'home')
	{
		$menu = "<ul>";
		$link = array("home" => "index.php", "trang_tin_tuc" => "trang_tin_tuc.php");
		$page_name = array("Trang Chủ", "Trang Tin Tức");
		$i = 0;
		foreach($link as $key => $item)
		{
			$menu .= "<li ".(($key == $page) ? 'style="font-weight: 700; color: red"' : '')."><a href='{$item}'>{$page_name[$i]}</a></li>";
			$i++;
		}
		$menu .= "</ul>";
		echo $menu;
	}
?>

Tạo file index.php

<?php
	$page = 'home';
	include 'header.php';
	require 'left_panel.php';
?>
<!DOCTYPE HTML>
<head>
	<title>
		Trang chủ
	</title>
</head>
<body>

<?php
	show_title('Trang chủ');
?>

<table>
	<tr>
		<td>
			<?php
				show_panel($page);
			?>
		</td>
		<td>
			Nội dung trang chủ
		</td>
	</tr>
</table>
</body>
</html>

Tạo file trang_tin_tuc.php

<?php
	$page = 'trang_tin_tuc';
	include 'header.php';
	include 'left_panel.php';
?>
<!DOCTYPE HTML>
<head>
	<title>
		Trang tin tức
	</title>
</head>
<body>

<?php
	show_title('Trang tin tức');
?>

<table>
	<tr>
		<td>
			<?php
				show_panel($page);
			?>
		</td>
		<td>
			Nội dung tin tức
		</td>
	</tr>
</table>
</body>
</html>

Các bạn mở trình duyệt gõ: http://localhost/hoc_php/index.php - sẽ thấy left panel bôi đậm link Trang Chủ và đánh dấu màu đỏ, tương tự cho trang: trang_tin_tuc.php

Sử dụng câu lệnh include và require

Như đã giới thiệu ở trên câu lệnh include và require cùng chức năng tải nạp file mã nguồn. Sự khác nhau là khi sử dụng lệnh include chương trình sẽ tiếp tục tải file nếu chỉ có lỗi warning, còn khi sử dụng lệnh require thì chương trình sẽ bị dừng lại không tải nạp file tiếp (dừng luôn cả chương trình). Vì vậy chúng ta sử dụng câu lệnh require nếu như đoạn mã nguồn ấy là bắt buộc phải chạy được, phải có - chẳng hạn như đoạn code kết nối cơ sở dữ liệu buộc phải chạy được thì khi tải nạp các file thư viện xử lý tới cơ sở dữ liệu mới chạy được. 

Cú pháp chung:
include 'đường dẫn file php';
require 'đường dẫn file php';

Để thấy sự khác biệt giữa include và require, bạn thêm dòng: include 'check-x.php' vào đầu file index.php (đã hướng dẫn theo ví dụ ở trên), chương trình vẫn chạy và báo lỗi:"Warning: include(check-s.php) ... ". Còn khi thay thế dòng lệnh include bằng require: require 'check-x.php' chương trình không tiếp tục chạy mà báo lỗi: " Warning: require(check-s.php)... Fatal error: require() ". 

Sử dụng include_once và require_once

Code trong file được tải nạp sẽ chỉ được chạy một lần - các lần tải nạp sau sẽ không thực thi nữa. Các bạn tạo file check.php:

<?php
	echo 'Thư viện php';
?>

Và sửa đoạn code đầu file index.php thành:

<?php
	$page = 'home';
	include 'header.php';	
	require 'left_panel.php';
	include_once 'check.php';
	include_once 'check.php';
?>

Các bạn sẽ thấy - chương trình chỉ xuất ra 1 lần dòng: Thư viện php
Tương tự, bạn có thể đổi câu lệnh include_once ở trên bằng lệnh require_once

Tổng Kết

Sau bài này các bạn có thể nắm được:

  • Ý nghĩa, cách sử dụng và sự khác biệt của các lệnh include, require, include_once, require_once
  • Ý thức về giảm lược dư thừa mã nguồn, có thể định hình về việc xây dựng cấu trúc trang web ( phân chia các file: file xử lý hiển thị, file thư viện, ... ) - tạo điều kiện sau này tìm hiểu các mô hình lập trình như MVC.
  • Tìm hiểu sơ lược về template web, layout web


Bài cùng chuyên mục:


  • Tải nạp file dùng lệnh include - require, include_once - require_once trong php
  • Viết ứng dụng web bằng php xử lý dữ liệu form
  • Làm việc với cookie và session
  • Gửi email - thư viện phpmailer
  • File upload - tải tập tin lên máy chủ
  • Thao tác với cơ sở dữ liệu - kết hợp php và mysql
  • Bộ lọc dữ liệu - data filter trong php
  • Mã hóa chuỗi và tập tin - thư viện mcrypt
  • Xử lý ngày giờ (datetime)
  • Thao tác xử lý thư mục và tập tin
  • Biểu thức chính quy (regular expression)


  • Bình luận:

    
    • Videos