PHP cơ bản
Nội dung tài liệu:
Những vấn đề cơ bản
Lịch sử
Cài đặt: sử dụng WAMP
Ngôn ngữ:PHP
PHP và MySQL
PHP và Hướng đối tượng
PHP là gì ?
Một ngôn ngữ (viết từ C++, mã nguồn mở) có thể nhúng vào HTML, tạo ra ứng dụng WEB.
Ví dụ:
echo "Hi, I`m a PHP script!";
?>
PHP là gì ?
Với Và ?> là dấu hiệu dùng để nhận biết đoạn mã PHP
Echo dùng để xuất ra 1 nội dung cho file HTML.
PHP là ngôn ngữ phục vụ xử lý tại WEB Server (khác với JavaScript thông thường là Client Script)
Không thể biết được mã PHP tại Server (được trả về cho Client chỉ là mã HTML)
Những ưu điểm nổi bật
Miễn phíTạo nên một sức mạnh rất lớn của PHP.
Từ Internet, chúng ta có thể thu thập rất nhiều mã nguồn mở PHP.
Ngôn ngữ PHP đơn giản, giống C, Perl
Hỗ trợ hầu hết các cơ sở dữ liệu
Chạy nhanh
Web Server hỗ trợ PHP
Apache
Microsoft IIS
PWS (Personal WebServer)
iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd
….
Các hướng tiếp cận lập trình
Lập trình theo cấu trúc
Lập trình hướng đối tượng OOP
Lập trình AOP (aspect-oriented programming)
Những cơ sở dữ liệu hỗ trợ
Adabas D
Ingres
Oracle (OCI7 and OCI8)
dBase
InterBase
Ovrimos
Empress
FrontBase
PostgreSQL
FilePro (read-only)
mSQL
Solid
Hyperwave
Direct MS-SQL
Sybase
IBM DB2
MySQL
Velocis
Informix
ODBC
Unix dbm
Lịch sử PHP
Ra đời năm 1994 - 1995 do Rasmus Lerdorf phát triển.
Phiên bản thứ hai PHP/FI (1%)
1997:Phiên bản PHP3 của Zeev Suraski và Andi Gutmans (10%) – 1998/6 chính thức công bố.
Lịch sử PHP
Mùa đông 1998, PHP4 của Zend
Zend Engine,
Phiên bản cuối cùng: (PHP4.4.1)
PHP5 (PHP5.1.3) – 05/2006
Ngôn ngữ PHP - Cú pháp cơ bản
Phân biệt với ngôn ngữ HTML
1.
2. echo ("this is the simplest, an SGML processing instruction "); ?>
= expression ?> This is a shortcut for " echo expression ?>
3.
4. <% echo ("You may optionally use ASP-style tags"); %>
<%= $variable; # This is a shortcut for "<% echo . . ." %>
(hỗ trợ từ 3.0.4)
8 kiểu dữ liệu trong PHP
4 kiểu định lượng
Boolean
Integer
Float
String
2 kiểu tổ hợp
Array
Object
2 kiểu đặc biệt
Resource
NULL
Kiểu BOOLEAN
Nhận 2 giá trị TRUE - FALSE
Ví dụ:
// == is an operator which test equality and returns a boolean
if ($action == "show_version") {
echo "The version is 1.23";
}
// this is not necessary...
if ($show_separators == TRUE) {
echo "
";
}
// ...because you can simply type
if ($show_separators) {
echo "
";
}
Chuyển đổi kiểu dữ liệu BOOLEAN
Khi hoán chuyển thành kiểu BOOLEAN, những kiểu dữ liệu với giá trị sau sẽ được coi như là FALSE:
Kiểu số nguyên = 0
Kiểu số thực = 0.0
Chuỗi rỗng hoặc chuỗi “0”
Kiểu NULL
Kiểu mảng không có phần tử
Kiểu đối tượng chưa được khởi tạo..
Kiểu số nguyên
Đây là tập hợp {… ,-2,-1,0,1,2….}
Ta có thể dùng số thập phân, số thập lục phân, số bát phân
Ví dụ:
$a = 1234; # số thập phân
$a = -123; # một số âm
$a = 0123; # số bát phân (= số 83 trong thập phân)
$a = 0x1A; # số thập lục phân(bằng số 26 trong thập phân)
?>
Biến trong PHP
Biến trong PHP được bắt đầu bằng dấu "$", theo sau đó là tên biến. Ví dụ: $nguyen, $phi
Tên biến hợp lệ phải bắt đầu là một chữ cái hay một đường gạch dưới (_), theo sau đó có thể là bất kỳ chữ cái, số hoặc là (_).
Ví dụ :
$var = "Bob";
$Var = "Joe";
echo "$var, $Var"; // outputs "Bob, Joe"
$4site = `not yet`; // không hợp lệ
$_4site = `not yet`; // hợp lệ
Toán tử toán học
Một số hàm toán học
Abs: trị tuyệt đối
Base_convert: chuyển đổi 1 số giữa các cơ số.
Bindec: chuyển đổi hệ nhị phân sang thập phân
Ceil: làm tròn tăng các phân số
Cos: Côsin
Floor: làm tròn giảm các phân số
Một số hàm khác:
Exp, fmod, getrandmax,hexdec, log10, pow, pi, sin, sqrt, srand,…
Các toán tử GÁN
Cơ bản nhất là: =
+=, -=, *=, /=, .=, %=, &=, |=, ^=, <,<=, >, >=
++$value: tăng trước
$value++: tăng sau
--$value: giảm trước
$value--: giảm sau
Các toán tử chuỗi
Toán tử ghép nối: .
Toán tử gán ghép nối: .=
Các toán tử Bit
And: $a & $b
Or: $a | $b
XOR: $a ^ $b
Not: ~ $a
Shift left: $a << $b
Shift right: $a >> $b
Các toán tử so sánh
Các toán tử logic
Các câu lệnh điều khiển
Câu lệnh IF
If (expression)
Câu lệnh
Câu lệnh ELSE
If (exp) {
Câu lệnh
} else {
Câu lệnh
}
Câu lệnh ELSEIF
If (exp) {
câu lệnh
} elseif (exp) {
câu lệnh
} elseif (exp) {
…
} else {
Câu lệnh
}
Toán tử tam phân
$res = điềukiện ? Exp1 : exp2;
Ví dụ:
$value = 14;
$output = $value<10 ? “0x”.$value : “0x”.chr($value-10+65);
Echo “In hexadecimal, $value=$output”;
?>
Sử dụng lệnh switch
Ví dụ:
$task = 4;
Switch($task) {
Case 1:
echo “Số một”; break;
Case 2:
echo “Số hai”; break;
..
Case 6:
echo “Số sáu”; break;
Default:
echo “Số lớn”; break;
}
?>
Vòng lặp FOR
For (exp1; exp2; exp3) câu lệnh
Ví dụ:
For ($v1=2, $v2=2; $v1<5 && $v2<5; $v1++,$v2++){
Echo “$v1x$v2=“, $v1*$v2, “
”;
}
Kết quả:
2 x 2 = 4
3 x 3 = 9
4 x 4 =16
Vòng lặp WHILE
While (exp) câu lệnh;
Ví dụ:
$value = 1;
While ($value<10) {
Echo “New value:”, $value, “
”;
$value *= 2;
}
Một số dạng vòng lặp khác
Do
Câu lệnh
While (exp)
Foreach (array_exp as $value) câu lệnh
Foreach (array_exp as $key=>$value) câu lệnh
Lưu ý: break, continue
Chuỗi ký tự
Một số hàm thông dụng
Chr: trả về ký tự đặc biệt ở dạng mã ACSII
Echo: Hiển thị một hay nhiều chuỗi
Explode: tách một chuỗi trên một chuỗi con
Implode: nối các phần tử mảng với một chuỗi
Ltrim, rtrim, trim: bỏ khoảng trắng..
Ord: trả về trị ACSII của ký tự
Strlen: chiều dài của một chuỗi
Một số hàm khác: str_repeat, str_replase, strchr, strcmp, strpos, strrev,…
Xem thêm: định dạnh chuỗi: %, b, c, d, u,…
Mảng trong PHP
Tập hợp các giá trị được lưu trữ dưới 1 tên, 1 phần quan trọng của PHP.
Chỉ số mảng có thể là số, chuỗi (numeric array, associative array)
Ví dụ:
$traicay[1] = “apple”;
$tenbien[“abc”] = 123;
Mặc định giá trị bắt đầu của mảng là: 0
Khai báo mảng
Cách 1:
"Dog","b"=>"Cat","c"=>"Horse");
print_r($a);
?>
Kết quả:
Array ( [a] => Dog [b] => Cat [c] => Horse )
Cách 2:
$a=array("Dog","Cat","Horse"); print_r($a);
?>
Kết quả:
Array ( [0] => Dog [1] => Cat [2] => Horse )
Vòng lặp đối với mảng
$a[0] = “an”; $a[1]=“binh”; $a[2]=“chinh”;
For ($i=0; $i
}
Kết quả:
an
binh
chinh
Vòng lặp foreach
Foreach (arr_exp as $value) câu lệnh
Hoạt động: Gán một phần tử mới từ một mảng vào $value mỗi khi nó thông qua vòng lặp.
Foreach (arr_exp as $key$value) câu lệnh
Hoạt động: Đặt khóa của phần tử vào trong $key và giá trị của nó vào trong $value
Ví dụ: vòng lặp foreach
$a = array(“an”, “binh”, “chinh”);
Foreach ($a as $value) {
Echo “Value : $value ”;
}
Kết quả:
Value: an
Value: binh
Value: chinh
Ví dụ: vòng lặp foreach
$a = array(“an”, “binh”, “chinh”);
Foreach ($a as $key=>$value) {
Echo “Key: $key; Value : $value ”;
}
Kết quả:
Key 0: Value: an
Key 1: Value: binh
Key 2: Value: chinh
Một số hàm về mảng
array_combine: tạo ra một mảng bằng cách sử dụng một mảng dành cho các khóa và một mảng khác dành cho các giá trị.
array_rand: lấy 1 hay nhiều phần tử ngẫu nhiên ra khỏi một mảng.
Array_merge: hợp nhất hai hay nhiều mảng
Array_keys: trả về các khóa trong một mảng
Count: đếm số phần tử trong một mảng…
Forms với PHP
Để có thể truyền thông tin giữa các tập tin
File ABC.HTML
Tập tin PHP nhận biến
File welcome.php
Welcome .
You are years old.
Kết quả:
Welcome ABC.
You are 20 years old.
$_GET
Khi nhấn SUBMIT, Kết quả:
http://www.w3schools.com/welcome.php?name=ABC&age=20
Welcome .
You are years old!
$_POST
Khi nhấn SUBMIT, Kết quả:
http://www.w3schools.com/welcome.php
Welcome .
You are years old!
Lưu ý: $_REQUEST có thể dùng thay cho $_GET và $_POST
Làm việc với CSDL
Database (MySQL)
- Tạo CSDL
- Thêm / xóa bảng dữ liệu
- Thêm / xóa / cập nhật dòng dữ liệu
- Xem / truy vấn dòng dữ liệu
Web (PHP)
- Giao diện người dùng
- Mã nguồn: Thêm và truy vấn
- Mã nguồn: Xóa và cập nhật
Cú pháp cơ bản MySQL
SHOW DATABASES;
USE database_name;
SHOW TABLES;
DROP TABLE table_name;
Create MySQL Table
CREATE TABLE user (name varchar(9) NOT NULL,
id int(6) NOT NULL,
PRIMARY KEY (id),
UNIQUE (id)
);
Add/Delete/Update Table
INSERT INTO user VALUES (‘bond’, ‘007’);
DELETE FROM user WHERE id=‘007’;
UPDATE user SET name=‘BOND’ WHERE id=‘007’;
Query Database
SELECT * FROM user;
SELECT * FROM user WHERE name=‘BOND’;
SELECT DISTINCT name FROM user;
SELECT name, id FROM user ORDER BY name;
File cấu hình PHP
// configuration parameters
// database configuration
$host = "macneill.cs.tcd.ie";
$user = “username";
$pass = “password";
$db = “username_db";
// default contact person
$def_contact = “ABC";
?>
Sử dụng một tập tin dạng cấu hình để chứa những thông tin biến quan trọng.
Những trang PHP có thể liên kết tới nó và sử dụng những biến này.
Thêm dữ liệu vào CSDL
Thêm dữ liệu vào CSDL (tt)
include("conf.php");
// form submitted so start processing it
$title = $_POST["title"];
$authors = $_POST["authors"];
…
// set up error list array & validate text input fields
$errorList = array();
$count = 0;
if (!$title) { $errorList[$count] = "Invalid entry: Title"; $count++; }
// set default value for contact person
if (!$contact) { $contact = $def_contact; }
// check for errors & if none found...
if (sizeof($errorList) == 0)
{
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
mysql_select_db($db) or die ("Unable to select database!");
$query = "INSERT INTO papers (title, authors, description, comment, super, bibtex, url, genre) VALUES (`$title`, `$authors`, `$description`, `$comment`, `$super`,`$bibtex`,`$url`,`$genre`)";
$result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
echo "Addition successful. ";
// close database connection
mysql_close($connection);
}
else {// errors occurred}
?>
Truy vấn
CSDL
include("conf.php");
$connection = mysql_connect($host, $user, $pass) or die ();
mysql_select_db($db) or die ("Unable to select database!");
$query = "SELECT * FROM papers";
$result = mysql_query($query) or die ("Error in query”);
?>
Cập nhật
CSDL 2
include("conf.php");
// form submitted so start processing it
$title = $_POST["title"];
$authors = $_POST["authors"];
…
$id = $_POST["id"];
// set up error list array
$errorList = array();
$count = 0;
// validate text input fields
if (!$title) { $errorList[$count] = "Invalid entry: Title"; $count++; }
if (!$contact) { $contact = $def_contact; }
// check for errors, if none found...
if (sizeof($errorList) == 0)
{
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
mysql_select_db($db) or die ("Unable to select database!");
$query = "UPDATE papers SET title = `$title`, authors = `$authors`, description = `$description`, comment = `$comment`, super = `$super`, bibtex = `$bibtex`, url = `$url`, genre = `$genre` WHERE id = `$id`";
$result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
// print result
echo “Update successful";
// close database connection
mysql_close($connection);
}
else{}
?>
Khai báo hướng đối tượng
class Circle
{
public $radius;
public function calcArea($radius)
{
return pi() * pow($radius, 2);
}
}
// Create a new instance of Circle
$c = new Circle();
// Change a property
$c->radius = 5;
// Use a method
echo `The area of the circle is ` . $c->calcArea(5);
?>
Khai báo hướng đối tượng
class Circle
{
public $radius;
public function calcArea()
{
return pi() * pow($this->radius, 2);
}
}
// Create a new instance of Circle
$c = new Circle();
// Change a property
$c->radius = 5;
// Use a method
echo `The area of the circle is ` . $c->calcArea();
?>
Kết quả hiển thị
Private property
class Circle
{
private $center = array(`x` => 0, `y` => 0);
private $radius = 1;
public function setRadius($radius)
{
$this->radius = $radius;
}
public function setCenter($x, $y)
{
$this->center[`x`] = $x;
$this->center[`y`] = $y;
}
public function calcArea()
{
return pi() * pow($this->radius, 2);
}
Attempt to access a private property
$c = new Circle();
$c->setCenter(0,0);
$c->setRadius(10);
echo "The area of the circle is " . $c->calcArea() . " ";
echo "The private value of radius is " . $c->radius;
?>
Contructors
class Circle
{
public function __construct()
{
// Perform actions when object is created
echo "A circle object is being created. ";
}
}
$c = new Circle();
?>
Contructors
class Circle
{
public $radius;
public function __construct($r)
{
// Perform actions when object is created
echo "A circle object is being created. ";
$this->radius = $r;
}
}
$c = new Circle(10);
?>
Destructors
class Circle
{
public function __construct()
{
// Perform actions when object is created
echo "A circle object is being created. ";
}
public function __destruct()
{
// Perform actions when object is destroyed
echo "A circle object is being destroyed. ";
}
}
$c = new Circle();
// Destroy the circle object
unset($c);
?>
Static
class Circle
{
private static $radius;
public static function setRadius($r)
{
self::$radius = $r;
}
public static function getRadius()
{
return self::$radius;
}
}
Circle::setRadius(5);
echo "Our statically accessed circle has a radius of " .
Circle::getRadius() . ". ";
?>
Contants
class Circle
{
const pi = 3.14159265359;
public function getPi()
{
return self::pi;
}
}
echo "The value of Pi in our Circle class is " . Circle::pi . " ";
$c = new Circle();
echo "To recap, the value of Pi in our Circle class is " .
$c->getPi()
?>
Assignments
class Circle
{
public $radius = 10;
}
// Create the original object and set its parameters
$original = new Circle();
// Create a cloned and assigned (by reference) object
$cloned = clone $original;
$assigned = $original;
// Now, change the original radius value:
$original->radius = 5;
// Show the state of all three objects
echo " Original: ";
print_r($original);
echo " Assigned: ";
print_r($assigned);
echo " Cloned: ";
print_r($cloned);
?>
Extends
class Shape
{
public $origin = array(`x`=>0, `y`=>0);
}
class Circle extends Shape
{
public $radius;
}
$c = new Circle();
print_r($c->origin);
?>
Extends
class Shape
{
public $origin = array(`x`=>0, `y`=>0);
public function getOrigin()
{
return $this->origin;
}
}
class Circle extends Shape
{
public function getOrigin()
{
return array(`x`=>1, `y`=>1);
}
}
$c = new Circle();
print_r($c->getOrigin());
?>
Parents
class Shape
{
public function draw()
{
echo "Shape::draw() has been called. ";
}
}
class Circle extends Shape
{
public function draw()
{
echo "Circle::draw() has been called. ";
parent::draw();
}
}
$c = new Circle();
$c->draw();
?>
Abstract
abstract class Shape
{
public $origin = array(`x`=>0, `y`=>0);
}
class Circle extends Shape
{
// Circle implementation
}
$c = new Circle();
print_r($c->origin);
$s = new Shape();
print_r($s->origin);
?>
Call
class Circle
{
public function __call($m, $a)
{
echo "The method " . $m . " was called. " .
"The arguments were as follows: ";
print_r($a);
}
}
$c = new Circle();
$c->undefinedmethod(1, `a`, 2, `b`);
?>
__Get __Set
class Circle
{
public function __get($p)
{
return $this->$p;
}
public function __set($p, $v)
{
$this->$p = $v;
}
}
$c = new Circle();
$c->nonexistent = 5;
echo "The value of our nonexistent property: "
.$c->nonexistent;
?>
__toString
class Circle
{
public function __toString()
{
return "Automatic string value for Circle";
}
}
$c = new Circle();
echo "The value of $c is: ";
echo $c;
?>
session_start();
class Circle
{
public $radius;
public $origin = array(`x`=>0, `y`=>0);
public function __sleep()
{
echo `zzzzz`;
return array(`radius`,`origin`);
}
public function __wakeup()
{
echo `good morning!`;
}
}
$c = new Circle();
$c->radius = 5;
$c->origin[`x`] = 3;
$c->origin[`y`] = 4;
echo `Preparing to sleep.....`;
$_SESSION[`c`] = serialize($c);
echo `
Wake the object`;
?>
Page1.php
session_start();
class Circle
{
public $radius;
public $origin = array(`x`=>0, `y`=>0);
public function __sleep()
{
echo `zzzzz`;
return array(`radius`,`origin`);
}
public function __wakeup()
{
echo `good morning!`;
}
}
echo `Rise and shine.....`;
$c = unserialize($_SESSION[`c`]);
echo `
The contents of our Circle object are:
`;
echo `Radius: ` . $c->radius . `
`;
echo `Origin: (` . $c->origin[`x`] . `,` . $c->origin[`y`] . `)`;
?>
Page2.php
Session in PHP
Starting a PHP Session
Storing a Session Variable
// store session data
$_SESSION[`views`]=1; ?>
//retrieve session data
echo "Pageviews=". $_SESSION[`views`];
?>
Output:
Pageviews=1
Tận dụng biến session
session_start(); if(isset($_SESSION[`views`]))
$_SESSION[`views`]=$_SESSION[`views`]+1;
else
$_SESSION[`views`]=1;
echo "Views=". $_SESSION[`views`];
?>
Destroying a session variables:
unset($_SESSION[`views`]);
Session destroyed:
session_destroy();