±M·~¤V¶q¬I¤u³]­pµ¡Ã®µ¡¹¢¡A¥]§t¦UºØµ¡Ã®¥¬
±²Ã®µ¥¡A°ª½è·Pµ¡Ã®¡A¼Ë¦¡»ô
¿ì¤½«Ç²M¼äÀu½èªoº£¤uµ{¡A¦U¦¡ªoº£¯»¨ê±M·~­t³d»ù®æ¦X²z
§K¶O¦ô»ù¡A¤½¹Dº¡·N

­º­¶  ¡E  maids ½×¾Â ¡E µ{¦¡³]­p°Q½×     ¡E 

[php] PHP·s¼W¥\¯à»¡©ú¡A¤¤Ä¶¥»(�)

©ÐªF¡Gªü´f
µoªí®É¶¡¡G2011-03-17


-- PHP5·s¼W¥\¯à»¡©ú¡A¤¤Ä¶¥»(¤@)

PHP5¥¿¦¡µo§G

PHP5 ·s¯S©Ê(Á`·§)

PHP5 ·s¨ç¼Æ

PHP5 ¹ï¹³Åé¨t

PHP5 ªºXML·s¯S©Ê



-- PHP5·s¼W¥\¯à»¡©ú¡A¤¤Ä¶¥»(¤G)

PHP5 ·s¯S©Ê(ZT)

SQLite in PHP



--------------------------------------------------------------------------------


´Á«Ý¤w¤[ªºPHP5²×©ó¦b·í¦a®É¶¡7¤ë13¤é¥¿¦¡µo§G¤F¡CµL½×¹ï©óPHP»y¨¥¥»¨­ÁÙ¬OPHPªº¥Î¤á¨ÓÁ¿¡APHP5µo§G³£ºâªº¤W¬O¤@­Ó¨½µ{¸O¦¡ªºª©¥»¡C¦bPHP5µo§G¤§«eªº¦U­ÓPHPª©¥»´N¥H²³æªº»yªk¡BÂ×´Iªº®w¨ç¼Æ¥H¤Î·¥§Öªº¸}¥»¸ÑÄÀ°õ¦æ³t«×¡Aűo¤F³\¦h¶}µoªÌªº«C·ý¡A´X¥G¦¨¤F*NIX¥­¥x¤W­º¿ïªºWEB¶}µo»y¨¥¡CµM¦Ó¡A¯¸¦b»y¨¥¥»¨­¨¤«×¡APHPªº»yªk¡A¯S§O¬OOO¤è­±ªº»yªk³]­p¨Ã¤£§¹µ½¡A·íµM³o©MPHP»y¨¥ªº§@ªÌ¤@¶}©lªº³]­p¥Øªº¦³Ãö¡C²³»¡©Pª¾¡APHP³Ì¶}©l¥u¬O¤@­Ó¥ÎPerl¼g¦¨ªº¤@­Ó¼ÒªO¨t²Î¡A¨ä«áªºµo®i«ä¸ô¤]¬OºÉ¥i¯à¬°§Ö³t¶}µoWEBµ{§Ç´£¨Ñ¤è«K¡C¤j¶qªº®w¨ç¼Æ¥[¤J¨ä¤¤¡A¦Ó»y¨¥¼Ò«¬ªºµo®i«h¬Û¹ï½wºC¡CÁöµM¦bPHP4¤¤¥[¤J¤F­±¦V¹ï¶Hªº³]­p¡A¦ý¨ä»y¨¥¼Ò«¬¨Ã¤£§¹µ½¡A¯Ê¥F½Ñ¦pºc³y¨ç¼Æ¡BªRºc¨ç¼Æ¡B©â¹³Ãþ¡]±µ¤f¡^¡B²§±`³B²zµ¥°ò¥»¤¸¯À¡C³o·¥¤j­­¨î¤F§Q¥ÎPHP¨Ó§¹¦¨¤j³W¼ÒÀ³¥Îµ{§Çªº¯à¤O¡C


¦ÓPHP5ªº½Ï¥Í¡A«h±q®Ú¥»¤W§ïÅܤFPHPªº¤W­z¹úºÝ¡CZend II ¤ÞÀºªº±Ä¥Î¡A§¹³Æ¹ï¹³¼Ò«¬¡B§ï¶iªº»yªk³]­p¡C²×¨Ï±oPHP¦¨¬°¤@­Ó³]­p§¹³Æ¡B¯u¥¿¨ã¦³­±¦V¹ï¹³¯à¤Oªº¸}¥»»y¨¥¡C§Ú­Ì¹w­p¡APHP5ªº¥X²{¡A±N·|µ¹¾ã­ÓPHPªÀ°Ï±a¨Ó·sªº¤@½ü¦UºØ®w¡BÀ³¥Î¶}µo§ï¶iªº°ª®p¡C



PHP5 ·s¯S©Ê(Á`·§)

PHP5.0ª©¥»±j¤Æ¤F¥H¤U¥\¯à¡C­º¥ý¡A§¹¥þ¹ê²{­±¦V¹ï¶H¡CPHP4ª©¥»¤¤¥H²`«þ¨©¬°¯Ê¬Ù­Èªº¹ï¶H¥N¤J¡A¦bPHP5¤¤Åܬ°¥H²L«þ¨©¬°¯Ê¬Ù­È¡C¦]¦¹¡APHP5¨Ã«D»PPHP4§¹¥þ­Ý®e¡A¤£¹L¡A´£¨Ñ¦W¬°PHP­Ý®e¼Ò¦¡ªº¥\¯à¡C

¨ä¦¸¬OXML¥\¯à¡APHP5.0ª©¥»¤ä«ù¥iª½Æ[¦a³X°ÝXML¼Æ¾Ú¡B¦W¬°SimpleXMLªºXML³B²z¥Î¬É­±¡C¦P®ÉÁÙ±j¤Æ¤FXML WebªA°È¤ä«ù¡A¦Ó¥B¼Ð·Ç¤ä«ùSOAPÂX®i¼Ò¶ô¡C

¼Æ¾Ú®w¤è­±¡APHP·sª©¥»´£¨Ñ¦®¦b³X°ÝMySQLªº·s¬É­±--MySQLi¡C°£¦¹«eªº¬É­±¥~¡AÁÙ¥i¥H¨Ï¥Î­±¦V¹ï¹³¬É­±©M¹w³B²z»y¥y(Prepared Statement)µ¥MySQLªº·s¥\¯à¡C¥t¥~¡APHP5.0¤WÁÙ®¹¸j¦³¤p®e¶qRDBMS--SQLite¡C


PHP5 ·s¨ç¼Æ


¨Ó·½ / Zend ½Ķ / EasyChen@phpe




PHP5¤¤·s²K¤F¤@¨Ç¨ç¼Æ¡A¤UÃä¬O¥¦­Ìªº¦Cªí¡G


Arrays:


array_combine() - ¨Ï¥Î¤@­Ó¼Æ²Õ§@¬°¯Á¤Þ¡A¥t¤@­Ó¼Æ²Õ§@¬°­È¨Ó³Ð«Ø¤@­Ó·s¼Æ²Õ


array_diff_uassoc() - ¨Ï¥Î¥Î¤á´£¨Ñªº¦^½Õ¨ç¼Æ¤ñ¸û¼Æ²Õªº¬Û²§µ{«×¡]¨Ï¥ÎÃB¥~ªº¯Á¤ÞÀˬd¡^


array_udiff() - ¨Ï¥Î¦^½Õ¨ç¼Æ¤ñ¸û¼Æ²Õªº¬Û²§µ{«×


array_udiff_assoc() - ¤ñ¸û¼Æ²Õªº¬Û²§µ{«×¡]¨Ï¥ÎÃB¥~ªº¯Á¤ÞÀˬd¡^¡C¼Æ¾Ú³q¹L¦^½Õ¨ç¼Æ¤ñ¸û¡C


array_udiff_uassoc() - ¤ñ¸û¼Æ²Õªº¬Û²§µ{«×¡]¨Ï¥ÎÃB¥~ªº¯Á¤ÞÀˬd¡^¡C¼Æ¾Ú³q¹L¦^½Õ¨ç¼Æ¤ñ¸û¡F¯Á¤ÞÀˬd¤]¥Ñ¦^½Õ¨ç¼Æ§¹¦¨¡C


array_walk_recursive() - ½Õ¥Î¤@­Ó¥Î¤á©w¸q¨ç¼Æ¹ï¼Æ²Õªº¨C­Ó¤¸¯À¶i¦æ¹M¾ú¡C


InterBase:


ibase_affected_rows() - ªð¦^«e¤@­Óquery¤¤¥Í®Äªºrow¼Æ


ibase_backup() - ¦bservice manager¤¤ªì©l¤Æ¤@­Óbackup¥ô°È¡A¨Ã¥ß§Yªð¦^


ibase_commit_ret() - ¦b¤£Ãö³¬ªº±¡ªp¤U¡ACommit¤@­Ó¨Æ°È


ibase_db_info() - ¨ú±o¼Æ¾Ú®wªºª¬ºA


ibase_drop_db() - Drop¤@­Ó¼Æ¾Ú®w


ibase_errcode() - ªð¦^¿ù»~¥N½X


ibase_free_event_handler() - ¨ú®ø¤@­Ó¤wµù¥Uªº¨Æ¥ó¥y¬`


ibase_gen_id() - ²K¥[named generator¨Ãªð¦^·s­È


ibase_maintain_db() - °õ¦æºûÅ@©R¥O


ibase_name_result() - ±N¤@­Ó¦W¦r«ü©w¨ì¤@­Óµ²ªG¶°


ibase_num_params() - ªð¦^prepared query¤¤°Ñ¼Æªº­Ó¼Æ


ibase_param_info() - ªð¦^¤@­Óprepared query¤¤¤@­Ó°Ñ¼Æªº«H®§


ibase_restore() - ¦bservice manager¤¤ªì©l¤Æ¤@­Órestore¥ô°È¨Ã¥ß§Yªð¦^


ibase_rollback_ret() - Rollback¤@­Ó¨Æ°È¡A¨Ã«O¯d¨Æ°Èªº¤W¤U¤å¡]context¡^


ibase_server_info() - ¨ú±o¤@­Ó¼Æ¾Ú®wªº«H®§


ibase_service_attach() - ³s±µ¨ìservice manager


ibase_service_detach() - ©Mservice managerÂ_¶}


ibase_set_event_handler() - µù¥U¤@­Ó¨Æ¥óªº¦^½Õ¨ç¼Æ


ibase_wait_event() - µ¥«Ý¼Æ¾Ú®w¨Æ¥ó


iconv:


iconv_mime_decode() - ¸Ñ½X¤@­ÓMIMEÀY


iconv_mime_decode_headers() - ¹ï¦h­ÓMIMEÀY¤@¦¸¸Ñ½X


iconv_mime_encode() - §Î¦¨¤@­ÓMIMEÀY


iconv_strlen() - ªð¦^¦r²Å¦êªº¦r²Å¼Æ


iconv_strpos() - ¬d§ä¦r²Å¦b¦ê¤¤²Ä¤@¦¸¥X²{ªº¦ì¸m


iconv_strrpos() - ¬d§ä¦r²Å¦b¦ê¤¤³Ì«á¤@¦¸¥X²{ªº¦ì¸m


iconv_substr() - ¨ú±o¦r²Å¦êªº¤@³¡¤À


Streams:


stream_copy_to_stream() - ¦bstream¶¡½Æ»s¼Æ¾Ú


stream_get_line() - ¥Î«ü©w¤À¹j²Å±qstream¤¤¨ú±o¦æ


stream_socket_accept() - ±µ¨ü¥Ñstream_socket_server() ³Ð«Øªºsocket³s±µ


stream_socket_client() - ¥´¶} Internet ©ÎªÌ Unix domain socket³s±µ


stream_socket_get_name() - ¨ú±o¥»¦a©ÎªÌ»·µ{ socketsªº¦W¦r


stream_socket_recvfrom() - ±qsocket±µ¨ü¼Æ¾Ú¡AµL½×¬O§_³s±µ


stream_socket_sendto() - µo°e«H®§µ¹¤@­Ósocket¡AµL½×¬O§_³s±µ


stream_socket_server() - ³Ð«Ø¤@­ÓInternet©ÎªÌUnix domain socket


Other:


convert_uudecode() - ¸Ñ½X¤@­Ó³q¹Luuencodeªº¦r²Å


convert_uuencode() - ½s½X¤@­Ó¦r²Å¬°uuencode


curl_copy_handle() - ½Æ»s¤@­ÓcURL¥y¬`¡A³s¦P¥¦ªº¥þ³¡°¾¦n¡]preferences¡^


dba_key_split() - ±N¤@­ÓÁä­È¡]key¡^±qstring§Î¦¡¤À³Î¬°¼Æ²Õ§Î¦¡


dbase_get_header_info() - ¨ú±o¤@­ÓdBase¼Æ¾Ú®wªºÀY«H®§


dbx_fetch_row() - ±q¤@­ÓDBX_RESULT_UNBUFFERED¼Ð»x¸m¦ìªºquery-result¨ú±orow


fbsql_set_password() - §ïÅÜ«ü©w¥Î¤áªº±K½X


file_put_contents() - ±N¤@­Óstring¼g¤J¤@­Ó¤å¥ó


ftp_alloc() - ¬°±N³Q¤W¶Çªº¤å¥ó¤À°tªÅ¶¡


get_declared_interfaces() - ªð¦^¤@­Ó¥]§t¤F©Ò¦³¤wÁn©úªº±µ¤fªº¼Æ²Õ


get_headers() - ¨ú±oªA°È¾¹¹ï¤@­ÓHTTP½Ð¨Dªð¦^ªº¥þ³¡ÀY¼Æ¾Ú


headers_list() - ªð¦^µo°eªº¡]©ÎªÌ·Ç³Æµo°eªº¡^ÀY«H®§¦Cªí


http_build_query() - ¥Í¦¨¤@­ÓURL½s½Xªºquery¦ê


idate() - ±N¥»¦a®É¶¡/¤é´Á®æ¦¡¤Æ¬°¾ã«¬


image_type_to_extension() - ¨ú±o¥Ñgetimagesize(), exif_read_data(), exif_thumbnail(), exif_imagetype() ¥Í¦¨ªº¹Ï¹³Ãþ«¬ªº¤å¥óÂX®i¦W


imagefilter() - ¦Û©w¸q¹Ï¹³¹LÂo


imap_getacl() - ¨ú±o«ü©wmailboxªºACL


ldap_sasl_bind() - ¨Ï¥ÎSASL¸j©wLDAP¥Ø¿ý


mb_list_encodings() - ªð¦^©Ò¦³¤ä«ùªº½s½X¦Cªí¼Æ²Õ


pcntl_getpriority() - ¨ú±o¶iµ{ªºÄÝ©Ê


pcntl_wait() - µ¥«Ý©Îªð¦^fork¤l¶iµ{ªº¥Ñwaitpid() ¨t²Î½Õ¥Î©w¸qªºª¬ºA


pg_version() - ªð¦^¤@­Ó«È¤áºÝ¡A¨óij©MªA°È¾¹ª©¥»ªº¼Æ²Õ


php_check_syntax() - Àˬd«ü©w¤å¥óªº»yªk


php_strip_whitespace() - ªð¦^¥h°£¤FµùÄÀ©MªÅ¥Õ®æªº·½¥N½X


proc_nice() - §ïÅÜ·í«e¶iµ{ªºÄÝ©Ê


pspell_config_data_dir() - §ó§ï»y¨¥¼Æ¾Ú¤å¥ó


pspell_config_dict_dir() - §ó§ï¥D³æµü¦Cªí


setrawcookie() - µo°e¤@­Ó¤£±aURL½s½X­È±ocookie


snmp_read_mib() - Ū¨ú©M¸ÑªR¤@­ÓMIB¤å¥ó¨ìMIB¾ð


sqlite_fetch_column_types() - ªð¦^¤@­Ó¥]§t¯S©wªíªº¦CÄݩʪº¼Æ²Õ


str_split() - ±N¦r²ÅÂà¤Æ¬°¼Æ²Õ


strpbrk() - ¬d§ä¤@­Ó¦ê¤¤¦r²Åªº¥ô¦ó¤l¶°


substr_compare() - ¦r²Å¦ê¤ñ¸û¡A¤G¶i¨î¦w¥þ


time_nanosleep() - ©µ¿ðN¯Ç¬í


¡@


¡@


PHP5 ¹ï¹³Åé¨t


* ¥»¤å¬O¹ï¡mClasses and Objects in PHP5¡n¨t¦C¤å³¹ªº¸É¥R©M­×¥¿¡A¤¶²Ð¤FPHP5¹ï¹³Åé¨tªºÁ`Å鮨¬[¡A¦ý¦³¨Ç¯S©Ê¨S¦³¨ãÅ餶²Ð¡C±j¯P«ØÄ³¦bŪ¹L¡mClasses and Objects in PHP5¡n«á¾\Ū¥»¤å¡C


 


PHP5±À¥Xªº¹ï¶HÅé¨t¬Û«H¬O¤j®a³Ì¬°´Á«Ýªº¡CPHP5­Éų¤FJava2ªº¹ï¶H¼Ò«¬¡A´£¨Ñ¤F¸û¬°±j¤jªº­±¦V¹ï¹³½sµ{¤ä«ù¡A¨Ï¥ÎPHP¨Ó¹ê²{OO±NÅܱo»´ÃP©M¦ÛµM¡C


 


¹ï¹³¶Ç»¼


 


PHP5¨Ï¥Î¤FZend¤ÞÀºII¡A¹ï¹³³QÀx¦s©ó¿W¥ßªºµ²ºcObject Store¤¤¡A¦Ó¤£¹³¨ä¥¦¤@¯ëÅܶq¨º¼ËÀx¦s©óZval¤¤(¦bPHP4¤¤¹ï¹³©M¤@¯ëÅܶq¤@¼Ë¦sÀx©óZval)¡C¦bZval¤¤¶È¦sÀx¹ï¶Hªº«ü°w¦Ó¤£¬O¤º®e(value)¡C·í§Ú­Ì½Æ»s¤@­Ó¹ï¹³©ÎªÌ±N¤@­Ó¹ï¹³·í§@°Ñ¼Æ¶Ç»¼µ¹¤@­Ó¨ç¼Æ®É¡A§Ú­Ì¤£»Ý­n½Æ»s¼Æ¾Ú¡C¶È¶È«O«ù¬Û¦Pªº¹ï¶H«ü°w¨Ã¥Ñ¥t¤@­Ózval³qª¾²{¦b³o­Ó¯S©wªº¹ï¶H«ü¦VªºObject Store¡C¥Ñ©ó¹ï¹³¥»¨­¦ì©óObject Store,§Ú­Ì¹ï¥¦©Ò§@ªº¥ô¦ó§ïÅܱN¼vÅT¨ì©Ò¦³«ù¦³¸Ó¹ï¹³«ü°wªºzvalµ²ºc----ªí²{¦bµ{§Ç¤¤´N¬O¥Ø¼Ð¹ï¶Hªº¥ô¦ó§ïÅܳ£·|¼vÅT¨ì·½¹ï¶H¡C.³o¨ÏPHP¹ï¹³¬Ý°_¨Ó´N¹³Á`¬O³q¹L¤Þ¥Î(reference)¨Ó¶Ç»¼¡A¦]¦¹PHP¤¤¹ï¹³Àq»{¬°³q¹L¡u¤Þ¥Î¡v¶Ç»¼¡A§A¤£¦A»Ý­n¹³¦bPHP4¤¤¨º¼Ë¨Ï¥Î&¨ÓÁn©ú¡C


 


©U§£¦^¦¬¾÷¨î


¬Y¨Ç»y¨¥¡A³Ì¨å«¬ªº¦pC¡A»Ý­n§AÅ㦡¦a­n¨D¤À°t¤º¦s·í§A³Ð«Ø¼Æ¾Úµ²ºc¡C¤@¥¹§A¤À°t¨ì¤º¦s¡A´N¥i¥H¦bÅܶq¤¤¦sÀx«H®§¡C¦P®É§A¤]»Ý­n¦bµ²§ô¨Ï¥ÎÅܶq®ÉÄÀ©ñ¤º¦s¡A³o¨Ï¾÷¾¹¥i¥HªÅ¥X¤º¦sµ¹¨ä¥¦Åܶq¡AÁ×§K¯Ó¥ú¤º¦s¡C


PHP¥i¥H¦Û°Ê¶i¦æ¤º¦sºÞ²z¡A²M°£¤£¦A»Ý­nªº¹ï¶H¡CPHP¨Ï¥Î¤F¤Þ¥Î­p¼Æ(reference counting)³oºØ³æ¯Âªº©U§£¦^¦¬(garbage collection)¾÷¨î¡C¨C­Ó¹ï¶H³£¤º§t¤@­Ó¤Þ¥Î­p¼Æ¾¹¡A¨C­Óreference³s±µ¨ì¹ï¶H¡A­p¼Æ¾¹¥[1¡C·íreferenceÂ÷¶}¥Í¦sªÅ¶¡©Î³Q³]¬°NULL¡A­p¼Æ¾¹´î1¡C·í¬Y­Ó¹ï¶Hªº¤Þ¥Î­p¼Æ¾¹¬°¹s®É¡APHPª¾¹D§A±N¤£¦A»Ý­n¨Ï¥Î³o­Ó¹ï¶H¡AÄÀ©ñ¨ä©Ò¦ûªº¤º¦sªÅ¶¡¡C


¨Ò¦p¡G


<?php

class Person{

}

function sendEmailTo(){

}


$haohappy = new Person( );

// «Ø¥ß¤@­Ó·s¹ï¹³: ¤Þ¥Î­p¼Æ Reference count = 1

$haohappy2 = $haohappy;

// ³q¹L¤Þ¥Î½Æ»s: Reference count = 2

unset($haohappy);

// §R°£¤@­Ó¤Þ¥Î¡G Reference count = 1

sendEmailTo($haohappy2);

// ³q¹L¤Þ¥Î¶Ç»¼¹ï¹³¡G

// ¦b¨ç¼Æ°õ¦æ´Á¶¡¡G

// Reference count = 2

// °õ¦æµ²§ô«á:

// Reference count = 1


unset($haohappy2);

// §R°£¤Þ¥Î: Reference count = 0 ¦Û°ÊÄÀ©ñ¤º¦sªÅ¶¡


?>


 


¥H¤W¬OPHP5¦b¤º¦sºÞ²z¤WªºÅܤơA¤]³\¤j®a¤£«ç»ò·P¿³½ì¡C¤U­±§Ú­Ì¨Ó¬Ý¬ÝPHP5¤¤ªº¹ï¶H¼Ò«¬©MPHP4¦³¤°»ò¨ãÅ骺¤£¦P¤§³B¡G


 


·s¼W¥\¯à


§ï¶i¥\¯à


 


1) Private and Protected Members ¨p¦³©M«OÅ@Ãþ¦¨­û¡]ÄݩʡA¤èªk¡^


2) Abstract Classes and Methods ©â¹³Ãþ©M©â¹³¤èªk


3) Interfaces ¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@±µ¤f


4) Class Type Hints¡@ Ãþ«¬«ü¥Ü =


5) final¡@ finalÃöÁä¦r =


6) Objects Cloning¡@ ¹ï¹³½Æ»s =


7) Constructors and Destructors ºc³y¨ç¼Æ©MªRºc¨ç¼Æ


8) Class Constants Ãþ±`¶q =


9) Exceptions ²§±`³B²z


10) Static member ÀRºAÃþ¦¨­û


11) __METHOD__ constant __METHOD__±`¶q =


12) Reflection ¤Ï®g¾÷¨î¡@


 


²Ä1¡B2¡B3¡B7¡B10½Ð¦Û¦æ¬d¾\¥»¤å¥½§Àªº¡mClasses and Objects in PHP5¡n¨t¦C¡A¨ä¤¤¤w¦³¸Ô²Ó¤¶²Ð¡A¥»¤å¤¤¤£¦AÁ¿¸Ñ¡C²Ä9ÂI²§±`³B²z©M²Ä12ÂI¤Ï®g¾÷¨î¤º®e¸û¬°Â×´I¡A­­©ó½g´T¥ç¤£¦b¤å¤¤¤¶²Ð¡A½ÐÃöª`§Y±N±À¥Xªº¡mPHP & More¡n¹q¤lÂø»x²Ä¤G´Á¡A·|±Mªù¼¶¤å¤¶²Ð¡C


 


¥H¤U¦V¤j®a¤¶²Ð²Ä4¡B5¡B6¡B8¡B11ÂI»y¨¥¯S©Ê¡G


 


Class Type Hints¡@Ãþ«¬«ü¥Ü


 


¤j®a³£ª¾¹D¡APHP¬O¤@ºØ®zÃþ«¬ªº»y¨¥¡C¦b¨Ï¥ÎÅܶq«e¤£»Ý­n©w¸q¡A¤£»Ý­nÁn©úÅܶqªº¼Æ¾ÚÃþ«¬¡C³o¦b½sµ{¤¤±a¨Ó«Ü¦h«K§Q¡A¦ý¤]±a¤F¤@¨ÇÁô±w¡A¯S§O·íÅܶqªºÃþ«¬ÅܤƮɡC¦bPHP5¼W¥[¤FÃþ«¬«ü¥Ü¡A¥i¥H¦b°õ¦æ¹Lµ{¤¤¦Û°Ê¹ïÃþ¤èªkªº°Ñ¼ÆÃþ«¬¶i¦æ§PÂ_¡C³oÃþ¦ü©óJava2¤¤ªºRTTI¡A°t¦Xreflection¥i¥HÅý§Ú­Ì«Ü¦n¦a±±¨î¹ï¶H¡C


 


 


<?php

interface Foo {

function a(Foo $foo);

}


interface Bar {

function b(Bar $bar);

}


class FooBar implements Foo, Bar {

function a(Foo $foo) {

// ...

}


function b(Bar $bar) {

// ...

}

}


$a = new FooBar;

$b = new FooBar;


$a->a($b);

$a->b($b);

?>


 


¦b±jÃþ«¬»y¨¥¤¤¡A©Ò¦³ÅܶqªºÃþ«¬±N¦b½sͮɶi¦æÀˬd¡A¦Ó¦bPHP¤¤¨Ï¥ÎÃþ«¬«ü¥Ü¨Ó¹ïÃþ«¬ªºÀˬd«hµo¥Í¦b¹B¦æ®É¡C¦pªGÃþ¤èªk°Ñ¼ÆªºÃþ«¬¤£¹ï¡A±N·|³ø¥XÃþ¦ü¡uFatal error: Argument 1 must implement interface Bar…¡v³o¼Ëªº¿ù»~«H®§¡C


 


¥H¤U¥N½X¡G


<?php

function foo(ClassName $object) {

// ...

}

?>


 


¬Û·í©ó¡G


<?php

function foo($object) {

if (!($object instanceof ClassName)) {

die("Argument 1 must be an instance of ClassName");

}

}

?>


 


 


final / finalÃöÁä¦r


 


PHP5¤¤·s¼W¥[¤FfinalÃöÁä¦r¡A¥¦¥i¥H¥[¦bÃþ©ÎÃþ¤èªk«e¡C¼ÐÃѬ°finalªºÃþ¤èªk¡A¦b¤lÃþ¤¤¤£¯à³QÂмg¡C¼ÐÃѬ°finalªºÃþ¡A¤£¯à³QÄ~©Ó¡A¦Ó¥B¨ä¤¤ªº¤èªk³£Àq»{¬°finalÃþ«¬¡C


Final¤èªk¡G


<?php

class Foo {

final function bar() {

// ...

}

}

?>


 


FinalÃþ¡G


<?php

final class Foo {

// class definition

}


// ¤U­±³o¤@¦æ¬O¿ù»~ªº

// class Bork extends Foo {}

?>


 


Objects Cloning / ¹ï¹³½Æ»s


«e­±¦b¤º¦sºÞ²z³¡¥÷»¡¹L¡APHP5¤¤Àq»{³q¹L¤Þ¥Î¶Ç»¼¹ï¶H¡C¹³¨Ï¥Î$object2=$object1³o¼Ëªº¤èªk½Æ»s¥Xªº¹ï¶H¬O¬Û¤¬ÃöÁpªº¡C¦pªG§Ú­Ì½T¹ê»Ý­n½Æ»s¥X¤@­Ó­È»P­ì¨Ó¬Û¦Pªº¹ï¶H¦Ó§Æ±æ¥Ø¼Ð¹ï¶H»P·½¹ï¹³¨S¦³ÃöÁp¡]¹³´¶³qÅܶq¨º¼Ë³q¹L­È¨Ó¶Ç»¼¡^¡A¨º»ò´N»Ý­n¨Ï¥ÎcloneÃöÁä¦r¡C¦pªGÁ٧Ʊæ¦b½Æ»sªº¦P®ÉÅܰʷ½¹ï¹³¤¤ªº¬Y¨Ç³¡¥÷¡A¥i¥H¦bÃþ¤¤©w¤@­Ó__clone()¨ç¼Æ¡A¥[¤J¾Þ§@¡C


 


<?php

//¹ï¹³½Æ»s

class MyCloneable {

static $id = 0;


function MyCloneable() {

$this->id = self::$id++;

}




/*

function __clone() {

$this->address = "New York";

$this->id = self::$id++;

}

*/

}


$obj = new MyCloneable();


$obj->name = "Hello";

$obj->address = "Tel-Aviv";


print $obj->id . "\n";


$obj_cloned = clone $obj;


print $obj_cloned->id . "\n";

print $obj_cloned->name . "\n";

print $obj_cloned->address . "\n";

?>


 


¥H¤W¥N½X½Æ»s¥X¤@­Ó§¹¥þ¬Û¦Pªº¹ï¶H¡C


 


µM«á½Ð§âfunction __clone()³o¤@­Ó¨ç¼ÆªºµùÄÀ¥h±¼¡A­«·s¹B¦æµ{§Ç¡C«h·|½Æ»s¥X¤@­Ó°ò¥»¬Û¦P¡A¦ý³¡¥÷ÄÝ©ÊÅܰʪº¹ï¶H¡C


 


Class Constants / Ãþ±`¶q


PHP5¤¤¥i¥H¨Ï¥ÎconstÃöÁä¦r¨Ó©w¸qÃþ±`¶q¡C


 


<?php

class Foo {

const constant = "constant";

}


echo "Foo::constant = " . Foo::constant . "\n";

?>


 


__METHOD__ constant __METHOD__±`¶q


__METHOD__ ¬OPHP5¤¤·s¼Wªº¡uÅ]³N¡v±`¶q¡Aªí¥ÜÃþ¤èªkªº¦WºÙ¡C

Å]³N±`¶q¬O¤@ºØPHP¹w©w¸q±`¶q¡A¥¦ªº­È¥i¥H¬OÅܤƪº¡APHP¤¤ªº¨ä¥¦¤w¸g¦s¦bªºÅ]³N±`¶q¦³__LINE__¡B__FILE__¡B__FUNCTION__¡B__CLASS__µ¥¡C


<?php

class Foo {

function show() {

echo __METHOD__;

}

}


class Bar extends Foo {

}


Foo::show(); // outputs Foo::show

Bar::show(); // outputs Foo::show either since __METHOD__ is

// compile-time evaluated token


function test() {

echo __METHOD__;

}


test(); // outputs test

?>


¡@


¡@


PHP5 ªºXML·s¯S©Ê

PHP4 ªº XML


¦­´ÁªºPHPª©¥»´N¤w¸g¶}©l¤ä«ùXML¤F¡A¦Ó³o¥u¬O¤@­Ó°ò©óSAXªº±µ¤f¡A¥¦¥i¥H»´ÃPªº¸ÑªR¥ô¦óXML¤åÀÉ¡CÀHµÛPHP4¤¤¥[¤J¤FDOMXMLÂX®i¼Ò¶ô¡AXML³Q§ó¦nªº¤ä«ù¤F¡C«á¨ÓXSLT°µ¬°¸É¥R³Q¥[¤F¶i¨Ó¡C¦b¾ã­ÓPHP4ªº¶¥¬q¡A¨ä¥¦¤@¨Ç¥\¯à¦pHTML¡AXSLT©MDTDÅçÃÒ¤]³Q¥[¨ì¤FDOMXMLÂX®i¤¤¡A¤£©¯ªº¬O¡A¥Ñ©óXSLT©MDOMXMLÂX®i©l²×³B©ó¹êÅç¶¥¬q¡AAPI³¡¤À¤]³Q¤£¤î¤@¦¸ªº­×§ï¡A¥¦­ÌÁÙ¬O¤£¯à¥HÀq»{¤è¦¡¦w¸Ë¡C¦¹¥~¡ADOMXMLÂX®i¨S¦³¿í´`W3C¨î©wªºDOM¼Ð·Ç¡A¦Ó¦³¦Û¤vªº©R¦W¤èªk¡CÁöµM¦bPHP4.3¤¤³o³¡¤À±o¨ì¤F§ïµ½¨Ã¥B³\¦h¤º¦s¬ªº|©M¨ä¥¦¤@¨Ç¥\¯à¤]±o¥H­×´_¡A¦ý¥¦©l²×¨S¦³µo®i¨ì¤@­Óí©wªº¶¥¬q¡A¤@¨Ç²`¤Jªº°ÝÃD¤w¸g´X¥G¤£¥i¯à­×´_¡C¥u¦³SAXÂX®i³Q¤wÀq»{¤è¦¡¦w¸Ë¡A¨ä¥¦ªº¤@¨ÇÂX®i±q¥¼±o¨ì¼sªxªº¨Ï¥Î¡C


°ò©ó©Ò¦³³o¨Ç­ì¦]¡APHPªºXML¶}µoªÌ¨M©w¦bPHP5­«¼g¥þ³¡¥N½X¡A¨Ã¿í´`¨Ï¥Î¼Ð·Ç¡C




PHP5ªºXML

¦bPHP5¤¤©Ò¦³¤ä«ùXMLªº³¡¤À´X¥G¥þ³¡­«·s½s¼g.²{¦bªº©Ò¦³XMLÂX®i³£¬O°ò©óGNOME¶µ¥ØªºLIBXML2®w¡C³o±N¤¹³\¦b¤£¦PªºÂX®i¼Ò¶ô¤§¶¡¤¬¬Û¾Þ§@¡A®Ö¤ß¶}µoªÌ¥u»Ý­n¦b¤@­Ó©³¼hªº®w¤W¶i¦æ¶}µo¡C¨Ò¦p¡A½ÆÂøªº¤º¦sºÞ²z¥u¹ê²{¤@¦¸´N¥i¥HÅý©Ò¦³XML¬ÛÃöÂX®i±o¨ì§ïµ½¡C


°£¤FÄ~©ÓPHP4¤¤»D¦WªºSAX¸ÑªR¾¹¤§¥~¡APHP5ÁÙ¤ä«ù¿í´`W3C¼Ð·ÇªºDOM©M°ò©óLIBXSLT¤ÞÀºªºXSLT¡C¦P®ÉÁÙ¥[¤J¤FPHP¿W¦³ªºSimpleXMLÂX®i©M²Å¦X¼Ð·ÇªºSOAPÂX®i¡CÀHµÛXML¶V¨Ó¶V³Q­«µø¡APHP¶}µoªÌ¨M©w¦bÀq»{¦w¸Ë¤è¦¡¤¤¥[¤J§ó¦h¹ïXMLªº¤ä«ù¡C³o´N·N¨ýµÛ§A²{¦b¥i¥H¨Ï¥ÎSAX¡ADOM©MSimpleXML¡A¦Ó³o¨ÇÂX®i±N·|¦b§ó¦hªºªA°È¾¹¤W¦w¸Ë¡CµM«á¹ï©óXSLT©MSOAPªº¤ä«ù¡AÁٻݭn¦bPHP½sͮɳQÅ㦡ªº°t¸m¡C




¼Æ¾Ú¬yªº¤ä«ù


²{¦b©Ò¦³ªºXMLÂX®i³£¤ä«ùPHP¼Æ¾Ú¬y¡A§Y¨Ï§A¤£±qPHP¤¤ª½±µ³X°Ý¡C¨Ò¦p¡A¦bPHP5¤¤§A¥i¥H±q¤@­Ó¤å¥ó©Î±q¤@±ø«ü¥O³X°Ý¼Æ¾Ú¬y¡C°ò¥»¤W§A¯à°÷¦b¥ô¦ó¥i¥H³X°Ý´¶³q¤å¥óªº¦a¤è³X°ÝPHP¼Æ¾Ú¬y¡C


PHP4.3¤¤Â²­nªº¤¶²Ð¤F¼Æ¾Ú¬y¡A¦bPHP5¤¤¤w¸g±o¨ì¤F¶i¤@¨Bªº´£°ª¡A¥]§t¤å¥ó¦s¨ú¡Aºôµ¸¦s¨ú©M¨ä¥¦¾Þ§@¡A¦p¦@¨É¤@®M¥\¯à¨ç¼Æ¡C§A¬Æ¦Ü¥i¥H¨Ï¥ÎPHP¥N½X¨Ó¹ê²{§A¦Û¤vªº¼Æ¾Ú¬y¡A³o¼Ë¼Æ¾Ú¦s¨ú±NÅܱo«D±`²³æ¡CÃö©ó³o³¡¤Àªº§ó¦h²Ó¸`½Ð°Ñ¦ÒPHP¤åÀÉ¡C




SAX


SAXªº¥þºÙ¬OSimple API for XML¡A¥¦¬O¥Î©ó¸ÑªRXML¤åÀɪº±µ¤f¡A¬O°ò©ó¦^½Õ§Î¦¡ªº¡C±qPHP3¶}©l´N¤w¸g¤ä«ù¤FSAX¡A¨ì²{¦b¤]¨S¦³¤Ó¤jªºÅܤơC¦bPHP5¤¤¡AAPI±µ¤f¨Ã¨S¦³§ïÅÜ¡A©Ò¥H§Aªº¥N½X¤´µM¥i¥H¹B¦æ¡C°ß¤@¤£¦Pªº¬O¥¦¤£¦A°ò©óEXPAT®w¡A¦Ó¬O°ò©óLIBXML2®w¡C


³o­ÓÅܤƱa¨Ó¤F¤@¨Ç¹ï©R¦WªÅ¶¡¤ä«ù¤Wªº°ÝÃD¡A³o­Ó°ÝÃD¦bLIBXML2.2.6ª©¥»¤¤¤w¸g±o¨ì¸Ñ¨M¡C¦ý¬OLIBXML2¥H«eªºª©¥»¤¤¨Ã¨S¦³¸Ñ¨M¡A¦]¦¹¦pªG§A¨Ï¥Î¤Fxml_parse_create_ns()¡F±j¯P«ØÄ³¦b§Aªº¨t²Î¤W¦w¸ËLIBXML2.2.6¡C




DOM


DOM (¤åÀɹﹳ¼Ò«¬)¬O¥ÑW3C¨î©wªº¤@®M³X°ÝXML¤åÀɾ𪺼зǡC¦bPHP4¥i¥H¨Ï¥ÎDOMXML¨Ó¹ï¦¹¶i¦æ¾Þ§@¡ADOMXMLªº³Ì¥D­n°ÝÃD¬O¥¦¤£²Å¦X¼Ð·Çªº©R¦W¤èªk¡C¦Ó¥B¦b«Üªø¤@¬q®É¶¡¤ºÁÙ¦s¦b¤º¦s¬ªº|°ÝÃD¡]PHP4.3¤w¸g­×´_¤F³o­Ó°ÝÃD¡^¡C


·sªºDOMÂX®i¬O°ò©óW3C¼Ð·Ç§¹¦¨ªº¡A¥]§t¤èªk©MÄݩʦWºÙ¡C¦pªG§A¦b¨ä¥¦»y¨¥¤¤¼ô±xDOM¡A¨Ò¦p¦bJavaScript¤¤¡A¨º»ò¦bPHP¤¤½s¼gÃþ¦üªº¥\¯à±NÅܱo«D±`®e©ö¡C§A¤£¥²¨C¦¸³£¬d¬Ý¤åÀÉ¡A¦]¬°¤èªk©M°Ñ¼Æ³£¬O¬Û¦Pªº¡C


¥Ñ©ó¨Ï¥Î¤F·sªºW3C¼Ð·Ç¡A°ò©óDOMXMLªº¥N½X±N¤£¯à¹B¦æ¡C¦bPHP¤¤ªºAPI¦³«Ü¤jªº¤£¦P¡C¦ý¬O¦pªG§Aªº¥N½X¤¤¨Ï¥Î¤FÃþ¦üW3C¼Ð·Çªº¤èªk©R¦W¤è¦¡¡A²¾´Ó¨Ã¤£¬O«Ü§xÃø¡C§A¥u»Ý­n±N¸ü¤J¨ç¼Æ©M«O¦s¨ç¼Æ­×§ï¡A§R°£¨ç¼Æ¦W¤¤ªº¤U¹º½u¡]DOM¼Ð·Ç¨Ï¥Î­º¦r¥À¤j¼g¡^¡C¨ä¥¦¦U³Bªº½Õ¸`·íµM¤]¬O¥²¶·ªº¡A¦ý¬O¥D­nÅ޿賡¤À¥i¥H«O«ù¤£ÅÜ¡C




Ū¨úDOM


§Ú¤£·|¦b³o½g¤å³¹¤¤¸ÑÄÀDOMÂX®iªº©Ò¦³¯S©Ê¡A¨º¤]¬O¨S¦³¥²­nªº¡C©Î³\§AÀ³¸Ó±NHTTP://www.w3.org/DOMªº¤åÀÉ¥[¤J®ÑÅÒ¡C¥¦»PPHP5ªºDOM³¡¤À°ò¥»¤W¬Û¦P¡C


¦b³o½g¤å³¹ªº¤j¦h¼Æ¨Ò¤l¤¤§Ú­Ì±N¨Ï¥Î¦P¤@­ÓXML¤å¥ó¡Azend.com¤W¦³«D±`²³æªºRSSª©¥»¡C±N¤U­±ªº¤å¥»Öß¶K¨ì¤@­Ó¤å¥»¤å¥ó¤¤¨Ã«O¦s¬°articles.xml¡C






http://www.zend.com/zend/week/week172.php



http://www.zend.com/zend/tut/tut-hatwar3.php


­n±N³o­Ó¨Ò¤l¸ü¤J¨ì¤@­ÓDOM¹ï¶H¡A­º¥ý­n³Ð«Ø¤@­ÓDOMDocument¹ï¶H¡AµM«á¸ü¤JXML¤å¥ó¡C


$dom = new DomDocument();

$dom->load("articles.xml");


¥¿¹³¤W­±©Ò´£¤Îªº¡A§A¥i¥H¨Ï¥ÎPHPªº¼Æ¾Ú¬y¨Ó¸ü¤J¤@­ÓXML¤åÀÉ¡A§AÀ³¸Ó³o¼Ë¼g¡G


$dom->load("file:///articles.xml");


¡]©ÎªÌ¨ä¥¦Ãþ«¬ªº¼Æ¾Ú¬y¡^


¦pªG§A·Q±NXML¤åÀÉ¿é¥X¨ìÂsÄý¾¹©Î°µ¬°¼Ð·Ç¼Ð¥X¡A¨Ï¥Î¡G


print $dom->saveXML();


¦pªG§A·Q§â¥¦«O¦s¦¨¤å¥ó¡A½Ð¨Ï¥Î¡G


print $dom->save("newfile.xml");


¡]ª`·N³o¼Ë°µ·|±N¤å¥ó¤j¤pµo°e¨ìstdout¡^


·íµM³o­Ó¨Ò¤l¨S¦³¤Ó¦hªº¥\¯à¡AÅý§Ú­Ì¨Ó°µ¨Ç§ó¦³¥Îªº¡C§Ú­Ì¨Ó¨ú±o©Ò¦³ªºtitle¤¸¯À¡C¦³«Ü¦h¤èªk¥i¥H¿ì¨ì¡A³Ì²³æªº´N¬O¨Ï¥ÎgetElementsByTagName($tagname):


$titles = $dom->getElementsByTagName("title");

foreach($titles as $node) {

print $node->textContent . "\n";

}


textContentÄݩʨ䣬OW3C¼Ð·Ç¡A¥¦¥i¥HÅý§Ú­Ì«Ü¤è«Kªº§Ö³tŪ¨ú¤@­Ó¤¸¯Àªº©Ò¦³¤å¥»¸`ÂI¡A¨Ï¥ÎW3Cªº¼Ð·ÇŪ¨ú¬O¤U­±³o¼Ë¡G


$node->firstChild->data;


¡]³o®É­Ô§A­n½T«OfirstChildµ²ÂI¬O§A»Ý­nªº¤å¥»µ²ÂI¡A§_«h§AÁÙ±o¹M¾ú©Ò¦³¤lµ²ÂI¨Ó¬d§ä¡^¡C


¥t¥~¤@­Ó­nª`·Nªº°ÝÃD¬OgetElementsByTagName()ªð¦^¤@­ÓDomNodeList,¹ï¶H¡A¦Ó¤£¬O¹³PHP4¤¤get_elements_by_tagname()¨º¼Ëªð¦^¤@­Ó¼Æ²Õ¡A¦ý¬O¥¿¹³§A¦b³o­Ó¨Ò¤l¤¤¬Ý¨ìªº¨º¼Ë¡A§A¥i¥H¨Ï¥Îforeach»y¥y»´ÃPªº¹M¾ú¥¦¡C§A¤]¥i¥Hª½±µ¨Ï¥Î$titles->item(0)¨Ó³X°Ýµ²ÂI¡C¸Ó¤èªk±Nªð¦^²Ä¤@­Ótitle¤¸¯À¡C


¥t¤@­Ó¨ú±o©Ò¦³title¤¸¯Àªº¿ìªk¬O±q®Úµ²ÂI¹M¾ú¡A§A¥i¥H¬Ý¨ì¡A³o­Ó¤èªk§ó½ÆÂø¡A¦ý¬O¦pªG§A»Ý­nªº¤£¥u¬Otitle¤¸¯Àªº®É­Ô¡A³o­Ó¤èªk¤]´N§óÆF¬¡¡C


foreach ($dom->documentElement->childNodes as $articles) {

//¦pªG¸`ÂI¬O¤@­Ó¤¸¯À(nodeType == 1)¨Ã¥B¦W¦r¬Oitem´NÄ~Äò´`Àô

if ($articles->nodeType == 1 && $articles->nodeName == "item") {

foreach ($articles->childNodes as $item) {

//¦pªG¸`ÂI¬O¤@­Ó¤¸¯À¡A¨Ã¥B¦W¦r¬Otitle´N¥´¦L¥¦.

if ($item->nodeType == 1 && $item->nodeName == "title") {

print $item->textContent . "\n";

}

}

}

}


XPath


XPaht ´N¹³¬OXMLªºSQL¡A¨Ï¥ÎXPath§A¥i¥H¦b¤@­ÓXML¤åÀɤ¤¬d¸ß²Å¦X¤@¨Ç¼Ò¦¡»yªkªº¯S©wµ²ÂI¡C·Q¨Ï¥ÎXPathÀò±o©Ò¦³titleµ²ÂI¡A¥u»Ý­n³o»ò°µ¡G


<?

$xp = new domxpath($dom);

$titles = $xp->query("/articles/item/title");

foreach ($titles as $node) {

print $node->textContent . "\n";

}

?>


³o¼Ë©M¨Ï¥ÎgetElementsByTagName()¤èªk®t¤£¦h¡A¦ý¬OXpath­n±j¤jªº¦h¡A¨Ò¦p¡A¦pªG§Ú­Ì¦³¤@­Ótitle¤¸¯À¬Oarticleªº¤l¤¸¯À(¦Ó¤£¬Oitemªº¤l¤¸¯À)¡AgetElementsByTagName()´N·|±N¥¦ªð¦^¡C¦Ó¨Ï¥Î/articles/item/title»yªk¡A§Ú­Ì¥u·|±o¨ì¦b«ü©w²`«×©M¦ì¸mªºtitle¤¸¯À¡C³o¥u¬O¤@­Ó²³æªº¨Ò¤l¡A¦A²`¤J¤@ÂI¥i¯à¬O³o¼Ë¡G


/articles/item[position() = 1]/title ªð¦^²Ä¤@­Óitem¤¸¯Àªº©Ò¦³


/articles/item/title[@id = '23'] ªð¦^©Ò¦³§t¦³idÄݩʨåB­È¬°23ªºtitle


/articles//title ªð¦^©Ò¦³articles¤¸¯À¤U­±ªºtitle(ĶªÌµù¡G//¥Nªí¥ô·N²`«×)


§A¤]¥i¥H¬d¸ß§t¦³¯S®í¥S§Ì¤¸¯ÀªºÂI¡A§t¦³¯S®í¤å¥»¤º®eªº¤¸¯À¡A©ÎªÌ¨Ï¥Î©R¦WªÅ¶¡µ¥µ¥¡C¦pªG§A¥²¶·¤j¶qªº¬d¸ßXML¤åÀÉ¡A¾A·íªº¾Ç²ß¨Ï¥ÎXPath·|¸`¬Ù§A«Ü¦h®É¶¡¡A¥¦¨Ï¥Î²³æ¡A°õ¦æ³t«×§Ö¡A¤ñ¼Ð·ÇªºDOM»Ý­n§ó¤Öªº¥N½X¡C




¦VDOM¤¤¼g¤J¼Æ¾Ú


¤åÀɹﹳ¼Ò«¬¨Ã¤£¬O¥u¯àŪ¨ú©M¬d¸ß¡A§A¤]¥i¥H¾Þ§@©M¼g¤J¡C(DOM¼Ð·Ç¦³ÂI¤¾ªø¡A¦]¬°½s¼gªÌ·QºÉ¶q¤ä«ù¯à°÷·Q¹³¨ìªº¨C¤@­ÓÀô¹Ò¡A¦ý¬O¥¦¤u§@ªº«D±`¦n)¡C¬Ý¬Ý¤U­±³o­Ó¨Ò¤l¡A¥¦¦b§Ú­Ìªºarticle.xml¤å¥ó¤¤²K¥[¤F¤@­Ó·s¤¸¯À¡C


$item = $dom->createElement("item");

$title = $dom->createElement("title");

$titletext = $dom->createTextNode("XML in PHP5");

$title->appendChild($titletext);

$item->appendChild($title);

$dom->documentElement->appendChild($item);

print $dom->saveXML();


­º¥ý¡A§Ú­Ì³Ð«Ø¤F©Ò¦³»Ý­nªºµ²ÂI¡A¤@­Óitem¤¸¯À¡A¤@­Ótitle¤¸¯À©M¤@­Ó¥]§titem¼ÐÃDªº¤å¥»µ²ÂI¡AµM«á§Ú­Ì±N©Ò¦³ªºµ²ÂIÃì±µ°_¨Ó¡A§â¤å¥»µ²ÂI¥[¨ìtitle¤¸¯À¤W,§âtitle¤¸¯À¥[¨ìitem¤¸¯À¤W¡A³Ì«á§Ú­Ì§âitem¤¸¯À´¡¤J¨ìarticles®Ú¤¸¯À¤W¡C²{¦b¡A§Ú­ÌªºXML¤åÀɤ¤¦³¤@­Ó·sªº¤å³¹¦Cªí¤F¡C


ÂX®iÃþ(class)

¦n¤F¡A¤W­±ªº¨Ò¤l³£¥i¥H¦bPHP4¤U­±¥ÎDOMXMLÂX®i¨Ó°µ(¥u¬OAPI¦³¤@¨Ç¤£¦P)¡A¯à°÷¦Û¤vÂX®iDOMÃþ¬OPHP5ªº¤@­Ó·s¯S©Ê¡A³o¨Ï±o®Ñ¼g§ó¦h¥iŪ©Ê±jªº¥N½XÅܱo¥i¯à¡C¤U­±¬O¥ÎDOMDocumentÃþ­«·s¼gªº¾ã­Ó¨Ò¤l¡G


class Articles extends DomDocument {

function __construct() {

//¥²¶·½Õ¥Î!

parent::__construct();

}



function addArticle($title) {

$item = $this->createElement("item");

$titlespace = $this->createElement("title");

$titletext = $this->createTextNode($title);

$titlespace->appendChild($titletext);

$item->appendChild($titlespace);

$this->documentElement->appendChild($item);

}

}

$dom = new Articles();

$dom->load("articles.xml");

$dom->addArticle("XML in PHP5");

print $dom->save("newfile.xml");


HTML

PHP5¤¤¤@­Ó¸g±`¤£³Qª`·N¨ìªº¯S©Ê¬Olibxml2®w¹ïHTMLªº¤ä«ù¡A§A¤£¶È¥i¥H¨Ï¥ÎDOMÂX®i¸ü¤Jµ²ºc¨}¦n(well-formed)ªºXML¤åÀÉ¡AÁÙ¥i¥H¸ü¤J«Dµ²ºc¨}¦nªº(not-well-formed)HTML¤åÀÉ¡A§â¥¦·í°µ¼Ð·ÇªºDOMDocument¹ï¶H¡A¨Ï¥Î©Ò¦³¯à¥Îªº¤èªk©M¯S©Ê¡A¤ñ¦pXPath©MSimpleXML¡C


·í§A»Ý­n³X°Ý¤@­Ó§AµLªk±±¨î¯¸ÂIªº¤º®e®É¡AHTMLªº©Ê¯à´NÅã¥Ü¤Q¤À¦³¥Î¤F¡C¦b XPath, XSLT ©Î SimpleXMLªºÀ°§U¤U¡A§A¬Ù±¼¤F³\¦h¥N½X¡A¹³¨Ï¥Î¥¿«hªí¹F¦¡¤ñ¸û¦r²Å¦ê©ÎªÌSAX¸ÑªR¾¹¡C·íHTML¤åÀɵ²ºc¤£¬O«Ü¦nªº®É­Ô¡A³o­Ó¿ìªk¤×¨ä¦³¥Î(³o¬O­ÓÀWÁcªº°ÝÃD¡I)¡C


¤U­±ªº¥N½XÀò±o¨Ã¸ÑªRphp.netªº­º­¶¡A±Nªð²Ä¤@­Ótitle¤¸¯Àªº¤º®e¡C


$dom = new DomDocument();

$dom->loadHTMLFile("http://www.php.net/");

$title = $dom->getElementsByTagName("title");

print $title->item(0)->textContent;


½Ðª`·N·í«ü©w¤¸¯À¨S¦³§ä¨ì®É¡A§Aªº¿é¥X¥i¯à·|¥]§t¿ù»~¡C¦pªG§Aªººô¯¸ÁÙ¦b¨Ï¥ÎPHP¿é¥XHTML4¥N½X¡A¦³¤@­Ó¦n®ø®§­n§i¶D§A¡ADOMÂX®i¤£¶È¯à¸ü¤JHTML¤åÀÉ¡A¦Ó¥BÁÙ¯à±N¥L­Ì«O¦s¬°HTML4®æ¦¡ªº¤å¥ó¡C¦b§A²K¥[§¹DOM¤åÀÉ«á¡A¨Ï¥Î$dom->saveHTML()¨Ó«O¦s¡C­nª`·Nªº¬O¡A¬°¤F¨Ï¿é¥XªºHTML¥N½X²Å¦XW3C¼Ð·Ç¡A³Ì¦n¤£¥Î¨Ï¥Î ¾ã»ôªºÂX®i?(tidy extension)¡CLibxml2 ®w¤ä«ùªºHTML¨Ã¤£·|¦Ò¼{¨ì¨C­Ó¥i¯àµo¥Íªº¨Æ±¡¡A¤]¤£¯à«Ü¦nªº³B²z«D³q¥Î®æ¦¡ªº¿é¤J¡C


ÅçÃÒ

XML¤åÀɪºÅçÃÒ¶V¨Ó¶V­«­n¤F¡C¨Ò¦p¡A¦pªG§A±q¤@¨Ç°ê¥~¸ê·½¤¤Àò±o¤F¤@­ÓXML¤åÀÉ¡A¦b§A³B²z¤§«e§A»Ý­nÀËÅ祦¬O§_²Å¦X¬Y­Ó½T©wªº®æ¦¡¡C©¯¹Bªº¬O§A¤£»Ý­n¦bPHP¤¤¼g¦Û¤vªºÅçÃÒµ{§Ç¡A¦]¬°§A¥i¥H¨Ï¥Î¤T­ÓÀ³¥Î³Ì¼sªxªº¼Ð·Ç¤§¤@¡]DTD¡AXML Schema ©ÎRelaxNG¡^¨Ó§¹¦¨¥¦¡C.


DTD¬O¤@­Ó²£¥Í©óSGML®É¥Nªº¼Ð·Ç¡A¯Ê¤Ö¤@¨ÇXMLªº·s¯S©Ê¡]¦p©R¦WªÅ¶¡¡^,¦Ó¥B¥Ñ©ó¥¦¤£¬O¥ÎXML¼gªº¡A¥¦¤]«ÜÃø³Q¸ÑªR©MÂà´«¡C

XML Schemai¬O¥ÑW3C¨î©wªº¤@­Ó¼Ð·Ç¡A¥¦À³¥Î¼sªx¡A´X¥G¥]§t¤F©Ò¦³ÅçÃÒXML¤åÀɩһݭnªº¤º®e¡C

RelaxNG ¬O½ÆÂøªºXML Schema¼Ð·Çªº¹ïÀY¡A¬O¥Ñ¦Û¥ÑªÌ²Õ´³Ð«Øªº¡A¥Ñ©ó¥¦¤ñXML Schema§ó®e©ö¹ê²{¡A¶V¨Ó¶V¦hªºµ{§Ç¶}©l¤ä«ùRelaxNG¤F

¦pªG§A¨S¦³¿ò¯d¤U¨Óªº­p¹º¤åÀɩΪ̫D±`½ÆÂøªºXML¤åÀÉ¡A¨º»ò¨Ï¥ÎRelaxNG§a¡C¥¦®Ñ¼g©M¾\Ū³£¤ñ¸û²³æ¡A¶V¨Ó¶V¦hªº¤u¨ã¤]¤ä«ù¥¦¡C¬Æ¦ÜÁÙ¦³¤@­Ó¤u¨ã¥sTrang¡A¥¦¥i¥H±qXML½d¥»¤¤¦Û°Ê³Ð«Ø¤@­ÓRelaxNG¤åÀÉ¡C¦Ó¥B¥u¦³RelaxNG¡]©M¦Ñ¤ÆªºDTDS¡^³Qlibxml2§¹¥þ¤ä«ù¡A¾¨ºÞlibxml2¤]§Y±N§¹¥þ¤ä«ùML Schema¡C


ÅçÃÒXML¤åÀɪº»yªk¬Û·í²³æ¡G


$dom->validate('articles.dtd');

$dom->relaxNGValidate('articles.rng');

$dom->schemaValidate('articles.xsd');

¥Ø«e¡A©Ò¦³³o¨Ç³£¥u·|²³æªºªð¦^true©Îfalse,¿ù»~·|³Q°µ¬°PHPĵ§i¿é¥X¡CÅãµM·Qªð¦^µ¹¥Î¤á¤Í¦nªº«H®§³o¨Ã¤£¬O¤@­Ó¦n¥D·N¡A¦bPHP5.0¥H«áªºª©¥»¸Ì·|¦³©Ò§ïµ½¡C¨ì©³¸Ó«ç»ò¹ê²{¥Ø«eÁÙ¦b°Q½×¤§¤¤¡A¦ý¬O¿ù»~³ø§iªÖ©w·|³B²zªº§ó¦n¡C




SimpleXML

SimpleXML ¬OPHPªºXML®a±Ú¤¤³Ì«á¤@­Ó³Q¥[¤Jªº¦¨­û¡A¥[¤JSimpleXMLÂX®iªº¥Øªº¬O¬°¤F´£¨Ñ¤@­Ó¨Ï¥Î¼Ð·Ç¹ï¹³ÄݩʩM­¡¥N¾¹³X°ÝXML¤åÀɪº§ó²³æªº¤èªk¡C¸ÓÂX®i¨S¦³¤Ó¦hªº¤èªk¡AÁöµM¦p¦¹¥¦ÁÙ¬O¬Û·í±j¤jªº¡C±q§Ú­Ìªº¤åÀɪº¨ú±o©Ò¦³title¸`ÂI¤ñ­ì¨Ó»Ý­n§ó¤Öªº¥N½X¡C


$sxe = simplexml_load_file("articles.xml");

foreach($sxe->item as $item) {

print $item->title ."\n";

}


³o¬O¦b·F¤°»ò¡H­º¥ý±Narticles.xml¸ü¤J¨ì¤@­ÓSimpleXML¹ï¶H¡CµM«á¨ú±o©Ò¦³$sxe¤¤ªºitem¤¸¯À¡A³Ì«á$item->titleªð¦^title¤¸¯Àªº¤º®e¡A´N¬O³o¼Ë¡C§A¤]¥i¥H¨Ï¥ÎÃöÁp¼Æ²Õ¬d¸ßÄݩʡA¨Ï¥Î: $item->title['id']¡C


¬Ý¨ì¤F§a¡A³o«á­±¯u¬O¤Ó¯«©_¤F¡A¦³³\¦h¤£¦Pªº¿ìªk¥i¥H±o¨ì§Ú­Ì·Q­nªºµ²ªG¡A¨Ò¦p, $item->title[0]ªð¦^©M¨Ò¤l¤¤¬Û¦Pªºµ²ªG¡A¥t¤@¤è­±¡Aforeach($sxe->item->title as $item)¥uªð¦^²Ä¤@­Ótitle,¨Ã¤£¬O©Ò¦³¦b¤åÀɤ¤ªºtitle¤¸¯À¡C¡]´N¹³§Ú¦bXPath¤¤¹w´Áªº¨º¼Ë¡^¡C


SimpleXML ¹ê»Ú¤W¬O¨Ï¥Î¤FZend¤ÞÀº2·s¯S©Êªº²Ä¤@­ÓÂX®i¡C¦]¦¹¤]¦¨¤F³o¨Ç·s¯S©Êªº´ú¸ÕÂI¡A§A­nª¾¹D¦b¶}µo¶¥¬qbugs©M¤£¥i¹w®Æªº¿ù»~¥i¤£¬O¤Ö¼Æ¡C


°£¤F¤W­±¨Ò¤l¤¤©Ò¨Ï¥Îªº¹M¾ú©Ò¦³¸`ÂIªº¤èªk¡A¦bSimpleXML¤¤¤]¦³¤@­ÓXPath±µ¤f¡A¥¦¬°³X°Ý³æ­Óµ²ÂI´£¨Ñ¤F§ó²³æªº¿ìªk¡C


foreach($sxe->xpath('/articles/item/title') as $item) {

print $item . "\n";

}


¤£¥i§_»{¡A³o¬q¥N½X¤]¤£¤ñ«e­±¨Ò¤l¤¤ªºµu¡A¦ý¬O´£¨Ñ¤F§ó½ÆÂø©Î§ó²`ªº´O®MXML¤åÀÉ¡A§A·|µo²{©MSimpleXML¤@°_¨Ï¥ÎXPath·|¸`¬Ù§A«Ü¦hªº¿é¤J¡C


¦V SimpleXML ¤åÀɼg¤J¼Æ¾Ú

§A¤£¶È¥i¥H¸ÑªR©MŪ¨úSimpleXML¡A¦Ó¥BÁÙ¥i¥H§ïÅÜSimpleXML¤åÀÉ¡C¦Ü¤Ö§Ú­Ì¥[¤J¤@¨ÇÂX®i¡G


$sxe->item->title = "XML in PHP5 "; //title¤¸¯Àªº·s¤º®e¡C

$sxe->item->title['id'] = 34; // title¤¸¯Àªº·sÄݩʡC

$xmlString = $sxe->asXML(); // ±NSimpleXML¹ï¹³°µ¬°§Ç¦C¤ÆªºXML¦r²Å¦êªð¦^

print $xmlString;


¤¬¥Î¨ó§@©Ê

¥Ñ©óSimpleXML¤]¬O°ò©ólibxml2®wªº¡A§A¥i¥H¦b´X¥G¤£¼vÅT³t«×ªº±¡ªp¤U»´ÃPªº±NSimpleXML¹ï¹³Âà¤Æ¦¨DomDocument¹ï¶H¡C(¤åÀɤ£¥Î¶i¦æ¤º³¡½Æ»s)¡A¥Ñ©ó³o­Ó¾÷¨î¡A§A¾Ö¦³¤F¤G­Ó¹ï¶Hªº³Ì¦n³¡¤À¡A¨Ï¥Î¤@­Ó¾A¦X§A¤âÀY¤u§@ªº¤u¨ã§a¡A¥¦¬O³o¼Ë¨Ï¥Îªº:


$sxe = simplexml_import_dom($dom);

$dom = dom_import_simplexml($sxe);

XSLT

XSLT¬O¥Î¨Ó±NXML¤åÀÉÂà´«¬°¨ä¥¦XML¤åÀɪº»y¨¥¡AXSLT¥»¨­¬O¥ÎXML½s¼gªº¡AÄÝ©ó¥\¯à©Ê»y¨¥®a±Ú¡A¦bµ{§Ç³B²z¤W©M­±¹ï¹ï¹³»y¨¥¡]¹³PHP¡^¦³©Ò¤£¦P¡CPHP4¤¤¦³¤GºØXSLT³B²z¾¹¡GSablotron¡]¦b¼sªx¨Ï¥ÎªºXSLTÂX®i¤¤¡^©MLibxslt¡]¦bdomxmlÂX®i¤¤¡^¡A³o¨âºØAPI¤£¤¬¬Û­Ý®e¡A¨Ã¥B¨Ï¥Î¤èªk¤]¤£¬Û¦P¡CPHP5¥u¤ä«ùlibxslt³B²z¾¹¡A¤§©Ò¥H¿ï¾Ü¥¦¬O¦]¬°¥¦¬O°ò©óLibxml2ªº¡A¦]¦¹¤]§ó²Å¦XPHP5ªºXML·§©À¡C


²z½×¤W±NSablotron¸j©w¨ìPHP5¤W¤]¬O¥i¯àªº¡A¦ý¬O¤£©¯ªº¬O¨S¤H¨Ó°µ¡C¦]¦¹¡A¦pªG§A¥¿¦b¨Ï¥ÎSablotron¡A§A¤£±o¤£¦bPHP5¤¤¤Á´«¨ìlibxslt³B²z¾¹¡CLibxslt ¬O±a¦³JavaScript²§±`³B²z¤ä«ùªºSablotron¡A¬Æ¦Ü¥i¥H¨Ï¥ÎPHP±j¤jªº¼Æ¾Ú¬y¨Ó­«·s¹ê²{Sablotron¿W¦³ªº­p¹º³B²z¡]scheme handlers¡^¡C¦¹¥~¡Alibxslt ¬O ³Ì§ÖªºXSLT³B²z¾¹¤§¤@¡A©Ò¥H§AÁÙ§K¶O±o¨ì¤F³t«×ªº´£¤É¡C¡]°õ¦æ³t«×¬OSablotronªº¤G­¿¡^¡C


©M¥»¤å°Q½×ªº¨ä¥¦ÂX®i¤@¼Ë¡A§A¥i¥H¦bXSLÂX®i¡ADOMÂX®i©Mvice versa¤§¶¡¥æ´«XML¤åÀÉ¡A¹ê»Ú¤W¡A§A¥²¶·±o³o»ò°µ¡A¦]¬°EXT/XSLÂX®i¨Ã¨S¦³¸ü¤J©M«O¦sXML¤åÀɪº±µ¤f¡A¥u¯à¨Ï¥ÎDOMÂX®i¡C¤@¶}©l¾Ç²ßXSLTÂà´«¡A§A¤£»Ý­n´x´¤¤Ó¦hªº¤º®e¡A³o¸Ì¤]¤£¦s¦bW3C¼Ð·Ç¡A¦]¬°³o­ÓAPI¤¤±qMozilla¡u­É¡v¹L¨Óªº¡C


­º¥ý§A»Ý­n¤@­ÓXSLT¼Ë¦¡ªí¡A±N¤U¦C¤å¥»Öß¶K¨ì¤@­Ó·s¤å¥ó¨Ã¥B«O¦s¦Çarticls.xsl


 


µM«á¥ÎPHP¸}¥»½Õ¥Î¥¦¡G:


 


/* ±NXML©MXSL¤åÀɸü¤J¨ìDOMDocument¹ï¹³*/

$xsl = new DomDocument();

$xsl->load("articles.xsl");

$inputdom = new DomDocument();

$inputdom->load("articles.xml");


/* ³Ð«ØXSLT³B²z¾¹¡A¨Ã¾É¤J¼Ë¦¡ªí*/

$proc = new XsltProcessor();

$xsl = $proc->importStylesheet($xsl);

$proc->setParameter(null, "titles", "Titles");


/* Âà´«¨Ã¿é¥XXML¤åÀÉ */

$newdom = $proc->transformToDoc($inputdom);

print $newdom->saveXML();


?>


¤W­±ªº¨Ò¤l­º¥ý¨Ï¥ÎDOMªº¤èªkload()¸ü¤JXSLT¼Ë¦¡ªíarticles.xsl¡AµM«á³Ð«Ø¤F¤@­Ó·sªºXsltProcessor¹ï¶H¡A¸Ó¹ï¹³¾É¨ì¤F«á­±­n¨Ï¥Î¤FXSLT¼Ë¦¡ªí¹ï¶H¡A°Ñ¼Æ¥i¥H³o¼Ë³]¸msetParameter(namespaceURI, name, value),³Ì«áXsltProcessor¹ï¹³¨Ï¥ÎtransformToDoc($inputdom)¶}©lÂà´«¨Ãªð¦^¤@­Ó·sªºDOMDocument¹ï¶H¡C


. ³o­ÓAPIªºÀuÂI¦b©ó§A¥i¥H¨Ï¥Î¦P¤@­Ó¼Ë¦¡ªíÂà´«³\¦hXML¤åÀÉ¡A¥u»Ý­n±N¥¦¸ü¤J¤@¦¸µM«á­«½Æ¨Ï¥Î¥¦¡A¦]¬°transormToDoc()¨ç¼Æ¥i¥HÀ³¥Î©ó¤£¦PªºXML¤åÀÉ¡C


°£¤FtransormToDoc()¡AÁÙ¦³¤G­Ó¥Î©óÂà´«ªº¤èªk:transformToXML($dom)ªð¦^¤@­Ó¦r²Å¦ê¡AtransformToURI($dom, $uri)±NÂà´«¤§«áªº¤åÀÉ«O¦s¨ì¤å¥ó©Î¤@­ÓPHP¼Æ¾Ú¬y¡Cª`·N¦pªG§A·Q¨Ï¥ÎXSLTªº¤@­Ó»yªk¦p ©Î indent="yes",§A¤£¯à¨Ï¥ÎtransformToDoc()¡A¦]¬°DOMDocument¹ï¹³ ¤£¯à«O¦s¸Ó«H®§¡A¥u¯à·í§A±NÂà´««áªºµ²ªGª½±µ«O¦s¨ì¦r²Å¦ê©Î¤å¥ó¤¤®É¤~¯à³o¼Ë°µ¡C


½Õ¥ÎPHP¨ç¼Æ

XSLTÂX®i³Ì«á¤@­Ó·s¥[ªº¯S©Ê¬O¯à°÷¦bXSLT ¼Ë¦¡ªí¤º³¡½Õ¥Î¥ô¦óPHP¨ç¼Æ¡A¥D±i¥¿²ÎªºXML¤ä«ùªÌ¤@©w¤£·|³ßÅw³o­Ó¥\¯à(³o¼Ëªº¼Ë¦¡ªí¦³ÂI½ÆÂø¡A«Ü®e©ö²V²cÅÞ¿è©M³]­p),¦b¬Y¨Ç¦a¤è«o¬O¤Q¤À¦³¥Îªº¡C·í¯A¤Î¨ì¨ç¼Æ®ÉXSLT´NÅܱo«Ü¦³­­¡A§Y¨Ï·Q¹ê²{¥Î¤£¦Pªº»y¨¥¿é¥X¤@­Ó¤é´Á¤]¬O«D±`³Â·Ðªº¡C¦ý¬O¨Ï¥Î³o­Ó¥\¯à¡A³B²z³o¨Ç´N©M¥u¨Ï¥ÎPHP¤@¼Ë®e©ö¡C¤U­±¬O¦VXSLT²K¥[¤@­Ó¨ç¼Æªº¥N½X¡G


 


function dateLang () {

return strftime("%A");

}


$xsl = new DomDocument();

$xsl->load("datetime.xsl");

$inputdom = new DomDocument();

$inputdom->load("today.xml");


$proc = new XsltProcessor();

$proc->registerPhpFunctions();


// ¸ü¤J¤åÀɨèϥÎ$xsl¨Ó³B²z

$xsl = $proc->importStylesheet($xsl);


/* Âà´«¨Ã¿é¥XXML¤åÀÉ */

$newdom = $proc->transformToDoc($inputdom);


print $newdom->saveXML();


?>


¤U­±¬OXSLT¼Ë¦¡ªídatetime.xsl¡A¥¦·|½Õ¥Î³o­Ó¨ç¼Æ¡C


 


¤U­±¬O­n¨Ï¥Î¼Ë¦¡ªíÂà´«ªºXML¤åÀÉ¡Atoday.xml(¦P²z¡Aarticles.xml¤]·|±o¨ì¦P¼Ëµ²ªG)¡C


 


¤W­±ªº¼Ë¦¡ªí¡APHP¸}¥»©M©Ò¦³ªºXML¤å¥ó·|¥Î·í«e¨t²Î³]¸mªº»y¨¥¿é¥X¬P´Áªº¦W¦r¡C§A¥i¥Hµ¹php:function()²K¥[§ó¦hªº°Ñ¼Æ¡A²K¥[ªº°Ñ¼Æ·|³Q¶Ç»¼µ¹PHP¨ç¼Æ¡C³o¸Ì¦³¤@­Ó¨ç¼Æphp:functionString(),³o­Ó¨ç¼Æ¦Û°Ê±N©Ò¦³¿é¤Jªº°Ñ¼ÆÂà´«¬°¦r²Å¦ê¡A©Ò¥H§A¤£»Ý­n¦bPHP¸Ì¶i¦æÂà´«¡C


ª`·N§A»Ý­n¦bÂà´«¤§«e½Õ¥Î$xslt->registerPhpFunctions()¡A§_«hPHP¨ç¼Æ½Õ¥Î±N¦]¬°¦w¥þ­ì¦]¤£·|³Q°õ¦æ¡]§A©l²×¬Û«H§AªºXSLT¼Ë¦¡ªí¶Ü¡H¡^¡C¥Ø«e³X°Ý¨t²ÎÁÙ¨S¦³¹ê²{¡A¤]³\¦b±N¨ÓPHP5ªºª©¥»¤¤·|¹ê²{³o­Ó¥\¯à¡C


ºK­n

PHP¹ïXMLªº¤ä«ù¤w¸g¦V«eÁÚ¶i¤F¤@¤j¨B¡A¥¦²Å¦X¼Ð·Ç¡A¥\¯à±j¤j¡A¤¬¥Î¨ó§@©Ê±j¡A³Q§@¬°Àq»{¿ï¶µ¦w¸Ë¡A¤w³Q±ÂÅv¨Ï¥Î¡C·s¥[¤JªºSimpleXMLÂX®i´£¨Ñ¤F²³æ§Ö³t³X°ÝXML¤åÀɪº¤èªk¡A¥i¥H¸`¬Ù§A«Ü¦hªº¥N½X¡A¤×¨ä¬O·í§A¦³µ²ºc¤Æ¤åÀɩΪ̥i¥H¨Ï¥Î±j¤jªºXPath®É¡C


·PÁÂlibxml2—PHP5 XMLÂX®i©Ò¨Ï¥Îªº©³¼h®w¡A¨Ï¥ÎDTD¡ARelaxNG©ÎXML SchemaÅçÃÒXML¤åÀɲ{¦b¤w¸g³Q¤ä«ù¤F¡C


XSL¤ä«ù¤]±o¨ì¤F½·s¡A²{¦b¨Ï¥ÎLibxslt®w¡A¤ñ­ì¨ÓªºSablotron®w¦b©Ê¯à¤W¦³«Ü¤j´£°ª¡A¦Ó¥B¡A¦bXSLT¼Ë¦¡ªí¤º³¡½Õ¥ÎPHP¨ç¼Æ¥i¥HÅý§A¼g¥X§ó±j¤jªºXSLT¥N½X¡C


¦pªG§A¤w¸g¦bPHP4©Î¨ä¥¦»y¨¥¤¤¨Ï¥Î¤FXML¡A§A·|³ßÅwPHP5ªºXML¯S©Êªº¡AXML¦bPHP5¤¤¦³¤F«Ü¤jªºÅܤơA²Å¦X¼Ð·Ç¡A©M¨ä¥¦¤u¨ã¡A»y¨¥¬O¦Pµ¥ªº¡C 





  • ÃÙ§Uºô¯¸       

    ¼s§Q¤£°Ê²£-ªO¾ô¦b¦a¥Í®Ú³Ì¹ê¦b--·sªO¯S°Ï«ü¦W«×³Ì°ª¡B­È±o±z«H¿àªº¦n©Ð¥ò
    §¹¾ã©Ð°T¡A©Ð«Î¡B©±­±¼öªùºë¿ïª«¥ó¡A¼s§Q¤£°Ê²£ Àu½è¥ò¤¶¡A©Ð«Î¯²¸î¡B¶R½æ¸ê°T³z©ú¡A¥æ©ö¯u¦w¤ß¡I
    ¼s§Q¤£°Ê²£-·sªO¯S°Ï«ü¦W«×³Ì°ª¡B­È±o±z«H¿àªº¦n©Ð¥ò
    ±zªº¦«¥I,¼s§Q¥Î¤ß¬°±zªA°È



  • ¡@¦@ 0 ¤H¦^À³

    ©m¦W¡G
    §G§i¤º®e¡G