- 相關(guān)推薦
從 PHP 4 移植到 PHP 5 網(wǎng)站程序哪些需要修改
盡管大部分 PHP 4 的代碼應(yīng)該不用修改就能運(yùn)行,還是應(yīng)該留意以下不向下兼容的改變,就跟隨百分網(wǎng)小編一起去了解下吧,想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
■有了一些新關(guān)鍵字。
■strrpos() 和 strripos() 如今使用整個(gè)字符串作為 needle。
■非法使用字符串偏移量會(huì)導(dǎo)致 E_ERROR 而不是 E_WARNING。一個(gè)非法使用的例子:$str = 'abc'; unset($str[0]);.
■array_merge() 被改成只接受數(shù)組。如果傳遞入非數(shù)組變量,對(duì)每個(gè)此類參數(shù)都會(huì)發(fā)出一條 E_WARNING 信息。要小心因?yàn)槟愕拇a有可能瘋狂發(fā)出 E_WARNING。
■PATH_TRANSLATED 服務(wù)器變量在 Apache2 SAPI 中不再暗中設(shè)定,這和 PHP 4 中的情形相反,如果 Apache 沒產(chǎn)生此值則其被設(shè)為和 SCRIPT_FILENAME 服務(wù)器變量一樣的值。此修改是為了遵守 ? CGI 規(guī)范。更多信息見 ? bug #23610,并參考手冊(cè)中 $_SERVER['PATH_TRANSLATED'] 的說明。此問題也影響到 PHP >= 4.3.2 的版本。
■Tokenizer 擴(kuò)展不再定義 T_ML_COMMENT 常量。如果把 error_reporting 設(shè)為 E_ALL,PHP 將產(chǎn)生一條消息。盡管 T_ML_COMMENT 從來都沒用到過,還是在 PHP 4 中定義了。在 PHP 4 和 PHP 5 中 // 和 /* */ 都被解析為 T_COMMENT 常量。但是 PHPDoc 風(fēng)格的注釋 /** */,自 PHP 5 開始被 PHP 解析,被識(shí)別為 T_DOC_COMMENT。
■如果 variables_order 包括“S”,$_SERVER 應(yīng)該帶有 argc 和 argv 被產(chǎn)生。如果用戶特別配制系統(tǒng)不創(chuàng)建 $_SERVER,那此變量當(dāng)然就不存在了。改變的地方是不管 variables_order 怎么設(shè)定,在 CLI 版本中 argc 和 argv 總是可用的。本來 CLI 版不是總會(huì)產(chǎn)生全局變量 $argc 和 $argv 的。
■沒有屬性的對(duì)象不再被當(dāng)成“empty”。
■有些情況下類必須在使用前被定義。這僅在使用了一些 PHP 5 的新特性(例如 interfaces)的時(shí)候發(fā)生。其它情況下行為都沒變。
■get_class(),get_parent_class() 和 get_class_methods() 如今返回的類/方法名和定義時(shí)的名字一致(區(qū)分大小寫),對(duì)于依賴以前行為(類/方法名總是返回小寫的)的老腳本可能產(chǎn)生問題。一個(gè)可能的解決方法是在腳本中搜索所有這些函數(shù)并使用 strtolower()。 區(qū)分大小寫的改變也適用于魔術(shù)常量 __CLASS__,__METHOD__ 和 __FUNCTION__。其值都會(huì)嚴(yán)格按照定義時(shí)的名字返回(區(qū)分大小寫)。
■ip2long() 在傳遞入一個(gè)非法 IP 作為參數(shù)時(shí)返回 FALSE,不再是 -1。
■如果有函數(shù)定義在包含文件中,則這些函數(shù)可以在主文件中使用而與是否在 return() 指令之前還是之后無關(guān)。如果文件被包含兩次,PHP 5 會(huì)發(fā)出致命錯(cuò)誤,因?yàn)楹瘮?shù)已經(jīng)被定義,而 PHP 4 不管這個(gè)。因此推薦使用 include_once() 而不要去檢查文件是否已被包含以及在包含文件中有條件返回。
■include_once() 和 require_once() 在 Windows 下先將路徑規(guī)格化,因此包含 A.php 和 a.php 只會(huì)把文件包含一次。
Example #1 strrpos() 和 strripos() 如今用整個(gè)字符串作為 needle
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)
var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>
Example #2 沒有屬性的對(duì)象不再被當(dāng)成“empty”
<?php
class test { }
$t = new test();
var_dump(empty($t)); // echo bool(false)
if ($t) {
// Will be executed
}
?>
Example #3 有些情況下類必須在使用之前定義
<?php
//works with no errors:
$a = new a();
class a {
}
//throws an error:
$a = new b();
interface c{
}
class b implements c {
}
?>
PHP 5 里的新函數(shù)。下面是列表:
Arrays:
■array_combine() - 用一個(gè)數(shù)組作為鍵名,另一個(gè)數(shù)組作為值創(chuàng)建一個(gè)新數(shù)組
■array_diff_uassoc() - 計(jì)算數(shù)組的差別,并用用戶提供的回調(diào)函數(shù)作附加的索引檢查
■array_udiff() - 用回調(diào)函數(shù)比較數(shù)據(jù)來計(jì)算數(shù)組的差別
■array_udiff_assoc() - 計(jì)算數(shù)組的差別并作附加的索引檢查。用回調(diào)函數(shù)來比較數(shù)據(jù)
■array_udiff_uassoc() - 計(jì)算數(shù)組的差別并作附加的索引檢查。數(shù)據(jù)的比較和索引檢查都用回調(diào)函數(shù)來完成
■array_walk_recursive() - 對(duì)數(shù)組的每個(gè)成員遞歸使用用戶函數(shù)
■array_uintersect_assoc() - 計(jì)算數(shù)組的交集并作附加的索引檢查。用回調(diào)函數(shù)來比較數(shù)據(jù)
■array_uintersect_uassoc() - 計(jì)算數(shù)組的交集并作附加的索引檢查。數(shù)據(jù)和索引都用回調(diào)函數(shù)來比較
■array_uintersect() - 計(jì)算數(shù)組的交集。用回調(diào)函數(shù)來比較數(shù)據(jù)
InterBase:
■ibase_affected_rows() - 返回前一個(gè)查詢影響到的行的數(shù)目
■ibase_backup() - 在服務(wù)管理器中發(fā)起一個(gè)后臺(tái)任務(wù)并立即返回
■ibase_commit_ret() - 提交一個(gè)事務(wù)但不關(guān)閉
■ibase_db_info() - 請(qǐng)求有關(guān)數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息
■ibase_drop_db() - 刪除一個(gè)數(shù)據(jù)庫(kù)
■ibase_errcode() - 返回一個(gè)錯(cuò)誤代碼
■ibase_free_event_handler() - 取消一個(gè)已注冊(cè)的事件句柄
■ibase_gen_id() - 遞增指定的發(fā)生器并返回其新值
■ibase_maintain_db() - 在數(shù)據(jù)庫(kù)服務(wù)器上執(zhí)行一條維護(hù)命令
■ibase_name_result() - 給結(jié)果集指定一個(gè)名字
■ibase_num_params() - 返回一個(gè)準(zhǔn)備好的查詢的參數(shù)數(shù)目
■ibase_param_info() - 返回一個(gè)準(zhǔn)備好的查詢的參數(shù)信息
■ibase_restore() - 在服務(wù)管理器中發(fā)起一個(gè)還原任務(wù)并立即返回
■ibase_rollback_ret() - 回卷一筆事務(wù)并保留事務(wù)上下文
■ibase_server_info() - 請(qǐng)求有關(guān)數(shù)據(jù)庫(kù)服務(wù)器的統(tǒng)計(jì)信息
■ibase_service_attach() - 連接到服務(wù)管理器
■ibase_service_detach() - 從服務(wù)管理器斷開
■ibase_set_event_handler() - 注冊(cè)一個(gè)當(dāng)事件發(fā)布時(shí)要調(diào)用的回調(diào)函數(shù)
■ibase_wait_event() - 等待數(shù)據(jù)庫(kù)發(fā)布一條事件
iconv:
■iconv_mime_decode() - 解碼 MIME 頭信息字段
■iconv_mime_decode_headers() - 一次解碼多個(gè) MIME 頭信息字段
■iconv_mime_encode() - 壓縮 MIME 頭信息字段
■iconv_strlen() - 返回字符串中的字符計(jì)數(shù)
■iconv_strpos() - 在堆棧中找到第一個(gè)出現(xiàn)的子串位置
■iconv_strrpos() - 在堆棧中找到最后一個(gè)出現(xiàn)的子串位置
■iconv_substr() - 從字符串中取出一部分
Streams:
■stream_copy_to_stream() - 把一個(gè)流的數(shù)據(jù)復(fù)制到另一個(gè)流
■stream_get_line() - 根據(jù)給定的分隔符中流中讀取一行
■stream_socket_accept() - 接受一個(gè)由 stream_socket_server() 建立的 socket 連接
■stream_socket_client() - 打開一個(gè) Internet 或 Unix 域的 socket 連接
■stream_socket_get_name() - 獲取本地或遠(yuǎn)程的 sockets 名字
■stream_socket_recvfrom() - 從 socket 獲取數(shù)據(jù)(不管連接是否已經(jīng)建立)
■stream_socket_sendto() - 向 socket 發(fā)送一個(gè)消息(不管連接是否已經(jīng)建立)
■stream_socket_server() - 建立一個(gè) Internet 或 Unix 域服務(wù)器的 socket
Date/Time:
■idate() - 將本地時(shí)間格式化為整數(shù)
■date_sunset() - 計(jì)算所指定日期和地點(diǎn)的日落時(shí)間
■date_sunrise() - T計(jì)算所指定日期和地點(diǎn)的日出時(shí)間
■time_nanosleep() - 廷遲執(zhí)行程若干秒和若干納秒
Strings:
■str_split() - 把一個(gè)字符串分割為數(shù)組
■strpbrk() - 在一字符串中搜索給定的字符集合中的任意一個(gè)字符
■substr_compare() - 以二進(jìn)制的形式比較兩個(gè)字符串,從第一個(gè)字符串的 offset 開始,直到到達(dá)長(zhǎng)度為 length 時(shí)結(jié)束,可自定義是否大小寫敏感比較
Other:
【從 PHP 4 移植到 PHP 5 網(wǎng)站程序哪些需要修改】相關(guān)文章:
php網(wǎng)站修改工具06-18
PHP開發(fā)網(wǎng)站程序的優(yōu)點(diǎn)08-10
怎么修改php后綴09-30
PHP做網(wǎng)站優(yōu)勢(shì)有哪些09-08
PHP需要學(xué)的東西有哪些08-21
PHP網(wǎng)站模板精選06-13