Professional Documents
Culture Documents
PHP Tiếng Việt
PHP Tiếng Việt
Tn ca ta v tn ca cng ty ta, v trn Windows NT/2000, c th ta mun tt c user truy cp vo Apache nh l mt dch v, hoc nu ta mun ci t chy khi ta chn Start Apache shortcut. Tn Server ca ta, tn Domain v ti khon qun tr ca ta. Th mc m ta mun ci t Apache (mc nh l C:\Program Files\Apache Group\Apache mc d ta c th thay i iu ny ti bt k th mc no ta thch) kiu c t. Tu chn "Complete" s ci t tt c mi th, bao gm m ngun nu ta download gi -with_src.msi . Chn ci t "Custom" nu ta chn khng ci t ti liu, hoc m ngun t gi.
Trong qu trnh ci t, Apache s cu hnh cc file trong th mc conf cho s la chn th mc ci t ca ta.Tuy nhin, nu c bt k mt file no trong th mc ny th chng cng khng b ghi . Thay vo , bn copy mi s c gn vi ui .default. Sau khi ci t Apache, ta s phi bin tp file cu hnh trong th mc conf, iu ny l bt buc. Cc file ny s c cu hnh trong qu trnh ci t chun b cho Apache c chy t th mc m n c ci t, vi cc ti liu c p ng trong th mc con htdocs.C rt nhiu cc tu chn s c thit lp trc khi ta thc s bt u s dng Apache.Tuy nhin, c th bt u mt cch nhanh chng, cc file s c thc hin nh khi c ci t.Nu ta mun r b Apache, cc file cu hnh s khng b b i. Ta phi xo cy th mc ("C:\Program Files\Apache Group" l mc nh) nu ta thy khng cn thit gi cc file cu hnh v cc file web ca ta.
Nh l mt "service" (ch c kim tra trn NT/2000 , nhng bn thc nghim cng c sn cho 95/98). y l tu chn tt nht nu ta mun Apache t ng khi ng khi my ca ta boot, v gi cho Apache lun chy khi ta log-off. T mt console window. y l tu chn tt nht cho ngi s dng trn Windows 95/98 .
Cc bc thc hin trc khi bt u Apache nh l mt dch v Windows chy Apache t mt ca s , chn thu chn "Start Apache as console app" t menu Start menu (trong Apache 1.3.4 v cc bn sm hn, tu chn ny c gi l "Apache Server"). iu ny s m ra mt ca s console v bt u Apache chy trong . Mn hnh ny vn s cn cho n khi ta dng Apache. dng Apache khi n ang chy, c th chn biu tng"Shutdown Apache console app" t menu Start(iu ny khnng c trong Apache 1.3.4 hoc cc bn sm hn, hoc c th dng cc lnh iu khin Apache trong mn hnh console. Trong cc phin bn Apache 1.3.13 v trc , ta c th g Ctrl+C hoc Ctrl+Break tt mn hnh Apache console.V trn Windows NT/2000 vi phin bn 1.3.13, Apache s dng nu ta chn 'Close' t menu h thng (bm vo biu tng trn gc trn tri ca mn hnh console) hoc bm vo nt (X) trn gc phi mn hnh console. Th Apache cho Windows Nu gp trc trc khi bt u khi ng Apache, hy theo cc bc di c lp vn . iu ny c ng dng nu ta bt u Apache vi shortcut "Start Apache as a console app" t menu Start v mn hnh console t nhin tt hoc nu ta gp trc trc khi khi ng Apache nh l mt dch v. Chy "Command Prompt" t Start Menu - Programs . Chuyn n th mc m ta ci Apache, nh lnh apache, v c thng bo li. Sau xem trc file error.log tm hiu cc l. Nu ta chp nhn cc mc nh khi ta co t Apache, cu lnh s l:
c: cd "\program files\apache group\apache" apache Wait for Apache to exit, or press Ctrl+C more <logs\error.log
Sau khi xem file error.log, ta c th thy c li l g v bit cch khc phc chng v th li ln na. Sau khi khi ng, Apache s chy (hoc trong mt mn hnh console window hoc l mt dch v) nu c listening ti cng 80 (Nu ta khng thay i Port, Listen hoc BindAddress ch dn trong cc file cu hnh). kt ni vo server v truy cp vo trang web mc nh, chy trnh duyt v nhp vo a ch URL nh sau:
http://localhost/
iu ny s phn hi li vi mt trang cho mng, v mt lin kt n trang sch hc Apache. Nu khng c g xy ra hoc c mt li xut hin, hy xem file error.log trong th mc logs. Nu my ca ta khng kt ni vo internet, ta phi nhp vo dng a ch URL nh sau:
http://127.0.0.1/
Mt khi cc ci t ang lm vic, ta s phi cu hnh chnh xc bng cch bin tp cc file trong th mc conf.
Bi v Apache khng th chia s cng mt cng vi mt ng dng TCP/IP khc, ta phi dng hoc d b cc dch v no trc. iu ny bao gm c cc web server khc v cc sn phm firewall nh Blackile.Nu ta ch c th chy Apache khi dng cc dch v ny, hy cu hnh li Apache hoc cc sn phm khc sao cho chng khng chung cng listen TCP/IP.C l ta phi chy dng lnh "netstat -an" xem cng no c s dng. 2.5_Cu hnh Apache trn Windows Apache c cu hnh bi cc file trong th mc conf . y cng l cc file c s dng cu hnh cho phin bn Unix nhng cng c mt s ch dn khc trn phin bn Apache cho Windows. Bt u cu hnh Apache server bng cch xem trc httpd.conf v cc li hng dn ca n. Mc d cc file access.conf v srm.conf u tn ti, y l cc file c thng khng c s dng bi hu ht cc nh qun tr , v bn cng khng thy nhng li hng dn y. httpd.conf cha ti liu tht tuyt vi, bng cch theo cc hng dn cu hnh mc nh c khuyn dng khi bt u vi Apache server. Bt u bng cch c cc ch thch ny hiu file cu hnh ,v thc hin mt s nh cc thay i,bt u Apache trong mt mn hnh console vi mt thay i. Nu bn gp phi li, tht d dng sao lu cu hnh nhng g lm lc cui cng. Bn s c mt tng tt hiu thay i no gy nn li cho server. Nhng iu khc nhau chnh trong Apache cho Windows l:
Bi v Apache cho Windows l a lung, n khng s dng mt tin trnh ring bit cho mt yu cu nh Apache trn Unix. Thay vo ch c 2 tin trnh ang chy: mt tin trnh cha v mt tin trnh con n ch cc yu cu. Trong tin trnh con mi yu cu c n ch bi mt lung ring bit. Bi vy,"cch thc"-cc li ch dn qun l l khc nhau: o MaxRequestsPerChild - Ging nh ch th Unix, n iu khin c bao nhiu yu cu m mt tin trnh s phc v trc khi tn ti. Tuy nhin, khng ging nh Unix, mt tin trnh s phc v tt c cc yu cu cng mt lc, khng ch mt, bi vy nu iu ny c lp, s c mt s ln c s dng. iu khuyn dng l mc nh, MaxRequestsPerChild 0, khng lm cho tin trnh kt thc mi mi. o ThreadsPerChild - Ch th ny l mi, v ch cho server bit c bao nhiu lung n s dng. y l con s ln nht cc kt ni m server c th n ch cng mt lc; phi chc chn v thit lp s ny ln cho trang ca bn nu bn c nhiu vic thnh cng. Gi tr mc nh khuyn l ThreadsPerChild 50. Cc ch th chp nhn tn file lm i s by gi phi dng tn file ca windows thay v nh unix trc y.Tuy nhin, bi v Apache s dng tn kiu cch Unix cc b, bn phi s dng du gch cho trc, khng phi l du gch cho sau. Cc tn ch ci ca a c th c dng, nu b b st, a vi kh nng thc thi ca Apache s c tha nhn. Apache cho Windows c kh nng load cc module trong thi gian chy m khng cn bin dch li server. Nu Apache c bin dch mt cch thng thng, n s ci t mt s cc module tu chn trong th mc \module. kch hot iu ny, hoc cc module khc, ch th LoadModule phi c dng. V d, kch hot module trng thi, ta lm nh sau ( thng tin thm v cc ch th kch hot trng thi trong file access.conf):
LoadModule status_module modules/mod_status.so
Thng tin v vic to cc module c kh nng ti cng c sn. Ch mt vi module ca cc hng th 3 c th c pht hnh vi cc kiu cch t tn c,
ApacheModuleFoo.dll. Thng xuyn thit lp lnh LoadModule theo hng dn trong cc ti liu ca cc hng th 3.
Apache cho Windows phin bn 1.3 c thc hin trong cc cuc gi ng b. iu ny gy ra mt vn to ln cho cc tc CGI , ngi s khng thy cc kt qu khng c m c gi trc tip ti trnh duyt. iu ny khng c m t cho CGI trong Apache, nhng n c tc ng hiu qu vi cng Windows. Apache 2.0 c ci tin thc hin cc tnh trng khng ng b c mong ch, v chng ta hi vng tm ra rng s thc thi trong Win NT/2000 cho php CGI c i x nh ti liu c cung cp. Apache cng c th np cc phn m rng ca ISAPI (v d: Internet Server Applications), nh th chng c dng bi Microsoft's IIS, v cc server Windows khc. Ch rng Apache khng np cc b lc ISAPI.
Chy Apache trong mt Console Window Biu tng menu Start v trnh qun l dch v NT c th cung cp mt giao din n gin cho vic qun tr Apache. Nhng mt s trng hp th d dng hn khi lm vic t dng lnh. Khi lm vic vi Apache ta phi bit bng cch no n s tm cc file cu hnh. Ta c th ch ra mt file cu hnh c th trn dng lnh qua hai cch:
Trong cc trng hp ny, ServerRoot tht s s c thit lp trong file cu hnh. Nu ta khng ch ra mt tn file cu hnh vi -f hoc -n, Apache s s dng tn file c bin dch trong server, thng thng l "conf/httpd.conf". Gi Apache vi chuyn dch V s hin th gi tr ny c gn nhn l SERVER_CONFIG_FILE. Apache tip n s nh r ServerRoot ca n bng cch c gng thc hin theo trnh t nh sau:
Mt ch th ServerRoot thng qua mt chuyn tc -C . Chuyn tc -d trn dng lnh. Th mc hin ti ang lm vic. Mt u vo ng k , c to nu bn thc hin ci t nh phn. Server root c bin dch trong server.
Server root c bin dch trong server thng thng l "/apache". Thc hin apache vi chuyn tc -V s hin th gi tr ny c gn nhn l HTTPD_ROOT. Khi c thc hin t menu start, Apache thng thng b qua cc i s, bi vy s dng u vo ni ng k l k thut c yu thch hn cho console Apache. Trong khi ci t nh phn, mt kho ng k s c ci t, v d:
HKEY_LOCAL_MACHINE\Software\Apache Group\Apache\1.3.13\ServerRoot
Kho ny c bin dch trong server v c th cho php bn kim tra cc phin bn mi m khng gy nn hu qu cho phin bn hin ti. D nhin ta phi cn thn khng ci t phin bn mi ln trn phin bn c trong h thng file.
Nu bn khng thc hin ci t nh phn khi Apache s trong mt s tnh hung gy li v vic thiu kho ng k. Cnh bo ny c th b qua nu c th tm thy cc file cu hnh ca n. Gi tr ca kho ny l th mc "ServerRoot" , cha th mc conf . Khi Apache bt u, n s c file httpd.conf t th mc ny. Nu file ny cha mt ch th ServerRoot khc vi th mc m c kho trc , Apache s qun kho ng k v s dng th mc t file cu hnh. Nu bn copy th mc Apache hoc cc file cu hnh ti mt v tr mi iu quan trng l ta cp nht th mc ServerRoot trong file httpd.conf ti v tr mi. chy Apache t dng lnh nh l mt ng dng console, s dng lnh sau:
apache
Apache s thc thi v s cn chy cho n khi ta nhn phm ctrl-C. iu khin Apache trong mt mn hnh Console Ta c th ch cho Apache trong khi ang chy phi dng bng cch m mt mn hnh console khc v chy lnh:
apache -k shutdown
Ch : Tu chn ny ch c th c hiu lc vi Apache 1.3.3 v sau ny. Vi cc phin bn trc, bn phi dng ctrl-C trong mn hnh console tt server. T phin bn 1.3.3 ti 1.3.12, iu ny s thay cho vic nhn ctrol-c trong mt mn hnh console Apache, bi v n cho php Apache kt thc bt k cc giao dch hin thi v thu gn nhanh chng. Ti phin bn 1.3.13 khi nhn Control-C trong mn hnh ang chy s lm sch Apache kh tt, v bn c th dng k stop nh l mt b danh cho k shutdown .Cc phin bn trc khng hiu k stop. Ta cng c th ch cho Apache khi ng li. iu ny lm cho n c li cc file cu hnh. Bt k giao dch no trong pht trin u c php hon thin m khng cn ngt qung. khi ng li Apache, chy:
apache -k restart
Ch : Tu chn ny ch c c trong Apache 1.3.3 v sau ny. Vi cc phin bn trc, ta cn phi dng Control-C trong mn hnh Apache console tt server, v khi ng li vi lnh ca Apache. Chc nng khc rt hu dng l tu chn kim tra cc file cu hnh . kim tra cc file cu hnh , chy:
apache -t
y l s thay i sau ny c bit hu dng vi cc file cu hnh trong khi Apache thm ch ang chy. Ta c th thc hin mt s thay i, khng nh l c php lnh "apache -t" l chnh xc, k n khi ng li Apache vi "apache -k restart". Apache s c li cc file cu hnh, cho php bt k giao dch no trong s tin trin hon thnh m khng phi ngt qung.Bt k yu cu mi no cng s c phc v s dng cu hnh mi. Ch : Vi nhng ngi quen thuc vi Apache cho Unix cc lnh ny cung cp mt s tng ng vi Windows kill -TERM pid v kill -USR1 pid. Tu chn dng lnh c dng, -k, c chn nh l mt nhc nh lnh "kill" c s dng trong Unix.
</html> Ch v s khc nhau ca mt script c vit bng cc ngn ng khc nhau ging nh perl hoc C thay v vit mt chng trnh vi rt nhiu lnh xut ra HTML, ta vit mt script HTML vi mt s m nhng thc hin mt cng vic g ( trong trng hp ny, a ra mt s vn bn) . M PHP c ng kn trong cc tag bt u v cc tag kt thc c bit cho php ta nhy vo v nhy ra ch PHP. iu nhn ra PHP t nhng g ging Javascript bn pha Client l m chng trnh c thc hin bn pha server. Nu ta c mt script ging nh trn bn pha server ca ta, client s nhn cc kt qu t vic chy script , m khng cn cch no xc nh iu g bn di m lnh. Thm ch ta c th cu hnh webserver ca ta x l tt c cc file HTML ca ta vi PHP, v v vy khng cn cch no m nhng ngi s dng c th bit iu g ta ln k hoch.
2_PHP c th lm c nhng g ?
Ti hu ht cc mc c bn nht, PHP c th lm bt k iu g m cc chng trnh CGI khc c th lm, v d nh tp hp cc dng d liu, sinh ra ni dung cc trang web ng, hoc gi v nhn cc cookie. C l c im mnh nht v thun tin nht trong PHP l n h tr kh nng rng ln cc c s d liu. Vit mt trang web c tng tc c s d liu tr nn n gin mt cch ng kinh ngc. Cc c s dliu di y hin ti c 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 PHP cng h tr cho vic ni chuyn vi cc dch v khc s dng cc thao tc nh IMAP,SNMP,NNTP,POP3,HTTP v v s giao thc khc. Ta cng c th m cc socket mng mi v tng tc s dng cc giao thc khc.
10
Cc bc di y s thao tc trn tt c cc trnh ci t trc khi c cc ch dn r rng vi server. Gii nn file c ti vo mt th mc no . C:\PHP\ l tt nht bt u. Bn cn phi chc rng cc file dlls m php dng c th c tm th y mt cch d dng. Cc dlls r rng s lin quan n loi webserver no ta dng v ni no ta mun chy php nh l mt cgi hoc l mt module server. Php4ts.dll thng xuyn c s dng. Nu ta ang dng mt server module ( v d isapi hoc apache) khi ta cn cc file dlls lin quan t th mc sapi . Nu ta ang s dng cc php dll m rng khi ta s cn chng . chc rng cc dll c th c tm thy, ta c th copy chng vo th mc h thng (winnt/system hoc windows/system) hoc bn phi chc rng chng cha trong cng mt th mc vi th mc c cha php thc thi hoc dll webserver ca ta (v d php.exe, php4apache.dll). Chp file php.ini vo th mc Windows hoc Winnt, winnt4. Bin tp file php.ini : Ta cn phi thay i thit lp 'extension_dir' ti th mc ci t php hoc ni ta t cc file 'php_*.dll', v d c:\php t 'doc_root' ch ti webservers document_root. V d: c:\apache\htdocs hoc c:\webroot Chn cc m rng ta mun c ti khi php,ch mt s m rng c to ra trong cc phin bn ca Windows. Ta c th b cc du ch thch trn cc dng nh 'extension=php_*.dll' trong php.ini ti cc m rng. Ch rng th mc mibs c cung cp vi pht hnh ca Windows cha cc file h tr cho SNMP. Th mc ny s c chuyn ti DRIVE:\usr\mibs (DRIVE l a ni ta ci PHP) 4.3_Ci t cc chc nng m rng trn Windows Sau khi ci t PHP v mt webserver trn windows, ta c l cng mun ci t thm mt s m rng thm cc chc nng. Bng di y m t mt vi chc nng c sn. Ta cng c th thm cc chc nng bng cch b cc du ch thch ng trc cc file php_*.dll trong file php.ini. Ch : Mt vi m rng dll yu cu theo m rng ca PHP , ta nn copy cc file dll t th mc dlls trong gi pht hnh vo th mc windows/system hoc winnt/system32. Nu ta ang c cc file dll ny ri, ta ch ghi chng trong trng hp mt vn g lm vic khng chnh xc. Trc khi ghi chng, tt nht l ta sao lu chng hoc chuyn chng vo mt th mc khc ch phng mt ci g li. Download phin bn sau nht ca Microsoft Data Access Components (MDAC) Cho nn ca bn, c bit vi ngi dng Microsoft Windows 9x/NT4. MDAC c sn ti a ch http://www.microsoft.com/data/ . Cng cn ch rng mt s m rng i hi cc th vin ca cc hng th 3, v d php_oci8.dll cn cc th vin client Oracle 8 c ci t trn h thng ca ta. iu ny khng c cung cp vi PHP. Ch : Cc dlls cho phn m rng ca PHP c bt u bng tin t php_ iu ny trnh s ln xn gia cc m rng ca PHP v cc th vin ca cc hng th 3 cung cp. Ch : Trong PHP 4.0.5 h tr MySQL, ODBC, FTP, Calendar, BCMath, COM, PCRE, Session, WDDX v XML c kt hp vo.
11
12
Action application/x-httpd-php "/php/php.exe" phng nga xa, ta nn thay /php ScriptAlias thnh mt ci g ngu nhin hn, ngn chn nh phn c gi trc tip, nh l mt s bo mt ri ro. Nh rng khi ta hon thnh vic khi ng li server, v d, NET STOP APACHE tip n l NET START APACHE s dng chc nng m ngun c lm sng, thm dng sau vo file apache httpd.conf : AddType application/x-httpd-php-source .phps Ch , iu ny ch lm vic khi ta ci t php l module sapi. Nu bn thch dng c im ny vi cgi nh phn, hy to mt file mi v dng hm show_source("path/to/original_file.php"); 5.4_Gch tri hay gch phi trong ng dn? Trn Win-Apache, tn ng dn c th gm c gch tri v gch phi. V d: LoadModule php4_module C:\php\sapi\php4apache.dll lm vic tt nh: LoadModule php4_module C:/php/sapi/php4apache.dll Ta cng c th trn ln hai kiu gch: LoadModule php4_module C:\php/sapi\php4apache.dll
13
Cch th nht ch c th c thc hin c nu cc tag ngn c lm cho c th. iu ny c th c thc hin bng cch cho php cu hnh short open tag thit lp trong file cu hnh ca PHP, hoc bng cch bin dch PHP vi tu chn enable-short-tags cu hnh. Cch th hai l phng php thng thng c yu thch hn, l n cho php th h tip theo XHTML c th d dng c thc thi vi PHP. Cch th ba l ch ra r PHP l mt ngn ng script. Cch th t th ch c php nu cc tag kiu ASP c php s dng cc tag asp thit lp cu hnh. Ch : H tr cho cc tag ASP c thm vo trong phin bn 3.0.4 Tag ng cho khi s bao gm ng thng mi ko di ngay lp tc nu n c hin th.
2_Ngn cch cc ch dn
Cc ch dn c ngn cch ging nh trong ngn ng C hoc Perl-kt thc mi cu lnh l mt du chm phy. Tag ng (?>) cng ng ti cui ca dng lnh, bi vy sau y l cc cu lnh tng ng:
<?php echo "This is a test"; ?> <?php echo "This is a test" ?>
14
3_Cc li ch thch
PHP h tr cc ki ch gii nh ca C,C++ v shell Unix . V d:
<?php echo "This is a test"; // This is a one-line c++ style comment /* This is a multi line comment yet another line of comment */ echo "This is yet another test"; echo "One Final Test"; # This is shell-style style comment ?>
Cc kiu ch gii one line tht s ch ch gii ti cui dng hoc khi hin ti ca m lnh PHP, c a ln trc.
<h1>This is an <?php # echo "simple";?> example.</h1> <p>The header above will say 'This is an example'.
?>
Kch c ca mt s nguyn ph thuc vo nn, mc d mt gi tr ln nht khong 2 t cng l mt gi tr thng thng ( l 32 bit c nh tr).
15
iu ny c lin quan n mt s tht l khng th chnh xc trong mt s cc biu thc phn s trong k hiu thp phn vi mt s hn ch v cc s. V d: 1/3 trong dng thp phn tr thnh 0.333333333... Bi vy khng bao gi c gi tr chnh xc cho cc kt qu l mt s ng v khng bao gi so snh cc s tr ng vi s ngang bng. Nu ta tht s mun s ng n cao hn, ta s dng cc hm ton hc chuyn bit hoc thay v cc hm gmp.
3_Cc chui
Cc chui c th c ch ra bng cch dng mt trong hai tp phn nh. Nu chui c ng li trong du nhy kp(), s lng bn trong chui s c m rng ra (ph thuc vo mt s hn ch ca t loi). Cng nh C v Perl, du x ngc (\) c th c s dng trong vic ch ra cc k t c bit: Th t ngha \n xung dng (LF hoc 0x0A trong ASCII) \r tr v u dng (CR hoc 0x0D trong ASCII) \t Tab ngang (HT hoc 0x09 trong ASCII) \\ x ngc \$ du la \" Nhy kp th t ca cc k t ph hp vi biu thc thng thng l mt k t trong h c \[0-7]{1,3} s 8 th t ca cc k t ph hp vi biu thc thng thng l mt k t trong h c \x[0-9A-Fa-f]{1,2} s 16 Nu ta c gng a ra bt k mt k t no khc , c du x tri v k t s l u ra. Trong PHP3, mt li cnh bo s c pht ra ti mc E_NOTICE khi iu ny xy ra. Trong PHP4, khng mt li cnh bo no c a ra. Cch th hai a ra mt chui s dng du nhy n( ).Khi mt chui c bao bi du nhy n, ch c nhng b qua s c hiu l \\ v \.iu ny nhm mc ch to s thun li, bi vy ta c th dng du nhy n hoc du x ngc trong mt chui trch dn n. S lng s khng c tri rng ra trong mt chui trch dn n. Cch khc nh gii cc chui l s dng c php (<<<). Trc ht s cung cp mt nh danh sau khi thc hin <<<, tip theo l chui, v sau l nh danh ging ban u ng ch thch. nh danh ng phi bt u trong ct u tin ca dng. Cng vy, nh danh c s dng phi theo sau cc quy tc t tn ging nhau nh l cc nhn khc trong PHP:N ch cha cc k t ch v s v cc du gch di, v phi bt u vi k t khng phi l s hoc gch di.
16
<?php $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD; /* More complex example, with variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MyName'; echo <<<EOT My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ?>
Cc chui Strings may be concatenated using the '.' (dot) operator. Note that the '+' (addition) operator will not work for this. Please see String operators for more information. Characters within strings may be accessed by treating the string as a numerically-indexed array of characters, using C-like syntax. See below for examples. V d. Vi v d v chui
17
<?php /* Assigning a string. */ $str = "This is a string"; /* Appending to it. */ $str = $str . " with some more text"; /* Another way to append, includes an escaped newline. */ $str .= " and a newline at the end.\n"; /* This string will end up being '<p>Number: 9</p>' */ $num = 9; $str = "<p>Number: $num</p>"; /* This one will be '<p>Number: $num</p>' */ $num = 9; $str = '<p>Number: $num</p>'; /* Get the first character of a string */ $str = 'This is a test.'; $first = $str[0]; /* Get the last character of a string. */ $str = 'This is still a test.'; $last = $str[strlen($str)-1]; ?>
18
S chuyn i chui
Khi mt chui c xc nh l mt gi tr s, gi tr kt qu v kiu c m t nh sau: Chui s c lng nh l mt s double nu n cha bt k mt trong s cc k t .,e, or E. Trong trng hp khc, n s c lng l mt s nguyn. Gi tr c xc nh bi phn ban u ca chui. Nu chui bt u vi s liu l s, n s l gi tr c dng. Trong trng hp khc, gi tr s l 0 . S liu dng s l mt du hiu tu chn, c theo sau bi mt hoc nhiu con s( tu chn cha mt du chm thp phn), c theo sau bi mt tu chn s m. S m l mt k te hoc E ctheo sau bi mt hoc nhiu s. Khi biu thc u tin l mt chui, dng cu bin s ph thuc vo biu thc th hai.
$foo = 1 + "10.5"; // $foo is double (11.5) $foo = 1 + "-1.3e3"; // $foo is double (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 1 + "10 Little Piggies"; // $foo is integer (11) $foo = "10.0 pigs " + 1; // $foo is integer (11)
$foo = "10.0 pigs " + 1.0; // $foo is double (11) c thm thng tin v s chuyn i ny, sem thm trang Unix manual cho strod(3). Nu bn mun kim tra bt k mt v d no trong phn ny, bn c th ct v dn cc v d v chn dng sau xem iu g s xy ra: echo "\$foo==$foo; type is " . gettype ($foo) . "<br>\n";
4_Cc mng
Cc mng tht s va ging cc bng hn tp ( Cc mng c lin kt vi nhau) va ging cc mng ch s( cc vector). 4.1_Mng mt chiu PHP h tr c mng v hng v mng c hng. Trong thc t, khng c g khc bit gia chng. Ta c th to mt mng s dng cc hm list() hoc array(), hoc ta c th thit lp cc gi tr ca cc phn t ca mng mt cch r rng.
$a[0] = "abc"; $a[1] = "def";
$b["foo"] = 13; Ta cng c th to mt mng bng cch n gin l thm cc gi tr vo mng. Khi ta gn mt gi tr vo mt bin mng dng du ngoc n trng, gi tr s c thm vo cui mng.
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world" Cc mng c th c sp xp bng cch dng cc hm asort() , arsort() , ksort() , sort() , uasort() , usort() , v uksort(). Ta c th m s cc phn t trong mt mng bng cch dng hm count(). Ta c th duyt qua mt mng bng cch dng cc hm next() v prev(). Mt cch thng thng khc duyt qua cc phn t ca mng l dng hm each(). 4.2_Cc mng a chiu Cc mng nhiu chiu tht s kh n gin. Cho mi chiu ca mng, ta c th thm gi tr khc[kho] vo cui:
$a[1] = $f; $a["foo"] = $f; # one dimensional examples
19
# two dimensional # (you can mix numeric and associative indices) # (you can mix numeric and associative indices)
$a["foo"][4]["bar"][0] = $f; # four dimensional! Trong PHP 3 khng cho php tham chiu cc mng a chiu trc tip trong cc chui. V d sau y s khng cho kt qu mong mun: $a[3]['bar'] = 'Bob'; echo "This won't work: $a[3][bar]"; Trong PHP 3, trn s cho u ra l: This won't work: Array[bar].
Ta c th lm li nh sau:
$a[3]['bar'] = 'Bob';
echo "This will work: " . $a[3][bar]; Tuy nhin, trong PHP 4, tt c cc vn c th c dng mo bng cch ng tham chiu mng( bn trong chui) trong du ngoc nhn:
$a[3]['bar'] = 'Bob'; echo "This will work: {$a[3][bar]}";
Ta c th in y cc mng a chiu bng nhiu cch, nhng mt iu phc tp hiu l bng cch no dng lnh array() cho cc mng kt hp. C 2 onm in y mng mt chiu trong cng mt cch:
# Example 1: $a["color"]= "red"; $a["taste"] = "sweet"; $a["shape"] = "round"; $a["name"] = "apple"; $a[3] = 4; # Example 2: $a = array( "color" => "red", "taste" => "sweet", "shape" => "round", "name" => "apple", 3 => 4
20
5_Cc i tng
Khi to i tng khi to mt i tng, ta dng cu lnh new a i tng ti mt bin.
<?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo();
Nu mun kim tra bt k cc v d no trong mc ny, ta c th ct v dn cc v d v chn cc dng di y ta c th t kim tra. echo "\$foo==$foo; type is " . gettype ($foo) . "<br>\n"; Ch : Cch thc chuyn i t ng sang mng hin cha c xc n r.
$a = 1; // $a is an integer
21
Trong khi v d trn c l xem nh n cho kt qu r rng trong $A tr thnh mt mng, phn t u tin ca n l f, c th xem nh sau:
$a = "1"; // $a is a string
$a[0] = "f"; // What about string offsets? What happens? T khi PHP h tr ch mc trong cc chu da trn cc khong trng s dng chung c php nh ch s mng, v d trn ch ra mt vn : c th $a tr thnh mt mng vi phn t u tin ca n l f , hoc c l f tr thnh k t u tin ca chui $a ? i vi PHP 3.0.12 v PHP 4.0b3-RC4, kt qu ca vic t ng chuyn i kiu c xem nh khng c xc nh.
p kiu
p kiu trong PHP lm vic ging nh trong C: Tn ca kiu mong i c vit trong cc du ngoc trc bin m n s c p kiu.
$foo = 10; // $foo is an integer
(int), (integer) p sang s nguyn (real), (double), (float) p sang s double (string) p sang kiu chui (array) p sang kiu mng (object) p sang kiu i tng
Ch rng cc tab v cc khong trng cng c php trong cc du ngoc, bi vy cc biu thc di y cho kt qu tng t:
$foo = (int) $bar;
$foo = ( int ) $bar; N c th khng c tht s r rng chnh xc rng iu g s xy ra khi p kiu gia cc kiu no . V d sau s ch ra iu . Khi p kiu t mt bin kiu v hng hoc mt bin kiu chui sang mt mng, bin s tr thnh phn t u tin ca mng:
$var = 'ciao'; $arr = (array) $var;
echo $arr[0]; // outputs 'ciao' Khi p kiu t mt bin v hng hoc mt bin chui sang mt i tng, bin s tr thnh mt thuc tnh ca i tng, tn ca thuc tnh s l v hng
$var = 'ciao'; $obj = (object) $var;
22
$4site = 'not yet'; // invalid; starts with a number $_4site = 'not yet'; // valid; starts with an underscore $tyte = 'mansikka'; // valid; '' is ASCII 228.
Trong PHP3 cc bin lun lun c gn bi cc gi tr . iu c ngha l khi ta gn mt biu thc cho mt bin th ton b gi tr ca biu thc ngun s c sao chp n bin ch . iu ny c ngha l ,v d nh sau khi gn mt gi tr ca mt bin cho bin kia, s thay i ca mt trong s nhng bin ny s khng nh hng n bin kia . bit thm thng tin v s gn tr ny hy xem mc Expressions PHP4 cung cp mt cch khc gn cc gi tr cho cc bin gn bng cch tham chiu . iu ny c ngha l bin mi d dng tham chiu (hay ni cch khc ltr thnh mt bit hiu hoc tr ti) bin gc .Nhng s thay i ny ca bin mi lm nh hng n bin gc v ngc li . iu ny cng c ngha l s khng c mt s sao chp no c ,do vy s gn tr xy ra rt nhanh .Tuy nhin bt c s tng tc no cng c th c lu l ch trong nhng vng lp kn hoc khi gn nhng mng ln cho cc i tng. gn tr bng cch tham chiu ,mt cch n gin hy mt du & trc bin m ang c gn (bin ngun ) V d on m sau y cho xut hin chui My name is Bob hai ln :
<?php $foo = 'Bob'; // Assign the value 'Bob' to $foo $bar = &$foo; // Reference $foo via $bar. $bar = "My name is $bar"; // Alter $bar... echo $foo; // $foo is altered too. echo $bar; ?>
23
$foo = 25; $bar = &$foo; // This is a valid assignment. $bar = &(24 * 7); // Invalid; references an unnamed expression. function test() { return 25; } $bar = &test(); // Invalid. ?>
Tn ca server host di script hin ti ang thc hin. Nu script ang chy trn mt host o, iu ny s l gi tr c nh ngha cho host o .
SERVER_SOFWARE
Tn v xem li cc thng tin giao thc thng qua trang web c yu cu, v d HTTP/1.0;
REQUEST_METHOD
Th mc ti liu gc di script hin ti ang chy, c nh ngha trong file cu hnh ca server.
HTTP_ACCEPT
24
HTTP_ACCEPT_ENCODING
Cc ni dung ca Host : Phn u ca trang web hin ti, nu c n. HTTP_REFERER i ch ca trang c quy cho b trnh duyt ti trang hin ti. iu ny c thit lp bi b trnh duyt ca ngi s dng, khng pah tt c cc trnh duyt s c thit lp h th ny.
HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SCRIPT_FILENAME SERVER_ADMIN
SERVER_PORT
SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI
Ni dung ca cc bin ny ta c th tra cu trong PHP Manual. 2.2_Cc bin mi trng Cc bin mi trng ny c php vo trong vng t tn ton cc ca PHP t mi trng di PHP ang chy. C rt nhiu th c cung cp bi nn shell ni m PHP ang chy v cc h thng khc nhau cng ang chy trn cc shell khc nhau,mt danh sch cui cng l khng th . Cc bin mi trng khc bao gm cc bin CGI, c t ti m khng ch n vic PHP ang chy nh l mt module hoc b x l CGI. Cc bin PHP Cc bin c to bi chnh bn thn PHP. Cc bin $HTTP_*_VARS ch c sn nu cu hnh track_vars c bt nn. Khi c bt nn, cc bin thng thng c xc lp, ngay c khi chng l cc mng trng. iu ny ngn nga nhng ngi c c mun la cc bin ny. Ch : Ging nh PHP 4.0.3, track_vars lun lun c m, mc cho vic thit lp file cu hnh . Nu nh hng register_globals c thit lp, khi cc bin ny cng s c to sn trong phm vi ton cc ca script, v d, mt vi t cc mng $HTTP_*_VARS. Chc nng ny s c s dng trong trng hp cn thn, v c tt i nu khng cn thit; Trong khi cc bin $HTTP_*_VARS c bo v, cc bin ton cc trng tng ng c th c ghi bi d liu nhp ca ngi s dng, c l v mc ch him c. Nu ta khng th tt register_globals, ta phi thc hin cc bc no l cn thit m bo d liu ta ang s dng l an ton. Argv Mng cc i s c gi ti script. Khi script c chy trn dng lnh, iu ny a ra kiu mu C truy cp vo cc tham s dng lnh. Khi c gi thng qua phng thc GET, iu ny s cha cc chui truy vn. Argc
25
Cha mt s lng cc tham s dng lnh c gi ti script( nu c chy trn dng lnh).
PHP_SELF HTTP_COOKIE_VARS HTTP_GET_VARS HTTP_POST_VARS HTTP_POST_FILES HTTP_ENV_VARS
3_Phm vi ca bin
Phm vi ca bin l ng cnh trong n c nh ngha. Cho hu ht cc phn ton b cc bin PHP ch c mt phm vi n. Phm vi n ny bao gm m rng v cc file c yu cu , v d: $a = 1; include "b.inc"; y l bin $a s c sn trong script included b.inc. Tuy nhin, trong cc hm nh ngha ca ngi s dng mt hm phm vi cc b c gii thiu. Bt k bin no c dng trong mt hm th c mc nh gii hn ti hm phm vi cc b. v d:
$a = 1; /* global scope */ Function Test () { echo $a; /* reference to local scope variable */ } Test ();
Script ny s khng to ra bt k u ra no bi v c php hin th c gn cho mt phin bn bin $a cc b, v n khng c gn tr trong phm vi ny. Ta c th ch rng y l mt iu khc bit nh t ngn ng C trong cc bin ton cc trong C c t ng gn tr ti cc hm nu khng c t ng ho vic ghi bi mt nh ngha cc b. iu ny c th dn n mt vi vn trong mi ngi c th tnh c thay i mt bin ton cc. Trong PHP , cc bin ton cc phi c khai bo tng th bn trong mt hm nu chng chun b c dng trong hm . V d:
$a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;
script trn s cho u ra l 3. Bng cch khai bo bin tng th $a v $b bn trong hm, ton b cc tham chiu n cc bin s c gn cho phin bn cc b. Khng c mt gii hn trong s lng cc bin ton cc m c th c thao tc bi mt hm. Cch th hai truy cp cc bin t phm vi ton cc l bng cch s dng im c bit ca PHP - nh ngha mng $GLOBALS. V d trc c th c vit l nh sau:
$a = 1; $b = 2; Function Sum () {
26
Mng $GLOBALS l mt mng lin kt vi tn bin cc b c kho v cc ni dung ca bin c gi tr ca phn t ca mng. Mt c im quan trng khc ca phm vi bin l bin tnh. Mt bin tnh ch tn ti trong mt hm phm vi cc b, nhng n khng lm mt gi tr ca n khi chng trnh thc hin vic thot khi phm vi ny. Ging nh v d di y:
Function Test () { $a = 0; echo $a; $a++; }
Hm ny kh v ch khi mi ln n c gi n thit lp $a gi tr 0 v in 0. $a++ tng ln mt n v cho bin $a mi khi hm c gi. to mt hm m hu dng m khng b mt gi tr hin ti, bin $a c khai bo tnh:
Function Test () { static $a = 0; echo $a; $a++; }
By gi mi khi hm Test()c gi n s in gi tr ca bin $a v tng gi tr ca n. Cc bin tnh cng cung cp mt cch c lin quan n cc hm qui. Mt hm qui l hm m n gi chnh bn thn n. Phi cn thn khi vit mt hm qui bi v n c th to mt li gi qui v hn nh. Ta phi chn chn rng phi c mt cch hp l kt thc li gi qui. V d sau hm s c gi qui m n 10, s dng bin tnh $count bit khi kt thc.
Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; }
Mt bin c th thay i ly gi tr ca mt bin v xem nh l tn ca mt bin .Trong v d trn, hello, c th c s dng nh l tn ca mt bin bng cch s dng hai du $, v d:
$$a = "world";
Ti im ny hai bin c nh ngha v c lu tr trong cy c php PHP: $a vi ni dung hello v $hello vi ni dung world. Bi vy, cu lnh sau:
echo "$a ${$a}";
27
Trong trng hp s dng cc bin c th thay i vi cc mng, ta phi gii quyt mt vn m h. l, nu ta vit $$a[1] tip theo c php cn bit nu ta c nh dng $a[1] nh l mt bin, hoc nu ta mun $$a nh l bin v tip n [1] ch s t bin . C php gii quyt iu mp m ny l: ${a[1] } trong trng hp th nht v ${$a}[1] cho trng hp th hai.
Khi form trn c trnh, gi tr t u vo text s c c hiu lc trong $HTTP_POST_VARS[username]. Nu nh hng cu hnh register_globals c thit lp l on, khi bin cng s c hiu lc nh $username trong phm vi ton cc. PHP cng hiu cc mng trong ng cnh ca cc bin form.Ta c th, v d, nhm cc bin lin quan vi nhau, hoc s dng chc nng ny nhn cc gi tr t nhiu la chn u vo: V d: cc bin form phc tp hn
<form action="array.php" method="post"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness <option value="stuttgarter">Stuttgarter Schwabenbru </select> <input type="submit"> </form>
Trong PHP3, cch dng bin form mng c gii hn ti cc mng mt chiu n. Trong PHP 4, khng c mt gii hn no c p dng. 5.2_Cc tn bin IMAGE SUBMIT Khi trnh mt form, c th s dng mt hnh nh thay v nt submit chun vi mt tag nh sau:
<input type=image src="image.gif" name="sub">
Khi ngi s dng click vo mt ni no trong hnh nh, form km theo s c chuyn ti server vi hai bin thm vo, sub_x v sub_y. Cc bin ny cha cc toa ca ngi dng click vo trong hnh nh. Kinh nghim c th cho ta thy rng cc tn bin tht s c gi ti bi trnh duyt cha mt du chm cu cn hn l mt du gch di chn, nhng PHP t ng chuyn du chm cu thnh du gch di. 5.3_HTTP Cookies PHP h tr HTTP cookies mt cch trong sut nh c nh ngha bi Netscapes Spec. Cookies l mt k xo cho vic lu tr d liu trong cc trnh duyt t xa v theo theo
28
di hoc nhn bit cc ngi s dng tr v. Ta c th thit lp cc cookies bng cch dng hm SetCookies(). Cc cookies l mt phn ca phn u HTTP, bi vy hm SetCookie phi c gi trc bt k u ra c gi ti trnh duyt. y cng l gii hn nh l i vi hm Header(). Bt k cookies no c gi ta t client s ct ng tr v mt bin PHP ging nh l phng thc GET v POST d liu. Nu ta mun gn nhiu gi tr ti mt cookie n, ch cn thm [ ] ti tn cookie. V d:
SetCookie ("MyCookie[]", "Testing", time()+3600);
Ch rng mt cookie s thay th mt cookie trc bi tn ging nh trong trnh duyt ca ta nu ng dn hoc domain l khng khc nhau. Bi vy, i vi ng dng xe cha hng ta c l cn phi gi mt quy tnh tin v cho qua v pha ny. V d:
$Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600);
5.3_Cc bin mi trng PHP to cc bin mi trgn mt cch t ng c sn nh l cc bin PHP thng thng.
echo $HOME; /* Shows the HOME environment variable, if set. */
T khi thng tin c nhp vo thng qua thng qua cc c ch GET,POST v Cookie cng to cc bin PHP mt cch t ng, i khi n cng tt nht cho vic c mt bin t mi trng trong khi chc chn rng ta ang ly phin bn ng. Hm getenv() c th c dng cho trgn hp ny. Ta cng c th thit lp mt bin mi trng vi hm putenv(). 5.4_Cc im trong cc tn bin thay th Thng thng, PHP khng thc hin thay i cc tn ca cc bin khi chng c a qua trong mt script. Tuy nhin, phi ch rng du chm khng phi l mt k t ng trong mt tn bin PHP. Nguyn nhn ta c th xem nh sau:
$varname.ext; /* invalid variable name */
By gi c php phn tch ta thy l mt bin c nh tn l $varname, c theo sau bi mt chui cc thao tc lin tip ging nhau, c theo sau bi chui trng. C th thy rng iu ny khng cho kt qu nh mong i. L do ca iu ny l , iu quan trng cn ch rng PHP s thay th cc du chm trong cc bin mi n bng cc du gch di mt cch t ng. 5.5_Xc nh cc kiu bin Bi v PHP xc nh cc kiu ca cc bin v chuyn i chng (mt cch thng thng) l cn thit, n khng thng xuyn ch ra mt cch rnh mch kiu g ca mt bin a ra ti bt k mt thi im no. PHP bao gm mt vi hm ch ra kiu ca mt bin. Chng l cc hm gettype(),is_long(),is_double(),is_string(),is_array(),is_object().
IV_CC HNG S
PHP nh ngha mt s hng s v cung cp mt c ch cho vic nh ngha nhiu hn ti thi gian chy. Cc hng s cng kh ging cc bin s, cc hng phi c nh ngha bng vic s dng hm define(), v chng khng th c nh ngha li sau ny ti gi tr khc. Cc hng c tin nh ngha ( lun lun c hiu lc) l:
_FILE_
29
Tn ca file script c tch ngay tc th. Nu c dng trong mt file m c bao gm hoc c i hi, khi tn ca file bao gm c cn c vo, v khng cng tn vi tn ca file ngun. _LINE_ S lng dng trong file script hin ti ang c tch ra. Nu c dng trong mt file m c bao gm hoc c yu cu, khi v tr ca fie bao gm c cn c vo.
PHP_VERSION
Mt gi tr thc t
FALSE
Mt gi tr sai
E_ERRO
Th hin mt iu kin m PHP bit mt iu g b sai, nhng s khng tip tc c bng bt k cch no, cc s vic ny c th c bt bi chnh bn thn script. Mt vi bin mi trng khc ta c th tra trong PHP Manual nh:
E_PARSE E_NOTICE E_ALL
30
Cho rng bn bit qua v khi nim ca cc hm, bn s cho rng khi g $c=foo() th cng ging nh vit $c=5, v bn cng ng. Cc hm l cc biu thc vi gi tr l gi tr c tr v ca chng. Khi foo() tr v gi tr 5, gi tr ca biu thc foo() l 5. Thng thng khng ch tr v mt gi tr tnh ngoi ra cn tnh ton mt th g . D nhin l cc gi tr trong PHP khng phi l cc s nguyn. PHP h tr 3 kiu gi tr v hng: cc gi tr s nguyn,cc gi tr con tr ng v cc gi tr chui (Cc gi tr v hng l cc gi tr m ta khng th b thnh cc cc thnh phn nh hn, khng nh cc mng). PHP cng h tr hai kiu phc: cc mng v cc i tng. Mt trong cc kiu gi tr ny c th c gn vo trong cc bin hoc c tr v t cc hm. Trc , ngi s dng ca PHP/FI 2 s khng cm nhn c bt k thay i no. Tuy vy, PHP t c cc biu hin nhiu hn trong cng mt cch m nhiu ngn ng khc lm. PHP l mt ngn ng hng biu thc, trong s cm nhn rng mi th u l biu thc. Hy n v d trc y, $a=5. Tht d dng thy rng c hai gi tr c gi ln t y, gi tr ca hng s nguyn 5, v gi tr ca $a m ang c cp nht ti 5. Nhng s tht l ch c mt gi tr thm vo c gi ra y, v l gi tr ca s gn tr ca chnh bn thn n . S gn tr kiu ny c lng ti gi tr c gn, trong trng hp ny l 5. Trong thc tin, n c ngha l $a=5, khng ch n g n thc hin, l mt biu thc vi gi tr 5. Do , vit mt th g nh $b=($a=5) cng ging nh vit $a=5;$b=5;) (mt du hai chm nh du s kt thc ca mt cu lnh). Ta cng c th thc hin vic gn tr nh sau:$b=$a=5. Mt v d tt khc ca s hng biu thc l cc ton t tng v gim. Ngi s dng ca PHP/FI 2 v rt nhiu ngn ng khc c th quen vi k hiu bin++ v bin--. y l cc ton t tng v gim. Trong PHP/FI 2, c php $a++ khng c gi tr ( khng phi l mt biu thc), v v vy ta khng th gn n v s dng n trong bt k trng hp no.PHP nng cao cc kh nng tng v gim bng cch to cc biu thc ny, tng t nh C. Trong PHP, ging nh C, c hai dng tng tin t v tng hu t. C hai cch ny v bn cht lm tng gi tr ca bin v nh hng ti cc bin l nh nhau. S khc nhau l vi gi tr cu biu thc tng. Dng tin t, c vit ++$bin, xc nh gi tr ca bin c tng (PHP tng bin trc khi c gi tr ca n). Dng hu t, c vit nh bin++ xc nh ti gi tr thng thng ca $bin, trc khi n c tng( PHP tng bin sau khi c gi tr ca n). Mt dng thng dng nht ca cc bin thc l cc biu thc so snh. Cc biu thc ny xc nh ti 0 hoc 1,ngha l tng ng vi FALSE hoc TRUE. PHP h tr > (ln hn), >= (ln hn hoc bng), = (bng), != (khc), < (nh hn), <= (nh hn hoc bng). Cc biu thc ny c s dng mt cch thng dng nht bn cnh s thc hin cc iu kin, nh l cu trc iu kin if. V d cui cng ca cc biu thc chng ta s cp n y c kt hp vi cc biu thc gn ton t. Ta tht s bit rng nu ta mun tng $a ln 1, ta c th n gin vit $a++ hoc ++$a. Nhng nu ta mun cng thm hn mt ln cho n, v d nh 3 ? Ta c th vit $a++ thnh nhiu ln nhng iu ny l khng hp l v t ra bt tin. Cch thng dng nht l vit $a=$a+3. $a+3 xc nh ti gi tr ca $a cng 3, v c gn tr li trong bin $a. Trong PHP, cng nh trong mt s ngn ng ging C, ta c th vit tng t nh vy trong mt cch ngn hn, nhng li sng sa hn v d hiu hn. Cng thm 3 vo gi tr hin ti ca $a c th c vit $a+=3. iu ny thc s chnh xc l ly gi tr ca $a, cng thm 3, v gn tr li $a.Ngoi vic cch vit ny va ngn va d hiu, n cn c thc hin nhanh hn. Gi tr ca $a+=3, ging nh gi tr ca mt php gn thng thng, l gi tr c gn. Ch rng y khng phi l 3, m l gi tr kt hp ca $a cng 3(y l gi tr c gn vo trong bin $a). C hn mt biu thc c th xem l k quc nu ta khng thy iu ny trong cc ngng ng khc, ton t 3 yu t: $first ? $second : $third
31
Nu gi tr ca biu thc con u tin l ng( khc khng), khi biu thc th hai s c nh gi cho n, v l kt qa ca biu thc iu kin. Trong trng hp khc, biu thc nh th 3 s c nh gi, v o cng l gi tr ca n. V d sau s gip ta hiu cc biu thc tng trc v tng sau trong mt trng hp kh thng thng:
function double($i) { return $i*2; } $b = $a = 5; /* assign the value five into the variable $a and $b */ $c = $a++; /* post-increment, assign original value of $a (5) to $c */ $e = $d = ++$b; /* pre-increment, assign the incremented value of $b (6) to $d and $e */ /* at this point, both $d and $e are equal to 6 */ $f = double($d++); /* assign twice the value of $d before the increment, 2*6 = 12 to $f */ $g = double(++$e); /* assign twice the value of $e after the increment, 2*7 = 14 to $g */ $h = $g += 10; /* first, $g is incremented by 10 and ends with the value of 24. the value of the assignment (24) is then assigned into $h, and $h ends with the value of 24 as well. */
Trong phn u ca chng chng ta ni rng chng ta s tho lun v cc loi cu lnh khc nhau, v nh ha, cc biu thc c th l cc cu lnh. Tuy vy, khng phi mi biu thc l mt cu lnh. Trong trng hp ny, mt cu lnh c dng l mt biu thc, iu ny c ngha l, mt biu thc c theo sau bi du chm phy. Trong $b=$a=5;, $a =5 l mt biu thc ng, nhng chnh bn thn n khng phi l mt cu lnh. Tuy nhin $b=$a=5; l mt cu lnh ng. iu cui cng ng ni n l gi tr thc s ca cc biu thc. Trong rt nhiu s kin, ch yu trong vic thc hin cc iu kin v cc vng lp, ta khng thch th g trong gi tr c th ca biu thc, nhng ch ch n vic gi tr ca chng l TRUE hay FALSE ( PHP khng cung cp mt kiu logic). Gi tr thc s ca cc biu thc trong PHP c tnh vi cch kh ging vi cch trong Perl. Bt k gi tr khc khng u l TRUE, cc gi tr bng khng l FALSE. Hy thn trng rng cc gi tr m l khc khng v v vy n c gi tr TRUE. Chui trng v chui 0 l FALSE; Cc chui cn li khc l TRUE. Vi cc gi tr khng v hng ( cc mng v cc i tng) - Nu gi tr khng cha cc phn t n c xem nh FALSE, cc trng hp khc l TRUE. PHP cung cp mt s b sung y v mnh m ca cc biu thc, v iu ny c chng minh trong ti liu PHP Manual ny.
32
Ton t chia ("/") tr li mt gi tr s nguyn (Kt qu ca mt php chia s nguyn) nu hai ton t l cc s nguyn( hoc cc chui c chuyn i thnh cc s nguyn) v thng s l mt s nguyn. Nu mt ton hng l mt gi tr s thc ng, hoc cc kt qu php ton khng phi l mt s nguyn, gi tr s thc ng c tr v.
2_Cc ton t gn
Ton t gn c bn l =. ngh trc tin ca ta c th cho rng iu ny l bng vi. Khng phi nh vy. N tht s l ton t pha bn tri ly gi tr ca biu thc bn phi. Gi tr ca mt biu thc gn l mt gi tr c gn. iu c ngha l, gi tr ca $a=3 l 3. iu ny cho php ta thc hin mt s vic phc tp: $a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4 Trong php cng vi ton t gn, c s kt hp cc ton t cho tt c cc s hc nh phn v cc ton t chui cho php ta dng mt gi tr trong mt biu thc v tip theo thit lp gi tr ca n ti kt qu ca biu thc . V d:
$a = 3; $a += 5; // sets $a to 8, as if we had said: $a = $a + 5; $b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!"; Ch rng php gn sao chp bin thng thng ti mt bin mi( Php gn bi gi tr), bi vy thay i ti mt bin s khng nh hng n cc bin cn li. iu ny c th cng thch hp nu ta cn sao chp mt th g ging nh mt mng ln trong mt vng lp v hn. PHP 4 h tr php gn bng tham chiu, s dng $bin = &$ bin khc; Nhng c php ny khng cho php trong PHP3.Ph p gn bng tham chiu c ngha cc bin cng ch vo mt gi tr ging nhau, v khng c mt s sao chp t bt k u.
33
Mt ton t iu kin khc l ton t ? n thao tc ging nh trong C v rt nhiu ngn ng khc. (expr1) ? (expr2) : (expr3); Biu thc ny c lng vi expr2 nu expr1 c lng l ng, v expr3 nu expr1 c lng l sai.
34
?> Cnh bo Tin t ton t iu khin li @hin ti s vn khng c th bo co li cho cc li nguy cp lm ngng s thc thi script. Ni cch khc, iu ny c ngha l nu ta dng @ tiu dit cc li t mt hm no v n cng khng sn c hoc b v hiu ho, script s b cht m khng c bt k mt hin th l ti sao.
35
36
Quyn u tin cc ton t Kt hp Tri Tri Tri Tri Phi Tri Tri Tri Tri Tri Tri Tri Khng kt hp Khng kt hp Tri Tri Tri Phi Phi Khng kt hp Cc ton t , or xor and print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === !== < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ new
$a .= "World!";
37
statement Nh cp trong phn cc biu thc , expr c nh gi ti chnh gi tr thc s ca n. Nu expr nh gi l TRUE, PHP s thc hin cu lnh, v nu n nh gi l FALSE - PHP s b qua n. V d sau s hin th a is big than b nu $a ln hn $b:
if ($a > $b)
print "a is bigger than b"; Thng thng ta mun c nhiu hn mt cu lnh c thc hin mt cch c iu kin. D nhin, khng cn bao bc mi cu lnh vi mt mnh if. Thay vo , ta c th nhm mt vi cu lnh vo trong mt nhm cu lnh . V d, on m sau s hin th a is bigger than b nu $a ln hn $b, v s gn gi tr ca bin $a sang cho bin $b:
if ($a > $b) { print "a is bigger than b"; $b = $a;
} Cc cu lnh if c th c lng vo nhau s cung cp cho ta mt cch ton din v linh hot cho vic thc hin iu kin nhiu phn khc nhau trong chng trnh ca ta.
38
Cu lnh else ch c thc hin trong trng hp biu thc trong cu lnh if nhn gi tr FALSE.
} C th c vi elseif trong cng mt cu lnh if. Biu thc elseif u tin ( nu c) nhn gi tr TRUE s c thc hin. Trong PHP, ta cng c th vit else if ( trong hai t) v cng cho gi tr tng ng nh khi ta vit gp trong mt t elseif. ngha c php ch khc nhau mt cht ( nu ta quen vi C, iu ny l tng t) nhng dng trn cng c cng gi tr chnh xc. Cu lnh elseif ch c thc hin nu biu thc if trc v bt k cc biu thc elseif nhn gi tr FALSE, v biu thc elseif hin ti nhn gi tr TRUE.
<?php endif; ?> Trong v d trn, khi HTML A=5 c t trong mt cu lnh if c vit trong c php la chn. Khi HTML s ch c hin th nu $a =5. C php la chn c p dng cho c else v elseif. Sau y l mt cu trc if vi elseif v else trong nh dng la chn:
if ($a == 5): print "a equals 5"; print "..."; elseif ($a == 6): print "a equals 6"; print "!!!";
39
endif;
6_do .. while
Cc vng lp do .. while cng rt ging vi cc vng lp while, tr vic kim tra iu kin ng ti lc kt thc mi vng lp thay v ngay ban u. S khc bit chnh vi cc vng lp while thng thng l s lp li u tin ca mt vng lp do .. while c bo m thc hin (iu kin ng ch c ch ra ti cui vng lp), trong khi n c th s khng c thc hin trong vng lp while nu ngay t u iu kin kim tra l FALSE. Ch c mt c php cho cc vng lp do .. while:
$i = 0; do {
40
Vng lp trn s ch chy mt ln chnh xc, sau ln lp u tin, khi biu thc iu kn c kim tra, n xc nh gi tr FALSE ($i khng ln hn 0) v s thc hin vng lp c kt thc. Nhng ngi dng C cao cp c th quen vi mt cch s dng khc ca vng lp do .. while, cho php dng s thc hn ti gia khi m lnh, bng cch gi gn chng vi do .. while(0), v s dng c php break. on m di y m t iu ny:
do { if ($i < 5) { print "i is not big enough"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i is ok"; ...process i... } while(0);
ng lo lng nu ta khng hiu , ta c th vit m cc script v c cc script mnh m m khng dng c im ny.
Biu thc th nht (expr1 ) c nh gi (c thc hn) mt ln v iu kin khi bt u vng lp. Trong lc bt u ca mi ln lp, expr2 c nh gi. Nu n nh gi l TRUE, vng lp c tip tc v cc cu lnh bn trong vng lp s c thc hin. Nu n nh gi l FALSE, s thc thi ca vng lp s kt thc. Ti cui mi ln lp, expr3 c nh gi (c thc hin). Mi mt biu thc c th trng rng. expr2 ang trng c ngha l vng lp s c chy v hn nh( PHP hon ton xem n l TRUE, ging nh C). iu ny c th khng v dng nh ta ngh, trc y thng thng ta mun kt thc vng lp bng cch dng cu lnh iu kin break thay v s dng biu thc ng n for Hy xem xt cc v d sau. Tt c chng u hin th cc s t 1 n 10:
/* example 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* example 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; }
41
print $i; } /* example 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* example 4 */ for ($i = 1; $i <= 10; print $i, $i++) ;
D nhin, v d u tin xut hin mt cch tt p nht, nhng ta c th thy rng s dng cc biu thc trng trong cc vng lp for l d s dng trong nhiu trng hp. PHP cng cung cp c php hai chm an xen nhau cho cc vng lp for:
for (expr1; expr2; expr3): statement; ...; endfor;
Cc ngn ng khc c mt cu lnh foreach duyt mt danh sch hoc mt m ln xn. PHP3 khng c cu trc ny, PHP4 th c. Trong PHP3, ta c th ni while vi cc hm list() v each() ly ra kt qa tng t.
Dng u tin ca cc vng lp trn mng c a ra bi array_expression. Trn mi vng lp, gi tr ca cc phn t hin ti c gn cho $value v con tr mng cc b c tng ln mt( bi vy trong vng lp sau, ta s thy phn t tip theo). Dng th hai cng thc hin vic tng t, tr kho ca phn t hin ti s c gn ti bin $key trn mi vng lp. Ch : Khi foreach ln u tin bt u thc hin, con tr cc b t ng c iu chnh li ti phn t u tin ca mng . iu ny c ngha l ta khng cn gi hm reset() trc mi vng lp foreach. Ch : ch rng foreach thao tc trn mt bn sao chp ca mng c ch ra, khng phi l chnh mng . Do vy, con tr mng khng b thay i ging nh mi cu trc. Ta phi ch rng cc v d sau c cng mt chc nng nh nhau:
reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br>\n"; } foreach ($arr as $value) { echo "Value: $value<br>\n"; }
42
43
/* Using the optional argument. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br>\n"; break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting<br>\n"; break 2; /* Exit the switch and the while. */ default: break; } }
44
print "i equals 1"; } if ($i == 2) { print "i equals 2"; } switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; }
iu quan trng hiu bng cch no cu lnh switch c thc hin theo trnh t trnh li. Cu lnh switch thc hin tng dng mt ( thc ra l tng cu lnh mt). Trong lc bt u, khng on m no c thc hin.Ch khi mt cu lnh case c tm thy vi gi tr thch hp vi gi tr ca biu thc switch lm cho PHP bt u thc hn cc cu lnh. PHP tip tc thc hin cc cu lnh cho n khi kt thc khi cu lnh switch, hoc ln u tin n gp cu lnh break. Nu ta khng vit mt cu lnh break ti cui danh sch cc cu lnh case, PHP s tip tc thc hin cc cu lnh ca case di . V d:
switch ($i) { case 0: print "i equals 0"; case 1: print "i equals 1"; case 2: print "i equals 2"; }
y, nu $i bng 0, PHP s thc hin tt c cc cu lnh print. Nu $i bng 1, PHP s thc hin 2 cu lnh print cui, v nu $i ch bng 2, khi ch c i equals 2 s c hin th. Bi vy, iu quan trng l khng c qun cc cu lnh break. Trong mt cu lnh switch, iu kin ch c xc nh mt ln v kt qu c so snh cho mi cu lnh case. Trong mt cu lnh elseif, iu kin c xc nh li. Nu iu kin ca ta phc tp hn mt iu kin so snh n gin v/hoc trong mt vng lp kn, mt switch c th nhanh hn. Danh sch cu lnh cho mt case cng c th c b trng, n n gin cho qua iu khin trong danh sch cu lnh cho case tip theo.
switch ($i) { case 0: case 1: case 2: print "i is less than 3 but not negative"; break; case 3: print "i is 3"; }
Mt case c bit l mt case mc nh. Case ny thch hp vi bt k trng hp no m khng ph hp vi cc case khc, v s l cu lnh case cui cng, v d:
45
switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; default: print "i is not equal to 0, 1 or 2"; }
Biu thc case c th l bt k biu thc no m xc nh ti mt kiu n gin, l, kiu s nguyn hoc cc s thc ng v cc chui. Cc mng hoc cc i tng khng th c dng y nu chng khng c tham chiu n mt kiu n gin. C php la chn cho cc cu trc iu khin c h tr vi cc switch.
switch ($i): case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; default: print "i is not equal to 0, 1 or 2"; endswitch;
12_require()
Cu lnh require() thay th chnh bn thn n vi file c ch nh, kh ging vi C trong cc cng vic tin nh ngha #include. Nu URL fopen wrappers c thit lp trong PHP ( Chng trong cu hnh mc nh), ta c th ch ra file c require() dng mt URL thay v mt ng dn cc b. iu quan trng cn ch v vic bng cch no iu ny thc hin l khi mt file c include() hoc require(), b qua ch c php PHP v chuyn sang ch HTML ti lc bt u ca file ch, v bt u li ch PHP mt ln na khi kt thc. Nguyn nhn do chnh l do ny l, bt k m no bn trong file ngun m s c thc hin nh m PHP phi c ng kn trong cc tag bt u v kt thc chnh xc ca PHP. Require() khng phi l mt hm thc s trong PHP; ng hn, n l mt cu trc ngn ng. N l mt ch ca mt s nguyn tc khc nhau hn l cc hm. Trong trng hp c bit, require() khng a ra bt k cu trc iu khin cha no. Trong trng hp khc, n khng tr v bt k mt gi tr no;c gng c mt gi tr tr v t mt li gi require()a n mt c php li. Khng ging include(), require() s lun lun c trong file i tng, ngay c nu nu dng n khng bao gi thc hin. Nu ta mun bao gm mt file c iu kin, s dng include(). Cu lnh iu kin s khng nh hng n require(). Tuy nhin, nu dng trn require() xy ra khng c thc hin, cng s khng c m no trong file i tng s c thc hin.
46
Thng thng, cc cu trc lp khng nh hng n tnh trng ca require(). Mc d m c cha trong file i tng vn cn l thuc vo vng lp, bn thn require() ch xy ra mt ln. iu ny c ngha l ta khng th t mt cu lnh require() bn trong mt cu trc lp v mong ch n bao gm cc ni dung ca mt file khc trong mi vng lp. lm iu , s dng mt cu lnh include()
require ('header.inc');
Khi mt file c require(), m n cha tha k phm vi bin ca dng trn require(0 xy ra. Bt k cc bin c sn ti dng trong file gi s c hiu lc trong file c gi. Nu require() xy ra bn trong mt hm trong mt file gi, khi tt c m cha trong file c gi s c chy mc d n c nh ngha bn trong hm . Ngoi cc cu trc hay dng nh trn, ta cn c mt s cu trc khc c th tham khao thm trong PHP manual nh: include(), require_once() , include_once().
47
2_Cc i s ca hm
Thng tin c th c chuyn ti cc hm thng qua danh sch i s, l mt danh sch c phn cch bi du phy ca cc bin v/hoc cc hng s. PHP h tr truyn cc i s bi gi tr ( mc nh), truyn qua tham chiu, v cc gi tr i s mc nh. Mt kt qu thng thng c th t c trong PHP 3 bng cch thng qua mt mng cc i s ti mt hm:
function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; }
2.1_To cc i s bng cch truyn bng tham chiu Bi mc nh, cc i s ca hm c truyn bng tham tr ( bi vy nu ta thay i gi tr ca i s trong mt hm, n s khng thay i gi tr ca n bn ngoi hm). Nu ta mun cho php mt hm thay i cc i s ca n, ta phi truyn n bng tham chiu. Nu ta mun mt i s n mt hm lun lun c truyn bng tham chiu, ta c th thm mt du v ( &) pha trc tn ca i s trong nh ngha hm:
function add_some_extra(&$string) { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra($str); echo $str; // outputs 'This is a string, and something extra.'
Nu ta mun truyn mt bin bng tham chiu ti mt hm m khng thc hin iu ny bng mc nh, ta c th in mt du v (&) pha trc tn ca i s trong li gi hm:
function foo ($bar) { $bar .= ' and something extra.'; } $str = 'This is a string, '; foo ($str); echo $str; // outputs 'This is a string, ' foo (&$str); echo $str; // outputs 'This is a string, and something extra.'
u ra cho on m trn l:
Making a cup of cappucino. Making a cup of espresso.
Gi tr mc nh phi l mt biu thc hng s, khng phi l mt bin hoc mt thnh phn lp.
48
Ch rng khi s dng cc i s mc nh, bt k mc nh no s c t v pha bn phi ca cc i s khng mc nh; theo cch khc, nhng th s khng lm vic nh mong ch. Hy xem xt on m nh sau:
function makeyogurt ($type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n"; } echo makeyogurt ("raspberry"); // won't work as expected
u ra cho v d trn l:
Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Making a bowl of raspberry .
By gi hy so snh vi on ny:
function makeyogurt ($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n"; } echo makeyogurt ("raspberry"); // works as expected
u ra cho v d ny l:
Making a bowl of acidophilus raspberry.
2.3_Cc danh sch i s chiu di bin PHP4 cung cp cc danh sch i s chiu di bin trong cc hm c nh ngha bi ngi s dng . iu ny thc s kh d dng, dng cc hm func_num_args(), func_get_arg() v hm func_get_args(). Khng yu cu c php c bit no, v cc danh sch i s s vn cn c cung cp mt cch r rng vi cc nh ngha hm v s tr nn thng thng.
3_Cc gi tr tr v
Cc gi tr c tr v bng cch dng cu lnh tr v tu chn. Bt k kiu no cng c th c tr v, bao gm c cc danh sch v cc i tng.
function square ($num) { return $num * $num; } echo square (4); // outputs '16'.
Ta khng th tr v nhiu gi tr t mt hm, nhng cc kt qu thng thng c th t c bng cch tr li mt danh sch.
function small_numbers() { return array (0, 1, 2); } list ($zero, $one, $two) = small_numbers();
49
tr v mt tham chiu t mt hm, ta phi dng ton t tham chiu & trong c khai bo hm v khi gn gi tr tr v cho mt bin:
function &returns_reference() { return $someref; } $newref =&returns_reference();
4_ Old_function
Cu lnh old_function cho php ta khai bo mt hm s dng mt c php ging ht PHP/FI2 ( khng th ta phi thay th function bng old_function). y l mt c im khng c tn thnh, v ch c s dng bi b chuyn i PHP/FI2 sang PHP3. Cnh bo Cc hm c khai bo nh old_function v khng th c gi t m cc b ca PHP. Chnh v vy m ta khng th dng chng trong cc hm nh usort(), array_walk(), register_shutdown_function().
50
?> iu ny nh ngha mt lp c tn l Cart gm c mt mng kt hp cc thc phm trong ci xe ch v hai hm thm v loi b cc phn t t ci xe ch ny. Ch : Trong PHP4, ch c cc khi to hng cho cc bin var l c php. Dng cc hm khi to cho cc khi to khng l hng s.
/* None of these will work in PHP 4. */ class Cart { var $todays_date = date("Y-m-d"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; } /* This is how it should be done. */ class Cart { var $todays_date; var $name; var $owner; function Cart() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* etc. . . */ }
} Cc lp l cc kiu , do vy, chng l bn k hoch cho cc bin tht s. Ta phi to mt bin c kiu mong mun vi ton t new.
51
$cart->add_item("10", 1); iu ny to mt i tng $cart ca lp Cart. Hm add_item() ca i tng ang c gi thm mt phn t ca thc phm s 10 vo xe ch. Cc lp c th c m rng ti cc lp khc. Lp c tha hng hoc c m rng c tt c cc bin v cc hm ca lp c s v nhng g bn thm vo nh ngha c m rng. iu ny c thc hin bng cch dng t kho extend. a tha k khng c h tr.
class Named_Cart extends Cart { var $owner; function set_owner ($name) { $this->owner = $name; }
} iu ny nh ngha mt lp Named_Cart m c tt c cc bin v cc hm ca Cart cng vi mt bin thm $owner v mt hm thm set_owner(). Ta to mt xe ch c ch nh theo cch thng thng v by gi c th thit lp v ly ch ca xe ch. Ta cng c th s dng cc hm xe ch thng thng trn cc xe ch c ch nh:
$ncart = new Named_Cart; // Create a named cart $ncart->set_owner ("kris"); // Name that cart print $ncart->owner; // print the cart owners name
$ncart->add_item ("10", 1); // (inherited functionality from cart) Bn trong cc hm ca mt lp bin $this c ngha l i tng ny. Ta phi dng $this>something truy nhp n bt k bin no hoc hm no c t tn something trong i tng hin thi. C bn trong ln bn ngoi ca i tng ta khng cn mt du $ khi truy nhp vo cc thuc tnh ca mt i tng.
$ncart->owner = "chris"; // no $ $ncart->$owner = "chris"; // this is invalid because $ncart->$owner = $ncart->"" $myvar = 'owner'; $ncart->$myvar = "chris";
// this is valid because $ncart->$myvar = $ncart->owner Cc hm khi tol cc hm trong mt lp v c gi mt cch t ng khi ta to mt th hin mi ca mt lp. Mt hm tr thnh mt hm khi to khi n c cng tn vi tn ca lp.
class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); }
} iu ny nh ngha mt lp Auto_Cart l mt Cart thm mt hm khi to m khi to mt xe ch vi mt phn t thc phm s 10 mi ln mt Auto_Cart c to vi t new. Cc hm khi to cng c th a ra cc i s v cc i s ny c th c tu chn, n to cho chng s thun tin nhiu hn.
52
class Constructor_Cart extends Cart { function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Shop the same old boring stuff. $default_cart = new Constructor_Cart; // Shop for real... $different_cart = new Constructor_Cart ("20", 17);
Ch thch i vi cc lp c tha k, hm khi to ca lp cha khng c gi mt cch t ng khi hm khi to ca lp c tha k c gi.
} Chng ta hy cng kim tra nu c mt s khc bit gia $bar1 m c to bng cch dng ton t = sao chp v $bar2 m c to bng cch dng ton t tham chiu =& ...
$bar1 = new foo('set in constructor'); $bar1->echoName(); $globalref[0]->echoName(); /* output: set in constructor set in constructor set in constructor */ $bar2 =& new foo('set in constructor'); $bar2->echoName(); $globalref[1]->echoName();
53
set in constructor */ Dng nh khng c s khc bit, nhng trong thc t c mt im rt khc bit: $bar1 v $globalref[0] khng c tham chiu, chng khng cng chung bin. iu ny gii thch ti sao new mc nh khng tr v mt tham chiu, thay v n tr v mt sao chp. Ch : Khng c s thc hin no b mt mt ( t khi PHP4 v trn na s dng c tham chiu) tr li cc bn sao chp thay v cc tham chiu. Tri ngc li, tt hn ht l lm vic mt cch n gin vi cc bn sao chp thay v cc tham chiu, bi v vic to ra cc tham chiu i hi cc tn thi gian trong khi vic to ra cc bn sao chp dng nh khng mt thi gian ( nu khng phi khng s no trong chng l mt mng ln hoc i tng v mt trong s chng thay i v cc s khc cn li sau , tip n n s ch ra cch dng cc tham chiu thay i chng mt cch ng thi). chng t iu g c vit trn chng ta hy xem on m di y:
// now we will change the name. what do you expect? // you could expect that both $bar and $globalref[0] change their names... $bar1->setName('set from outside'); // as mentioned before this is not the case. $bar1->echoName(); $globalref[0]->echoName(); /* output: set on object creation set from outside */ // let us see what is different with $bar2 and $globalref[1] $bar2->setName('set from outside'); // luckily they are not only equyl, they are thesame variable // thus $bar2->Name and $globalref[1]->Name are the same too $bar2->echoName(); $globalref[1]->echoName(); /* output: set from outside
54
} class b { function b(&$a) { $this->a = &$a; } function echoValue() { echo "<br>","class ",get_class($this),': ',$this->a->value; } } // try to undestand why using a simple copy here would yield // in an undesired result in the *-marked line $a =& new a(10); $a->createRef(); $a->echoValue(); $a->b->echoValue(); $a->c->echoValue(); $a->value = 11; $a->echoValue(); $a->b->echoValue(); // * $a->c->echoValue(); /* output: class a: 10 class b: 10 class b: 10 class a: 11 class b: 11 class b: 11 */
55