首页 > 编程 > PHP > 正文

PHP5.3.x相较于PHP5.2.x新增、弃用、变化的功能

2020-03-22 16:28:38
字体:
来源:转载
供稿:网友
  • 一、PHP5.3.x不向下兼容的变化

    尽管大多数现有的 PHP 5 代码无需改变就可以工作,但是请注意一些不向下兼容的变化:

    在 PHP 5.3.x 的所有绑定扩展中应用了新的内部参数解析API, 当给函数传递了不兼容的参数时将返回 NULL. 但有一些例外,比如函数 get_html' target='_blank'>class() 在出现错误时将会返回 FALSE.
    clearstatcache() 默认不再清除缓存的 realpath.
    realpath() 现在是完全与平台无关的. 结果是非法的相对路径比如 __FILE__ . "/../x" 将不会工作.
    call_user_func() 系列函数即使被调用者是一个父类也使用 $this.
    数组函数 natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), 和 array_unique() 将不再接受对象作为参数. 在将这些函数应用于对象时, 请首先将对象转换为数组.
    按引用传递参数的函数在被按值传递调用时行为发生改变. 此前函数将接受按值传递的参数, 现在将抛出致命错误. 之前任何期待传递引用但是在调用时传递了常量或者字面值 的函数, 需要在调用前改为将该值赋给一个变量。
    新的 mysqlnd 库需要使用 MySQL 4.1 新的 41 字节密码格式。继续使用旧的 16 字节密码将导致 mysql_connect() 和其它类似函数 抛出 "mysqlnd cannot connect to MySQL 4.1+ using old authentication." 错误.
    新的 mysqlnd 库将不再读取 MySQL 配置文件(my.cnf/my.ini), 这与旧版本的 libmysql 库不同. 如果你的代码依赖于这些配置 文件, 你可以使用 mysqli_options() 显式地加载它. 注意, 这意味着如果 PDO 中的 MySQL 支持使用了 mysqlnd 进行编译,PDO 特有常量 PDO::MYSQL_ATTR_READ_DEFAULT_FILE 和 PDO::MYSQL_ATTR_READ_DEFAULT_GROUP 将是未定义的.
    SplFileInfo 及其相关目录类会移除末尾的 /.
    __toString 魔术方法不再接受参数.
    魔术方法 __get, __set, __isset, __unset, and __call 应该总是公共的(public)且不能是静态的(static). 方法签名是必须的.
    现在 __call 魔术方法在访问私有的(private)和被保护的(protected)方法时被调用.
    函数内 include 或者 require 一个文件时,文件内 将不能使用 func_get_arg(), func_get_args() 和 func_num_args() 函数。
    新增了一个包裹在 MHASH 扩展外面的仿真层。但是并非所有的算法都涉及到了,值得注意的是 s2k 哈希算法。这意味着 s2k 哈希算法在 PHP 5.3.0 中不再可用。

    以下关键词被保留,将不能被用作函数名, 类名等。
    goto
    namespace

    二、PHP5.3.x相较于PHP5.2.x弃用的功能函数:

    PHP 5.3.0 新增了两个错误等级: E_DEPRECATED 和 E_USER_DEPRECATED. 错误等级 E_DEPRECATED 被用来说明一个函数或者功能已经被弃用. E_USER_DEPRECATED 等级目的在于表明用户代码中的弃用功能, 类似于 E_USER_ERROR 和 E_USER_WARNING 等级.

    下面是被弃用的 INI 指令列表. 使用下面任何指令都将导致 E_DEPRECATED 错误.
    define_syslog_variables
    register_globals
    register_long_arrays
    safe_mode
    magic_quotes_gpc
    magic_quotes_runtime
    magic_quotes_sybase
    弃用 INI 文件中以 '#' 开头的注释.

    PHP5.3.x弃用函数:
    call_user_method() (使用 call_user_func() 替代)
    call_user_method_array() (使用 call_user_func_array() 替代)
    define_syslog_variables()
    dl()函数默认被关闭, 并且现在只在CLI, CGI, 和内嵌的SAPI环境下可用.
    ereg() (使用 preg_match() 替代)
    ereg_replace() (使用 preg_replace() 替代)
    eregi() (使用 preg_match() 配合 'i' 修正符替代)
    eregi_replace() (使用 preg_replace() 配合 'i' 修正符替代)
    set_magic_quotes_runtime() 以及它的别名函数 magic_quotes_runtime()
    session_register() (使用 $_SESSION 超全部变量替代)
    session_unregister() (使用 $_SESSION 超全部变量替代)
    session_is_registered() (使用 $_SESSION 超全部变量替代)
    set_socket_blocking() (使用 stream_set_blocking() 替代)
    split() (使用 preg_split() 替代)
    spliti() (使用 preg_split() 配合 'i' 修正符替代)
    sql_regcase()
    mysql_db_query() (使用 mysql_select_db() 和 mysql_query() 替代)
    mysql_escape_string() (使用 mysql_real_escape_string() 替代)
    废弃以字符串传递区域设置名称. 使用 LC_* 系列常量替代.
    mktime() 的 is_dst 参数. 使用新的时区处理函数替代.

    PHP5.3.x弃用的功能:

    弃用通过引用分配 new 的返回值.
    调用时传递引用被弃用.
    三、PHP5.3引入的一些新函数:

    PHP核心函数:
    array_replace() - 将一个数组的元素用另外一个数组的元素进行替换.
    array_replace_recursive() - 将一个数组的元素用一组传递进来的数组进行递归替换.
    class_alias() - 为用户定义的类创建一个别名.
    forward_static_call() - 从一个方法环境调用一个用户函数.
    forward_static_call_array() - 从一个方法环境调用一个用户函数, 使用数组中的元素作为参数.
    gc_collect_cycles() - 强制收集任何存在的废物循环.
    gc_disable() - 撤销循环引用收集器.
    gc_enable() - 激活循环引用收集器.
    gc_enabled() - 返回循环引用收集器的状态.
    get_called_class() - 返回调用的静态方法所在的类的名称.
    gethostname() - 返回本地机器的当前主机名.
    header_remove() - 在使用 header() 函数之前移除 HTTP Header.
    lcfirst() - 蒋某一字符串第一个字符转化为小写.
    parse_ini_string() - 解析配置字符串.
    quoted_printable_encode() - 转换 8 位的字符串为引用的可打印字符串.
    str_getcsv() - 将 CSV 字符串解析为数组.
    stream_context_set_default() - 设置默认的流环境.
    stream_supports_lock() - 如果流支持锁定则返回 TRUE.
    stream_context_get_params() - 获取一个流环境的参数.
    streamWrapper::stream_cast() - 获取底层的流资源.
    streamWrapper::stream_set_option() - 更改流选项

    Date/Time:
    date_add() - 向 DateTime 对象增加一定数量的天, 月, 年, 小时, 分钟和秒数.
    date_create_from_format() - 根据给定的格式, 返回一个 DateTime 对象.
    date_diff() - 返回两个 DateTime 对象的不同之处.
    date_get_last_errors() - 返回最后的日期/时间操作中产生的警告和错误.
    date_parse_from_format() - 获取一个日期的信息.
    date_sub() - 从 DateTime 对象减去一定数量的天, 月, 年, 时和秒数.
    timezone_version_get() - 返回时区数据库的版本.

    GMP:
    gmp_testbit() - 测试一个比特是否被设置.

    Hash:
    hash_copy() - 复制哈希环境.

    IMAP:
    imap_gc() - 清除 IMAP 缓存.
    imap_utf8_to_mutf7() - 编码 UTF-8 字符串为改进的 UTF-7 编码.
    imap_mutf7_to_utf8() - 解码改进的 UTF-7 字符串为 UTF-8 编码.

    JSON:
    json_last_error() - 返回最后发生的 JSON 错误.

    MySQL 改进:
    mysqli_fetch_all() - 以关联数组、索引数组或者二者都有获取全部结果行.
    mysqli_get_connection_stats() - 返回客户端连接的统计资料.
    mysqli_poll() - 轮询连接.
    mysqli_reap_async_query() - 从异步查询中获取结果.

    OpenSSL:
    openssl_random_pseudo_bytes() - 返回一个以伪随机字节填充的指定长度的字符串.

    PCNTL:
    pcntl_signal_dispatch() - 为挂起信号调用信号处理器.
    pcntl_sigprocmask() - 设置和获取阻塞信号.
    pcntl_sigtimedwait() - 等待信号, 但是有超时时间.
    pcntl_sigwaitinfo() - 等待信号.

    PCRE:
    preg_filter() - 执行正则查找和替换, 仅仅返回匹配正则的结果.

    信号:
    msg_queue_exists() - 检查消息队列是否存在.
    shm_has_var() - 检查在一个共享内存段中, 是否存在指定的键(key).

    以下函数被原生支持, 因此它们在所有运行 PHP 的操作系统上均可用.
    acosh()
    asinh()
    atanh()
    expm1()
    log1p()
    四、新参数
    在 PHP 5.3 中一些函数新增了参数和选项:

    PHP 核心:
    clearstatcache() - 新增 clear_realpath_cache 和 filename 参数.
    copy() - 新增流环境参数 context.
    fgetcsv() - 新增 escape 参数.
    ini_get_all() - 新增 details 参数.
    nl2br() - 新增 is_xhtml 参数.
    parse_ini_file() - 新增 scanner_mode 参数.
    round() - 新增 mode 参数.
    stream_context_create() - 新增 params 参数.
    strstr() 和 stristr() - 新增 before_needle 参数.

    json:
    json_encode() - 新增 options 参数.
    json_decode() - 新增 depth 参数.

    流(Streams):
    stream_select(), stream_set_blocking(), stream_set_timeout(), 和 stream_set_write_buffer() 使用用户空间流包裹器.
    sybase_ct:

    sybase_connect() - 新增 new 参数.

    PHP 5.3.0 中的新方法参数:

    PHP 核心:
    Exception::__construct() - 新增 previous 参数


    五、新的全局常量

    PHP 核心:
    __DIR__
    __NAMESPACE__
    E_DEPRECATED
    E_USER_DEPRECATED
    INI_SCANNER_NORMAL
    INI_SCANNER_RAW
    PHP_MAXPATHLEN
    PHP_WINDOWS_NT_DOMAIN_CONTROLLER
    PHP_WINDOWS_NT_SERVER
    PHP_WINDOWS_NT_WORKSTATION
    PHP_WINDOWS_VERSION_BUILD
    PHP_WINDOWS_VERSION_MAJOR
    PHP_WINDOWS_VERSION_MINOR
    PHP_WINDOWS_VERSION_PLATFORM
    PHP_WINDOWS_VERSION_PRODUCTTYPE
    PHP_WINDOWS_VERSION_SP_MAJOR
    PHP_WINDOWS_VERSION_SP_MINOR
    PHP_WINDOWS_VERSION_SUITEMASK

    cURL:
    CURLOPT_PROGRESSFUNCTION

    GD:
    IMG_FILTER_PIXELATE

    JSON:
    JSON_ERROR_CTRL_CHAR
    JSON_ERROR_DEPTH
    JSON_ERROR_NONE
    JSON_ERROR_STATE_MISMATCH
    JSON_ERROR_SYNTAX
    JSON_FORCE_OBJECT
    JSON_HEX_TAG
    JSON_HEX_AMP
    JSON_HEX_APOS
    JSON_HEX_QUOT

    LDAP:
    LDAP_OPT_NETWORK_TIMEOUT

    libxml:
    LIBXML_LOADED_VERSION

    PCRE:
    PREG_BAD_UTF8_OFFSET_ERROR

    PCNTL:
    BUS_ADRALN
    BUS_ADRERR
    BUS_OBJERR
    CLD_CONTIUNED
    CLD_DUMPED
    CLD_EXITED
    CLD_KILLED
    CLD_STOPPED
    CLD_TRAPPED
    FPE_FLTDIV
    FPE_FLTINV
    FPE_FLTOVF
    FPE_FLTRES
    FPE_FLTSUB
    FPE_FLTUND
    FPE_INTDIV
    FPE_INTOVF
    ILL_BADSTK
    ILL_COPROC
    ILL_ILLADR
    ILL_ILLOPC
    ILL_ILLOPN
    ILL_ILLTRP
    ILL_PRVOPC
    ILL_PRVREG
    POLL_ERR
    POLL_HUP
    POLL_IN
    POLL_MSG
    POLL_OUT
    POLL_PRI
    SEGV_ACCERR
    SEGV_MAPERR
    SI_ASYNCIO
    SI_KERNEL
    SI_MESGQ
    SI_NOINFO
    SI_QUEUE
    SI_SIGIO
    SI_TIMER
    SI_TKILL
    SI_USER
    SIG_BLOCK
    SIG_SETMASK
    SIG_UNBLOCK
    TRAP_BRKPT
    TRAP_TRACE
    六、新增、移除的扩展

    PHP 5.3.0 新增以下扩展(默认):
    Enchant - 各种拼写库的抽象层
    文件信息 - 已经被移除的 Mimetype 扩展的一个改进的、更加可靠的替代, 以 BC 为特色. www.it165.net
    INTL - 国际化扩展. INTL 是 » ICU 库的一个包装器.
    Phar - PHP 档案文件的实现.
    SQLite3 - 支持 SQLite version 3 数据库.
    mysqlnd 是随 PHP 发布的新核心库. 它是 PHP 独有的 libmysql 的替代. 如果系统上未发现 libmysql, mysqlnd 将被用来构建 mysql, mysqli 和 PDO_MySQL 扩展. 甚至 libmysql 存在的情况下, 它也可以被用来代替 libmysql. 由于性能上的原因, 推荐在全部的 PHP 安装中都使用 mysqlnd.

    另外,这些扩展已经被移动至 PECL 并且不再是 PHP 发布的一部分. 这些扩展的 PECL 包版本将根据用户需求创建.

    dbase - 不再被保持
    fbsql - 不再被保持
    fdf - 被保持
    ming - 被保持
    msql - 不再被保持
    ncurses - 被保存
    sybase - 停用; 使用 sybase_ct 扩展代替.
    mhash - 停用; 使用 hash 扩展代替. hash 全兼容 mhash; 全部使用旧函数的应用程序仍将可以工作.

    七、PHP 5.3.0 新增了以下类:

    日期/时间:
    DateInterval
    DatePeriod

    Phar:
    Phar
    PharData
    PharException
    PharFileInfo

    SPL:
    FilesystemIterator
    GlobIterator
    MultipleIterator
    RecursiveTreeIterator
    SplDoublyLinkedList
    SplFixedArray
    SplHeap
    SplMaxHeap
    SplMinHeap
    SplPriorityQueue
    SplQueue
    SplStack
    八、INI 文件处理改变

    PHP5.3.0显著改进了 INI 文件的性能和解析, 并且新增了若干语法功能.

    标准的 php.ini 文件被重新组织和命名. php.ini-development 包含在开发环境中推荐使用的设置. php.ini-production 包含在生产环境中推荐使用的设置.
    支持两个特殊章节: [PATH=/opt/httpd/www.example.com/] 和 [HOST=www.example.com]. 这两个章节里的指令不能被用户定义的 INI 文件或者运行时覆盖. 关于这些章节的更多信息, 可以这里找到.
    移除了 zend_extension_debug and zend_extension_ts. 使用 zend_extension 指令来加载全部 Zend 扩展.
    移除了 zend.ze1_compatibility_mode. 如果该 INI 指令被设置为 On, 启动时将抛出 E_ERROR 级别错误.
    在 "extension" 指令中可以使用全路径来加载模块.
    "ini变量" 现在几乎在 php.ini 文件的任何地方都可以使用.
    可以在运行时收紧 open_basedir 限制条件.
    可以在 INI 选项数组中使用字母数字或者变量.
    get_cfg_var() 现在可以返回 "数组(array)" INI 选项.
    添加了一个新指令 mail.add_x_header.
    user_ini.filename 是新增的.
    user_ini.cache_ttl 也是新增的.
    exit_on_timeout 也是新增的.
    open_basedir 现在是 PHP_INI_ALL 的.

    新增以下指令:
    新的 .htaccess-style 用户 INI 文件机制中的 user_ini.filename 和 user_ini.cache_ttl.
    新增 mbstring.http_output_conv_mimetype. 该指令指定了 mb_output_handler() 激活内容类型的正则表达式.
    新增 request_order. 允许控制哪些外部变量在 $_REQUEST 中可用.

    以下 ini 指令默认值更新:
    session.use_only_cookies 默认被设置为 "1"(打开).
    oci8.default_prefetch 变更为从 "10" 到 "100".


    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表