Professional Documents
Culture Documents
04 - Cong Nghe Web - PHP
04 - Cong Nghe Web - PHP
LP TRNH WEB
L nh Thanh B mn Mng v Truyn thng My tnh Khoa Cng ngh Thng tin Trng i hc Cng ngh, HQGHN E-mail: thanhld@vnu.edu.vn, thanhld.vnuh@gmail.com Mobile: 0987.257.504
Bi 4
Ni dung
Kin trc ca ng dng Web ng PHP To d n web ng vi PHP
Web ng
Ni dung trang web (HTML + CSS + JavaScript) c Web Server sinh ra khi c yu cu t Client. Rt ph dng: Hu ht cc trang web thng mi u l web ng. S dng ngn ng lp trnh a nng sinh ra ni dung web. S dng CSDL.
Web ng vi CSDL
http://www....
Web Browser
Ni dung web
Database Provider
L nh Thanh, Bi ging Lp trnh web.
CSDL
M hnh ba tng
Tng khch: trnh din v tng tc vi ngi dng Tng gia: thc hin cc logic ca ng dng Tng CSDL: bao gm h qun tr CSDL, CSDL ca ng dng
L nh Thanh, Bi ging Lp trnh web.
PHP-Hypertext Preprocessor
PHP c im
Cc trang c tn m rng *.php M PHP ta C, c trong cp th <?php v ?> - c gi l cc phn on PHP. C th nhng cc phn on PHP vo bt kz v tr no trong trang. Bn ngoi cc phn on PHP c th cha m HTML, CSS, javascript. Phn m PHP c thc thi sinh ra phn ng ca trang web. S dng hm echo a ni dung (HTML, CSS, javascript) vo thn gi HTTPResponse. S dng hm header thay i gi tr cc trng tiu gi HTTP Response
L nh Thanh, Bi ging Lp trnh web.
Trang php
M HTML, CSS, javascript <?php
//M php c thc thi bn server sinh ra phn ng ca trang web
V d trang php
<html> <head></head> <body> <h1>Xin cho</h1> <?php
echo Biu din nh phn ca 999 l; echo decbin(999); echo <input type=button value=Okie?>;
?> </html>
L nh Thanh, Bi ging Lp trnh web.
Phm vi ca bin
Phm vi truy cp ca mt bin l ng cnh n c nh ngha
Mt bin cc b c nh ngha trong mt hm ch c phm vi trong hm Mt bin c nh ngha ton cc (khng trong hm no) c phm vi trong tp nh ngha n cng cc tp c bao hm
V d
<?php $a = 1; include lib.inc'; $b = $a; ?> $a c phm vi trong c tp lib.inc $b c nh ngha trong lib.inc cng c phm vi trong c tp ang nh ngha
L nh Thanh, Bi ging Lp trnh web.
test(); ?> Hm test() khng in ra g c v $a trong hm test l bin cc b, khng phi l $a ton cc.
L nh Thanh, Bi ging Lp trnh web.
Bin tnh ch c phm vi truy cp cc b trong hm, nhng gi tr ca n khng b mt khi thc thi ca chng trnh thot khi hm
function test() { static $count = 0; $count++; echo $count; if ($count < 10) { test(); } $count--;
Bin bin
Bin bin s dng gi tr ca mt bin khc lm tn V d
$a = delta; $r = array; $$a = 2.34; //tng ng $delta = 2.34 $b = array(alpha', betha', delta', gama'); ${$b[2]} == 2.34; $,$r-*1+ == betha; $obj->$a tng ng $obj->delta
L nh Thanh, Bi ging Lp trnh web.
Chuyn kiu
strval($v) - chuyn gi tr ca $v thnh mt xu intval($v) - chuyn gi tr ca $v thnh mt s nguyn floatval($v) - chuyn gi tr ca $v thnh mt s thc
G li vi kiu v gi tr
In ra kiu, gi tr v biu din ca biu thc
print_r(bieu_thuc) var_dump(bieu_thuc1, bieu_thuc2, )
Cc hm s thc v nguyn
Tr tuyt i
integer abs(integer number) float abs(float number)
Trn v sn
float ceil(float value) - Gi tr nguyn thp nht cao hn float floor(float value) Gi tr nguyn cao nht thp hn
Lm trn
float round(float value [, integer precision]) - >= .5 chuyn thnh trn, < .5 chuyn thnh sn
L nh Thanh, Bi ging Lp trnh web.
Cc hm s thc v nguyn
Chuyn i thp phn h s khc (xu)
string decbin(integer number) - Thp phn -> Nh phn integer bindec (string binarystring) Nh phn -> thp phn string dechex(integer number) - Thp phn -> hexa (h 16) integer hexdec(string hexstring) - Hexa -> thp phn string decoct(integer number) - Thp phn -> Octan (h 8) integer octdec(string octalstring) Octan -> thp phn
Cc hm lng gic
float sin(float arg) - sin float cos(float arg) - cos float tan(float arg) - tang float asin(float arg) - asin float acos(float arg) - acos float atan(float arg) - atang float atan2(float y, float x) - atang2 float pi( ) - 3.1415926535898 float deg2rad(float arg) (o gc) -> radian float rad2deg(float arg) (o gc) radian ->
Cc hm m v logarit
float exp(float arg) - earg float pow(float base, number exp) - baseexp float sqrt(float arg) Cn bc hai ca arg float log(float arg) Logarit c s 2 ca arg float log10(float arg) Logarit c s 10 ca arg
Xu
Xu c nh du bi du nhy n hoc nhy kp
V d, y l mt xu k t, y l mt xu khc
Xu (tip)
strlen($s) di xu $s strtolower($s) - xu vit thng ca $s strtoupper($s) - xu vit hoa ca $s ucfirst($s) xu vit hoa k t u ca $s ucwords($s) xu vit hoa k t u cc t $s ltrim($s) xu c b du trng u xu ca $s rtrim($s) xu c b du trng cui xu ca $s trim($s) xu c b du trng u v cui xu ca $s To d liu nh dng: string sprintf (string format [, mixed args...]) printf (string format [, mixed args...])
So snh xu
strcmp($str1, $str2) strncmp($str1, $str2, $length)
0 nu hai xu bng nhau -1 nu $str1 < $str2 1 nu $str1 > $str2
Tm v thay th xu con
substr($s, $start [, $length]) ly xu con ca $s, bao gm cc k t bt u t ch mc $start v c $length k t (hoc n ht nu vng $length) strpos($s, $f [, $offset]) tr v ch mc ca xut hin u tin ca $f trong $s, *bt u tm t $offset+ strstr($s, $f) - tm $f trong $s v tr v xu con bt u t im xut hin u tin ca $f n ht $s stristr(string haystack, string needle) tng t strstr() nhng khng phn bit hoa thng explode($sep, $s [, $limit]) tr v mng l kt qu ca tch $s bng xu phn cch $sep implode($glue, $array) tr v xu l kt qu ni cc phn t mng $array, s dng $glue ni
L nh Thanh, Bi ging Lp trnh web.
Tm v thay th xu con
substr_replace($s, $r, $start [, $length]): Tr v xu l $s c thay [$length] k t bt u t ch mc $start bng [$length] k t u ca $r V d
substr_replace(cho chu, ch, 5); cho kt qu cho ch substr_replace(, chiu, 10, 1); cho kt qu cho bui cng
L nh Thanh, Bi ging Lp trnh web.
Thay th xu con
strtr($s, $from, $to) Tr v xu l kt qu ca thay th cc k t ca $s xut hin trong $from bng k t cng ch mc trong $to, V d
$mischief = strtr("command.com", "aeiou", ""); print $mischief; // prints cmmnd.cm
Lp v i tng
class SimpleClass { //nh ngha hng const constant = 'constant value';
// nh ngha bin/thuc tnh public $var = 'a default value'; // nh ngha hm/phng thc public function displayVar() { echo $this->var; }
$this c dng ch i tng gi Tnh kh kin ca cc thuc tnh v phng thc c th l private, protected, public
} $ob = new A(); A::getFoo(); // output: I am foo $ob->getFoo(); // output: I am foo A::getBar(); // fatal error: using $this not in object context $ob->getBar(); // output: I am bar // If you keep $bar non static this will work // but if bar was static, then var_dump($this->bar) will output null
L nh Thanh, Bi ging Lp trnh web.
K tha
Mt lp ch c th k tha t mt lp khc Lp con c th ghi /che phng thc lp cha
tuy cp phng thc c k tha b che, s dng parent:: nh ngha mt phng thc khng th che, thm t kha final vo nh ngha phng thc
class ExtendClass extends SimpleClass { // Redefine the parent method function displayVar() { echo "Extending class\n"; parent::displayVar(); } } $extended = new ExtendClass(); $extended->displayVar();
Hm to
void __construct ([$args [, $... ]] )
class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } }
Hm hy
void __destruct ( void )
class MyDestructableClass { function __construct() { print "In constructor\n"; $this->name = "MyDestructableClass"; }
Lp o, phng thc o
Phng thc o
c nh ngha vi t kha abstract Ch c ch k, khng c thn
Lp o
c nh ngha vi t kha abstract Khng c th hin Lp c phng thc o phi c c ngha l lp o
Lp o, phng thc o
abstract class AbstractClass { // Force Extending class to define this method abstract protected function getValue(); abstract protected function prefixValue($prefix);
// Common method public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass extends AbstractClass { protected function getValue() { return "ConcreteClass";
Giao din
Giao din xc nh cc phng thc m lp phi ci t
Tt c cc phng thc phi public
interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // Implement the interface class Template implements iTemplate { private $vars = array();
$this->vars[$name] = $var;
public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } }
return $template;
Giao din
Giao din c th k tha t nhiu giao din khc Mt lp c th ci t nhiu giao din
interface a { public function foo(); } interface b { public function bar(); } interface c extends a, b { public function baz(); } class D implements a, b { }
L nh Thanh, Bi ging Lp trnh web.
Trait
Trait
cung cp mt c ch s dng li m khc k tha c nh ngha tng t lp khng c th hin
Hu ch cho nhng NNLT n k tha nh PHP
trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo 'World'; } } trait HelloWorld { use Hello, World; }
Hello World
class MyHelloWorld2 { use Hello, World; public function sayExclamationMark() { echo '!'; } } $o2 = new MyHelloWorld2(); $o2->sayHello(); $o2->sayWorld(); $o2->sayExclamationMark();
Hello World!
L nh Thanh, Bi ging Lp trnh web.
Che
Vi cc hm trng tn
u tin: Thnh vin lp hin ti > thnh vin trait > thnh vin lp c s
Lp khng th nh ngha li cc thuc tnh c trong trait n s dng trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello();
class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello();
Hello Universe!
L nh Thanh, Bi ging Lp trnh web.
Hello World!
trait B { public function smallTalk() { echo 'b'; } public function bigTalk() { echo 'B'; } } class Talker { use A, B { B::smallTalk insteadof A; A::bigTalk insteadof B; B::bigTalk as talk; } } C th thay i tnh kh kin vi ton t as B::bigTalk as protected; B::bigTalk as protected talk;
trait A { public function smallTalk() { echo 'a'; } public function bigTalk() { echo 'A'; } }
Hm clone sao chp tt c cc thuc tnh => cc thuc tnh tham chiu vn gi nguyn gi tr tham chiu Sau khi hon thnh hm clone, nu hm void __clone(void) c nh ngha, hm __clone() ca i tng mi pc to c gi cho php nhng thay i cn thit gi tr cc thuc tnh
class Class2 { private $var = 2; private $obj; public function __construct() { $this->obj = new Class1(); } public function printMe() { echo "<br>var = $this->var"; $this->obj->printMe(); } public function changeValues($v, $v_) { $this->var = $v; $this->obj->changeValue($v_); }
$obj1 = new Class2(); $obj2 = clone $obj1; $obj1->printMe(); $obj2->printMe(); $obj2->changeValues(5, 6); $obj1->printMe(); $obj2->printMe();
var = 2 var_ = 1 var = 2 var_ = 1 var = 2 var_ = 1 var = 5 var_ = 6 L nh Thanh, Bi ging Lp trnh web.
Khng gian tn
Khng gian tn (namespace) c s dng nhm cc lp, giao din, hm v hng nhm trnh ng khi s dng li m do trng tn
cc ngn ng khc:
.NET: namespace Java: package
Phn gii tn
Khi lp, giao din khng c vit vi tn y
Chng c hiu l thuc khng gian tn hin ti
V d phn gii tn
namespace ns1 { class A { private $var = 1; public function a() { echo "<br>ns1\A->var: $this->var"; } } } namespace ns2\ns3 { class A { private $var = 3; public function a() { echo "<br>ns3\A->var: $this->var"; } } } namespace ns2 { class A { private $var = 2; public function a() { echo "<br>ns2\A->var: $this->var"; } } $obj1 = new \ns1\A(); $obj2 = new A(); $obj3 = new ns3\A(); $obj1->a(); $obj2->a(); $obj3->a();
ns1\A->var: 1 ns2\A->var: 2 ns3\A->var: 3
Nhp v t b danh
khng phi vit tn y (di), PHP cho php nhp v t b danh cho khng gian tn, lp, v giao din use ns\subns\Classname; //sau ch cn s dng Classname thay cho tn y use ns\subns\Classname as Another; //sau s dng Another thay cho tn y use ns\subns\NSname; //sau s dng NSname thay cho tn y
L nh Thanh, Bi ging Lp trnh web.
X l ngoi l
Nm ngoi l
throw new Exception(M t ngoi l);
Bt ngoi l
try {
//m x l nghip v
}]* [finally {
M c chy bt k ngoi l xy ra hay khng
}]
V d
function inverse($x) { if (!$x) { throw new Exception('Division by zero.'); } else return 1/$x; }
try { echo inverse(5) . "\n"; echo inverse(0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; }
0.2 Caught exception: Division by zero. L nh Thanh, Bi ging Lp trnh web.
Cc bin dng sn
$GLOBALS Mng cc bin ton cc $_SERVER Mng cc bin my ch $_GET Mng cc bin GET $_POST Mng cc bin POST $_FILES Mng cc tp upload $_REQUEST Mng cc bin Request (c GET v POST) $_SESSION Mng cc bin phin $_ENV Mng cc bin mi trng $_COOKIE Mng cc bin Cookies
L nh Thanh, Bi ging Lp trnh web.
Cc hm khc
Cc hm t cookie, session, chuyn i biu din a ch ip, (xem cc bi sau v trong ti liu tham kho)
Tip theo