Home Back-End Bài 2: Cú pháp trong PHP, Khai báo hằng và biến trong PHP

Bài 2: Cú pháp trong PHP, Khai báo hằng và biến trong PHP

by Tân Hồng IT

Bất kì một ngôn ngữ lập trình nào đều có khái niệm về cú pháp căn bản, khái niệm về biến và hằng số và php cũng không ngoại lệ, đây là kiến thức nền tảng trong lập trình mà hầu như lập trình viên nào cũng phải học đầu tiên. Trong bài này mình sẽ cùng các bạn tìm hiểu biến và hằng trong PHP nhé!

hang va bien trong php

Cú pháp trong PHP, Khai báo hằng và biến trong PHP

Cú pháp PHP cơ bản

Cú pháp PHP chính là cú pháp trong ngôn ngữ C, các bạn làm quen với ngôn ngữ C thì có lợi thế trong lập trình PHP.

  • Code PHP có thể được đặt ở bất kỳ nơi đâu trong file *.php
  • Một đoạn code PHP bắt đầu bằng <?php và kết thúc bằng ?> (short open tag <? không được khuyến khích dùng)
  • Nếu file *.php chỉ chứa thuần túy code PHP mà không có bất kỳ gì khác, chúng ta nên bỏ ?> đi, chỉ giữ lại <?php ở đầu file
  • Một câu lệnh PHP được kết thúc bằng dấu chấm phẩy (;)

Trong thư mục www, các bạn tạo một folder có tên là demo, trong folder demo đó bạn tạo 1 file là index.php và thêm đoạn code dưới vào.

<!DOCTYPE html>
<html>
<body>
    <h1>My first PHP page</h1>
    <?php
    echo "Hello World!"; // lệnh echo tác dụng để hiển thị dữ liệu trong trình duyệt web.
    ?>
</body>
</html>

Chú ý 1: Một file .php có thể bao gồm cả HTML, CSS, JS và cả PHP. Vì vậy bắt buộc chúng ta phải có ký hiệu <?php ?> để xác định đâu là code PHP. Tuy nhiên, nếu file chỉ chứa thuần tuý code PHP mà không chứa bất kỳ ngôn ngữ nào khác thì ta nên bỏ ?> ở cuối code đi. Lợi ích của nó là giúp ngăn ngừa các khoảng trắng ngẫu nhiên hoặc các dòng trống được thêm vào phía sau ?>

Chú ý 2: Khi muốn xuất một chuỗi, bạn có thể dùng dấu nháy đơn hoặc dấu nháy kép bao quanh chuỗi đó. Nhưng có 1 lưu ý là dấu nháy đơn sẽ hiểu rằng tất cả những thành phần được bao bên trong nó sẽ luôn là chuỗi và chỉ xuất ra y hệt như vậy. Còn dấu nháy kép sẽ xem xép những thành phần bên trong nó còn có biến nào hay không, để xuất cả chuỗi lẫn biến ra trình duyệt.

Ví dụ:

Ở trường hợp 1, nếu sử dụng dấu ngoặc đơn để bao chuỗi có chứa 1 biến bên trong thì nó vẫn tính biến đó là chuỗi,

<?php 
$daylabien = "Mọi người"; //khai bao bien 
echo 'Xin chao $daylabien'; //su dung dau ngoac don
?>

Bạn sẽ thấy trình duyệt xuất ra dòng chuỗi như sau: Xin chao Mọi người

Còn về tốc độ thì dấu nháy đơn sẽ chạy nhanh hơn dấu nháy kép vì với dấu nháy kép trình biên dịch sẽ mất thêm một bước kiểm tra chuỗi bên trong có biến nào không, giống tựa như ví dụ bên trên vậy.

Comment trong PHP

Comment là đoạn văn bản bị bỏ qua bởi PHP Engine. Mục đích của các comment là giải thích đoạn mã đang làm gì. Giúp bạn có thể dễ dang edit lại code nếu sau này có kiểm tra lại

Có nhiều cách để tạo một comment trong php.

  • // Ghi chú một dòng đơn
  • # Ghi chú một dòng đơn
  • /* và */ Ghi chú một đoạn nhiều dòng. Để mở đầu đoạn ghi chú, ta dùng dấu /* và để kết thúc, ta dùng dấu */

Để lập trình bằng ngôn ngữ PHP cần chú ý những điểm sau

  • Cuối câu lệnh có dấu ;
  • Biến trong PHP có tiền tố là $
  • Mỗi phương thức đều bắt đầu { và đóng bằng dấu }
  • Khi khai báo biến thì không có kiễu dữ liệu
  • Nên có giá trị khởi đầu cho biến khai báo
  • Phải có chi chú (comment) cho mỗi feature mới
  • Sử dụng dấu // hoặc # để giải thích cho mỗi câu ghi chú
  • Sử dụng /* và */ cho mỗi đoạn ghi chú
  • Khai báo biến có phân biệt chữ hoa hay thường

Khai báo biến (VARIABLES)

Biến là một định danh, nó dùng để lưu trữ các giá trị và nó có thể dùng phép gán để thay đổi giá trị.

Khi thực hiện khai báo biến trong C, bạn cần phải biết tuân thủ quy định như: kiễu dữ liệu trước tên biến và có giá trị khởi đầu, tuy nhiên khi làm việc với PHP thì không cần khai báo kiểu dữ liệu nhưng sử dụng tiền tố $ trước biến. Cú pháp của biến bắt đầu bằng dấu đô la $ và tiếp theo là các chữ, số, dấu gạch dưới.

Các quy tắc cần lưu ý khi làm việc với biến:

  • Một biến bắt đầu bằng dấu $ và theo sau đó là tên biến
  • Tên biến bắt buộc phải bắt đầu bằng ký tự hoặc dấu _
  • Tên biến không được bắt đầu bằng ký số.
  • Tên biến chỉ có thể chứa ký tự (A-z), ký số (0-9) và dấu _
  • Tên biến có phân biệt chữ hoa và chữ thường
  • Thông thường tên biến được viết theo kiểu camelCase

Xuất phát từ những điều ở trên, khai báo biến trong PHP như sau:

<?php
$a = '';
$b = '';
?>

(Chúng ta hong cần phải xác định kiểu dữ liệu cho 1 biến trong PHP, kiểu dữ liệu sẽ tự động được xác định thông qua giá trị mà biến đó đang chứa.)

Gán giá trị cho biến

Để gán giá trị cho biến ta dùng toán tử phép gán =

$licount = 0;
$lsSQL = "Select * from tblusers where active=1";
$nameTypes = array("first", "last", "company");
$checkerror = false;

In giá trị của biến ra màn hình

Ta có thể dùng hàm echo để in giá trị của biến ra màn hình theo 2 cách:

//cách 1
$txt = "You";
echo "I love $txt!"; // phải dùng dấu ngoặc kép để xuất giá trị của biến chứa trong chuỗi
//cách 2
//Sử dụng dấu chấm để nối chuỗi lại với nhau (tương tự dấu cộng trong JS)
$txt = " You";
echo "I love " . $txt . "!";

Cả 2 cách trên đều sẽ cùng ra 1 kết quá: I love You!

Phạm vi của biến

Phạm vi của biến là tầm hoạt động của biến nơi biến có thể được sử dụng sau khi đã khai báo. Có 2 loại phạm vi biến là globallocal.

Một biến toàn cục PHP có thể được truy cập ở bất kỳ đâu trong chương trình. Một biến cục bộ chỉ có thể được truy cập trong phạm vi nhất định.

Phạm vi global

Biến được khai báo ở bên ngoài một hàm và chỉ có thể được sử dụng ở bên ngoài hàm.

$x = 5; // global scope
function myTest() {
// Sử dụng biến x trong hàm sẽ gây ra lỗi
echo "<p>Giá trị biến x là: $x</p>"; //dòng này sẽ bị lỗi
}
myTest();
echo "<p>Giá trị biến x là: $x</p>";

Vậy, để có thể sử dụng được biến global bên trong một hàm, ta dùng từ khóa globaltrước tên biến khi sử dụng biến bên trong hàm.

$x = 5;
$y = 10;
function myTest() {
global $x, $y;
$y = $x + $y;
}
myTest();
echo $y; // kết quả xuất ra sẽ là 15

Một hướng khác, PHP lưu trữ giá trị của tất cả các biến global trong một mảng là $GLOBALS[index], trong đó index là tên của biến. Mảng này có thể được truy xuất bên trong hàm và có thể được dùng để cập nhật lại giá trị cho biến global một cách trực tiếp.

$x = 5;
$y = 10;
function myTest() {
$GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // outputs 15

Thông thường, khi 1 hàm đã chạy xong, tất cả các biến local sẽ bị huỷ. Từ ví dụ trên, nếu các bạn gọi hàm myTest() nhiều lần thì trên màn hình cũng chỉ xuất ra liên tục đáp án là số 15. Vì các biến local sẽ bị huỷ sau khi kết thúc hàm.

Khi muốn các biến local không bị hủy đi sau khi kết thúc hàm, ta dùng từ khóa “static” lúc khai báo biến.

function myTest() { 
static $x = 5; // local scope 
echo "<p>Giá trị biến x là: $x</p>"; 
$x++;
} 
myTest();
myTest();
myTest();
myTest();

Trong hàm trên mình gán static cho biến x và sau đó cho x tăng dần mỗi khi kết thúc hàm. Nhờ gán static vào biến mà sau khi kết thúc hàm myTest(), giá trị của nó vẫn được giữ lại để cộng dồn cho các lần chạy tiếp theo. Vì vậy kết quả trên màn hình lúc này sẽ tăng dần như sau:

giá trị biến trong php

Superglobals

PHP hỗ trợ thêm các biến superglobals được khai báo sẵn (có thể được sử dụng ở bất kỳ phạm vi nào):

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

Các biến superglobals có thể sử dụng ở bất kỳ phạm vi nào trong PHP.

(Update 2/6/2020)

Truy cập động theo tên biến (Accessing A Variable Dynamically By Name)

Các biến có thể được truy cập thông qua các tên biến động. Tên của một biến có thể được lưu trữ trong một biến khác và cho phép nó được truy cập động.

Để hiểu hơn bạn hãy nhìn vào phần ví dụ bên dưới.

$variableName = 'foo';
$foo = 'bar';

// Dưới đây là cách xuất ra giá trị của biến $foo, và cả 3 dòng đều là 3 cách tương đương với nhau, đều có output là "bar":
echo $foo;
echo ${$variableName};
echo $$variableName;

//tương tự,
$variableName = 'foo';
$$variableName = 'bar';

// Các cách xuất dưới đây cũng đều tương đương với nhau, đều có output là "bar"
echo $foo;
echo $$variableName;
echo ${$variableName};

Từ snippet trên, bạn thấy mình đã đặt biến $variableNamegiá trị chuỗi chính là tên của biến $foo. Như vậy khi truy cập động bằng cách thêm một dấu $ trước biến hoặc dùng cú pháp ${} với biến $variableName như trên thì giá trị khi đó sẽ trả về là giá trị của biến $foo. Bạn thử chạy sẽ thấy trên màn hình xuất ra kết quả là : barbarbarbarbarbar

Tương tự, truy cập động cũng rất hữu ích đối với hàm (Function)/ phương thức(method)

<?php
function add($a, $b) {
return $a + $b;
}
$funcName = 'add';
echo $funcName(1, 2); // outputs 3

Và đặc biệt hơn nữa là truy cập động cũng rất hữu ích với lớp(class)

class myClass {
    public function __construct() {
       $functionName = 'doSomething';
       $this->$functionName('Hello World');
    }

    private function doSomething($string) {
        echo $string; // Outputs "Hello World"
    }
}

Quay lại snippet đầu tiên trong phần truy cập động bên trên, chúng ta thấy trong code có cú pháp ${} được sử dụng với một biến nằm trong đó. Vậy, ý nghĩ của nó là gì?

Hãy làm một ví dụ như sau:

$fooBar = 'baz';

$varPrefix = 'foo';

echo $fooBar; // Outputs "baz"
echo ${$varPrefix . 'Bar'}; // Also outputs "baz"

Ta thấy trong cặp dấu {} có sử dụng biểu thức nối một biến với một chuỗi $varPrefix . 'Bar' , khi này biến $varPrefix sẽ được hiểu giá trị là foo và nối thêm chuỗi Bar đằng sau. Vậy, giá trị lúc này nhận được từ {$varPrefix . 'Bar'}fooBar , và giá trị đó cũng chính là tên của biến $fooBar ở dòng số 1.

Như vậy, dòng code echo ${$varPrefix . 'Bar'}; sẽ truy cập động đến giá trị của biến $fooBar và xuất ra kết quả trên màn hình là baz

Kết luận: Chúng ta sẽ sử dụng cú pháp ${} để truy cập động khi tên của biến là một biểu thức. 

Từ đó mà ta có cú pháp tổng quát như sau:

${$variableNamePart1 . $variableNamePart2} = $value;

Khai báo hằng (CONSTANTS)

Hằng cũng là một biến nhưng bạn không thể thay đổi giá trị của nó. Tuy nhiên cách khai báo biến và hằng số thì lại khác nhau.

Quy định khi đặt hằng:

  • Khi hằng được khai báo, giá trị của nó sẽ không để bị thay đổi hoặc hủy.
  • Mặc định, hằng sẽ có phạm vi global và có thể được sử dụng ở bất kỳ nơi đâu sau khi khai báo.
  • Tên hằng phải bắt đầu bằng ký tự hoặc dấu gạch dưới ( _ ) và không có dấu $ như biến.
  • Thông thường, tên hằng sẽ được viết IN toàn bộ, các từ sẽ cách nhau bằng dấu _

define(name, value, case-insensitive)

  • name: tên hằng
  • value: giá trị của hằng
  • case-insensitive: mang giá trị true/false, dùng để xác định xem tên hằng có cần phân biệt chữ hoa hay thường hay không. Giá trị mặc định là false nghĩa là có phân biệt chữ hoa và chữ thường. Nếu giá trị là true nghĩa là không phân biệt chữ hoa và chữ thường.
define("GREETING", "Welcome to FIT-TDC HCM <3 !", true);
function myTest() {
echo GREETING; // xuất ra màn hình giá trị của hằng.
}
myTest();

Hằng còn có một cách tạo thứ hai là sử dụng câu lệnh const. Ví dụ:

const PI = 3.14; // float

const "UNKNOWN" = null; // null

const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok

Constant arrays

Cũng như biến, ta cũng có thể áp dụng mảng với hằng số hoặc hằng số lớp (class constants). Ví dụ:

//class constants
class Answer {
    const C = [2,4];
}
print Answer::C[1] . Answer::C[0]; //output: 42
//Plain constant example
const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; //output: 42
//define example 
define('VALUES', [2, 3]);
define('MY_ARRAY', [
1,
VALUES,
]);
print MY_ARRAY[1][1]; // 3

Hằng số Magic trong PHP

PHP cung cấp một số lượng lớn các hằng số được định nghĩa trước để bất kỳ script nào cũng có thể sử dụng nó.

Có 5 hằng số magic, thay đổi tùy thuộc vào nơi chúng được sử dụng. Ví dụ, giá trị của __LINE__ phụ thuộc vào dòng mà nó được sử dụng trong script của bạn. Các hằng đặc biệt này là phân biệt kiểu chữ.

Bảng dưới liệt kê một số hằng magic trong PHP:

TênMiêu tả
__LINE__Dòng hiện tại của file
__FILE__Đường dẫn đầy đủ và tên đầy đủ của file. Nếu sử dụng bên trong một include thì tên của file được include sẽ được trả về. Từ PHP 4.0.2, __FILE__ luôn luôn chưa một đường dẫn tuyệt đối, trong khi ở phiên bản cũ hơn chúng chứa đường dẫn tương đối trong một số trường hợp
__FUNCTION__Tên của hàm. (Được thêm trong PHP 4.3.0) Như PHP 5, hằng số này trả về tên của hàm như nó đã khai báo trước đó (phân biệt kiểu chữ). Trong PHP 4, giá trị của nó luôn là chữ in thường
__CLASS__Tên của lớp. (Được thêm trong PHP 4.3.0) Như PHP 5, hằng số này trả về tên của lớp như nó đã khai báo trước đó (phân biệt kiểu chữ). Trong PHP 4 giá trị của nó luôn là chữ in thường
__METHOD__Tên phương thức lớp. (Được thêm trong PHP 5.0.0) Tên phương thức này được trả về như đã khai báo trước đó (phân biệt kiểu chữ).

Qua bài viết mình mong các bạn có thể biết được cách khai báo 1 biến, hằng trong php, nhớ những quy tắc khi đặt biến để không bị lỗi khi code.

Xem thêm:

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

Related Posts

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x