PHP5.4的变化关注---What has changed in PHP 5.4.x(转)
What has changed in PHP 5.4.x
Most improvements in PHP 5.4.x have no impact on existing code. There are a few incompatibilities and new features that should be considered, and code should be tested before switching PHP versions in production environments.
1. Backward Incompatible Changes :一些内容将不兼容
7) 注意非数字数组键值 详看:PHP5.4中一个需要注意的变化(Chained string offsets)
8) 数组转字符串提示 E_NOTICE level error
- function foo($_GET, $_POST) {}
- //在5.3是没问题的.
- //php5.4出现:Fatal error: Cannot re-assign auto-global variable _GET in /opt/php-5.4.0/test.php on line 4
Although most existing PHP 5 code should work without changes, please take note of some backward incompatible changes:
- Safe mode is no longer supported. Any applications that rely on safe mode may need adjustment, in terms of security.
- Magic quotes has been removed. Applications relying on this feature may need to be updated, to avoid security issues. get_magic_quotes_gpc() and get_magic_quotes_runtime() now always return
FALSE.set_magic_quotes_runtime() raises anE_CORE_ERRORlevel error. - The register_globals and register_long_arrays php.ini directives have been removed.
- Call-time pass by reference has been removed.
- The break and continue statements no longer accept variable arguments (e.g., break 1 + foo() * $bar;). Static arguments still work, such as break 2;.
- In the date and time extension, the timezone can no longer be set using the TZ environment variable. Instead you have to specify a timezone using the date.timezone php.ini option or date_default_timezone_set() function. PHP will no longer attempt to guess the timezone, and will instead fall back to "UTC" and issue a
E_WARNING. - Non-numeric string offsets - e.g. $a['foo'] where $a is a string - now return false on isset() and true on empty(), and produce a
E_WARNINGif you try to use them. Offsets of types double, bool and null produce aE_NOTICE. Numeric strings (e.g. $a['2']) still work as before. Note that offsets like '12.3' and '5 foobar' are considered non-numeric and produce aE_WARNING, but are converted to 12 and 5 respectively, for backward compatibility reasons. Note: Following code returns different result. $str='abc';var_dump(isset($str['x'])); // false for PHP 5.4 or later, but true for 5.3 or less - Converting an array to a string will now generate an
E_NOTICElevel error, but the result of the cast will still be the string "Array". - Turning
NULL,FALSE, or an empty string into an object by adding a property will now emit anE_WARNINGlevel error, instead ofE_STRICT. - Parameter names that shadow super globals now cause a fatal error. This prohibits code like function foo($_GET, $_POST) {}.
- The Salsa10 and Salsa20 hash algorithms have been removed.
- array_combine() now returns array() instead of
FALSEwhen two empty arrays are provided as parameters. - If you use htmlentities() with asian character sets, it works like htmlspecialchars() - this has always been the case in previous versions of PHP, but now an
E_STRICTlevel error is emitted.
The following keywords are now reserved, and may not be used as names by functions, classes, etc.
The following functions have been removed from PHP:
- define_syslog_variables()
- import_request_variables()
- session_is_registered(), session_register() and session_unregister().
- The aliases mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(), mysqli::client_encoding() and mysqli_stmt::stmt().
2. New features 新功能
- $bin = 0b1101;
- echo $bin;
- //13
PHP 5.4.0 offers a wide range of new features:
- Support for traits has been added.
- Short array syntax has been added, e.g. $a = [1, 2, 3, 4]; or $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];.
- Function array dereferencing has been added, e.g. foo()[0].
- Closures now support $this.
- <?= is now always available, regardless of the short_open_tag php.ini option.
- Class member access on instantiation has been added, e.g. (new Foo)->bar().
- Class::{expr}() syntax is now supported.
- Binary number format has been added, e.g. 0b001001101.
- Improved parse error messages and improved incompatible arguments warnings.
- The session extension can now track the upload progress of files.
- Built-in development web server in CLI mode.
Changes in SAPI modules
- A new SAPI module named cli-server is now available.
- Added CLI option --rz which shows information of the named Zend extension.
- Added shortcut #inisetting=value to change php.ini settings at run-time in interactive readline CLI
- Added apache compatible functions: apache_child_terminate(), getallheaders(), apache_request_headers() and apache_response_headers() for FastCGI SAPI.
- PHP-FPM: Added the process.max setting, to control the number of processes that FPM can fork.
3 . Deprecated features in PHP 5.4.x 弃用的功能
Deprecated functions:
4. Changed Functions 变化的自带函数
Several functions were given new, optional parameters in PHP 5.4:
PHP Core:
- Added the optional
limitparameter to debug_backtrace() and debug_print_backtrace(), to limit the amount of stack frames returned. - is_link() now works properly for symbolic links on Windows Vista or later. Earlier systems do not support symbolic links.
OpenSSL:
- Added a no padding option to the openssl_encrypt() and openssl_decrypt() functions.
Intl:
- idn_to_ascii() and idn_to_utf8() now take two extra parameters, one indicating the variant (IDNA 2003 or UTS #46) and another, passed by reference, to return details about the operation in case UTS #46 is chosen.
5. New Functions 新增的函数
HP 5.4 introduced some new functions:
PHP Core:
- hex2bin()
- http_response_code()
- get_declared_traits()
- getimagesizefromstring()
- stream_set_chunk_size()
- socket_import_stream()
- trait_exists()
- header_register_callback()
- transliterator_create()
- transliterator_create_from_rules()
- transliterator_create_inverse()
- transliterator_get_error_code()
- transliterator_get_error_message()
- transliterator_list_ids()
- transliterator_transliterate()
6 . New Classes and Interfaces 新增的类和接口
The following classes were introduced in PHP 5.4.0:
SPL:
Json:
Snmp:
Intl:
7. New Methods 新增的方法
Several new methods were introduced in 5.4.0:
XSL:
SPL:
- RegexIterator::getRegex()
- SplObjectStorage::getHash()
- DirectoryIterator::getExtension()
- SplDoublyLinkedList::serialize()
- SplDoublyLinkedList::unserialize()
- SplFileInfo::getExtension()
- SplFileObject::fputcsv()
- SplQueue::serialize()
- SplQueue::unserialize()
- SplStack::serialize()
- SplStack::unserialize()
- SplTempFileObject::fputcsv()
- ReflectionExtension::isPersistent()
- ReflectionExtension::isTemporary()
- ReflectionClass::isCloneable()
- PDO::newRowset()
8. Removed Extensions 移除扩展sqlite
These extensions have been moved to PECL and are no longer part of the PHP distribution. The PECL package versions of these extensions will be created according to user demand.
- sqlite - Note that ext/sqlite3 and ext/pdo_sqlite are not affected
9 .Other changes to extensions 修改的扩展
Changes in extension behavior, and new features:
- mysqli - mysqli_result now implements Traversable
- pdo_mysql - Removed support for linking with MySQL client libraries older than 4.1
- The MySQL extensions mysql, mysqli and PDO_mysql use mysqlnd as the default library now. It is still possible to use libmysql by specifying a path to the configure options.
- mysqlnd - Added named pipes support
10. New Global Constants 新增的全局常量
PHP Core:
ENT_DISALLOWEDENT_HTML401ENT_HTML5ENT_SUBSTITUTEENT_XML1ENT_XHTMLIPPROTO_IPIPPROTO_IPV6IPV6_MULTICAST_HOPSIPV6_MULTICAST_IFIPV6_MULTICAST_LOOPIP_MULTICAST_IFIP_MULTICAST_LOOPIP_MULTICAST_TTLMCAST_JOIN_GROUPMCAST_LEAVE_GROUPMCAST_BLOCK_SOURCEMCAST_UNBLOCK_SOURCEMCAST_JOIN_SOURCE_GROUPMCAST_LEAVE_SOURCE_GROUP
Curl:
CURLOPT_MAX_RECV_SPEED_LARGECURLOPT_MAX_SEND_SPEED_LARGE
LIBXML_HTML_NODEFDTDLIBXML_HTML_NOIMPLIEDLIBXML_PEDANTIC
OPENSSL_CIPHER_AES_128_CBCOPENSSL_CIPHER_AES_192_CBCOPENSSL_CIPHER_AES_256_CBCOPENSSL_RAW_DATAOPENSSL_ZERO_PADDING
PHP_OUTPUT_HANDLER_CLEANPHP_OUTPUT_HANDLER_CLEANABLEPHP_OUTPUT_HANDLER_DISABLEDPHP_OUTPUT_HANDLER_FINALPHP_OUTPUT_HANDLER_FLUSHPHP_OUTPUT_HANDLER_FLUSHABLEPHP_OUTPUT_HANDLER_REMOVABLEPHP_OUTPUT_HANDLER_STARTEDPHP_OUTPUT_HANDLER_STDFLAGSPHP_OUTPUT_HANDLER_WRITE
PHP_SESSION_ACTIVEPHP_SESSION_DISABLEDPHP_SESSION_NONE
STREAM_META_ACCESSSTREAM_META_GROUPSTREAM_META_GROUP_NAMESTREAM_META_OWNERSTREAM_META_OWNER_NAMESTREAM_META_TOUCH
Zlib:
ZLIB_ENCODING_DEFLATEZLIB_ENCODING_GZIPZLIB_ENCODING_RAW
Intl:
U_IDNA_DOMAIN_NAME_TOO_LONG_ERRORIDNA_CHECK_BIDIIDNA_CHECK_CONTEXTJIDNA_NONTRANSITIONAL_TO_ASCIIIDNA_NONTRANSITIONAL_TO_UNICODEINTL_IDNA_VARIANT_2003INTL_IDNA_VARIANT_UTS46IDNA_ERROR_EMPTY_LABELIDNA_ERROR_LABEL_TOO_LONGIDNA_ERROR_DOMAIN_NAME_TOO_LONGIDNA_ERROR_LEADING_HYPHENIDNA_ERROR_TRAILING_HYPHENIDNA_ERROR_HYPHEN_3_4IDNA_ERROR_LEADING_COMBINING_MARKIDNA_ERROR_DISALLOWEDIDNA_ERROR_PUNYCODEIDNA_ERROR_LABEL_HAS_DOTIDNA_ERROR_INVALID_ACE_LABELIDNA_ERROR_BIDIIDNA_ERROR_CONTEXTJ
Json:
JSON_PRETTY_PRINTJSON_UNESCAPED_SLASHESJSON_NUMERIC_CHECKJSON_UNESCAPED_UNICODEJSON_BIGINT_AS_STRING
11. Changes to INI file handling php.ini的设置变化
he following php.ini directives have been removed:
- register_globals and register_long_arrays
- magic_quotes_gpc, magic_quotes_runtime, and magic_quotes_sybase
- allow_call_time_pass_reference
- define_syslog_variables
- highlight.bg
- session.bug_compat_42 and session.bug_compat_warn
- y2k_compliance
- safe_mode, safe_mode_gid, safe_mode_include_dir, safe_mode_exec_dir, safe_mode_allowed_env_vars, and safe_mode_protected_env_vars
The following php.ini directives have been added:
- cli.pager and cli.prompt for CLI SAPI using readline in interactive mode.
- cli_server.color to enable the built-in development web server to use ANSI color coding in terminal output.
- max_input_vars - specifies how many GET/POST/COOKIE input variables may be accepted.
- zend.multibyte - to control the new multibyte support.
- zend.script_encoding - This value will be used unless a "declare(encoding=...)" directive appears at the top of the script.
- zend.signal_check - to check for replaced signal handlers on shutdown.
- session.upload_progress.enabled, session.upload_progress.cleanup, session.upload_progress.prefix, session.upload_progress.name, session.upload_progress.freq, session.upload_progress.min_freq
- enable_post_data_reading - When it's disabled, the POST data is not read (and processed)
- windows_show_crt_warning - This directive shows the Windows CRT warnings when enabled. These warnings were displayed by default until now.
The following php.ini. directives have been changed:
- session.entropy_file now defaults to /dev/random or /dev/urandom depending on what has been guessed at compile time.
- session.entropy_length now defaults to 32.
12. Other changes 别的修改
- The default character set for htmlspecialchars() and htmlentities() is now UTF-8, instead of ISO-8859-1. Note that changing your output charset via the default_charset configuration setting does not affect htmlspecialchars/htmlentities unless you are passing "" (an empty string) as the encoding parameter to your htmlspecialchars()/htmlentities() calls. Generally we do not recommend doing this because you should be able to change your output charset without affecting the runtime charset used by these functions. The safest approach is to explicitly set the charset on each call to htmlspecialchars() and htmlentities().
E_ALLnow includesE_STRICTlevel errors in the error_reporting configuration directive.- SNMP now has an OOP API. Functions now return
FALSEon every error condition including SNMP-related (no such instance, end of MIB, etc). Thus, in particular, breaks previous behavior of get/walk functions returning an empty string on SNMP-related errors. Multi OID get/getnext/set queries are now supported. Dropped UCD-SNMP compatibility code, consider upgrading to net-snmp v5.3+, Net-SNMP v5.4+ is required for Windows version. In sake of adding support for IPv6 DNS name resolution of remote SNMP agent (peer) is done by extension now, not by Net-SNMP library anymore. - OpenSSL now supports AES.
- CLI SAPI doesn't terminate any more on fatal errors when using interactive mode with readline support.
- $_SERVER['REQUEST_TIME_FLOAT'] has been added to include microsecond precision.
- Added new hash algorithms: fnv132, fnv164, joaat
- Chained string offsets - e.g. $a[0][0] where $a is a string - now work.
- Arrays cast from SimpleXMLElement now always contain all nodes instead of just the first matching node. All SimpleXMLElement children are now always printed when using var_dump(), var_export() and print_r().
- It's now possible to enforce the class' __construct arguments in an abstract constructor in the base class.
PHP5.4的变化关注---What has changed in PHP 5.4.x(转)的更多相关文章
- (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...
- 设计模式之 观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...
- JDK观察者模式和事件机制比较<转>
原文:(六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型) 作者:zuoxiaolong8810(左潇龙),转载请注明出处. 本章我们讨论一个除前面的单例以及代理模式之外,一个WEB项目 ...
- Backbone源码分析(二)
在传统MVC框架模式中,Model承担业务逻辑的任务.Backbone作为一个mvc框架,主要的业务逻辑交由Model与Collection来实现.Model代表领域对象,今天主要学一下Model源码 ...
- 前端学PHP之面向对象系列第二篇——魔术方法
× 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...
- ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)
一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...
- 从零开始攻略PHP(7)——面向对象(上)
1.理解面向对象的概念 面向对象软件的一个重要优点是支持和鼓励封装的能力.封装也叫数据隐藏. 在面向对象的软件中,对象是一个被保存数据和操作这些数据的操作方法的唯一.可标识的集合. 对象可以按类进行分 ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
- 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用
在上篇<基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理>介绍了Bootstrap开发框架的一些基础性概括,包括总体界面效果,以及布局.菜单等内容, ...
随机推荐
- 02-测试、文件读写、xml解析
测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:syste ...
- js学习笔记之:时间(一)
日期和时间是javaScript中常用的对象,可以通过此对象判断星期.生日.纪念日等,提高网站的人性化.下面将通过实例来介绍一下学习javaScript中有关时间和日期的知识点: (1)日期和时间函数 ...
- 如何用angularjs制作一个完整的表格之二__表格分页功能
接上一次,这次主要介绍表格分页功能,由于项目需要这个案例是关于前端分页的方式,现在很少会这么用了,但如有需要可以参考其中的思路 html: 1.通过UL来展示页标,其中每个页标的li是通过异步加载从获 ...
- JS判断鼠标从哪个方向进入DIV容器
写的不够高大上 , 不要介意哦... Js: //进去 $(".flash").bind("mouseenter",function(e){ /** the w ...
- centos+nginx+uwsgi+virtualenv+flask 多站点环境搭建
环境: centos x64 6.6 nginx 1.6.2 python 2.7.9 uwsgi 2.0.9 virtualenv 12.0.5 flask 0.10.1 正文: 1.安装nginx ...
- STM32学习笔记——新建工程模板步骤(向原子哥学习)
1. 在创建工程之前,先在电脑的某个目录下面建立一个文件夹,我们先把它命名为Template,后面建立的工程可以放在这个文件夹下.在 Template 工程目录下面,新建 3 个文件夹USER , ...
- 钟表维修管理系统技术解析(一) MVC架构搭建
钟表维修管理系统技术解析(一) MVC架构搭建 1.1新建项目 第一步:打开VS2010界面,点击左上角文件,点击新建,选择项目 1.1(图1) 第二步:点击网站Web类型,选择ASP.net MV ...
- decimal类型数据如何保留两位小数
日常开发中,decimal作为货币类型,经常会处理保留两位小数的问题. 本站整理两种,decimal类型保留两位小数的方法. 第一种: decimal d = 46.28111m;string res ...
- [Apio2014]回文串
http://www.lydsy.com:808/JudgeOnline/problem.php?id=3676 这是一道回文树裸题,具体如何建图见http://blog.csdn.net/u0133 ...
- How to use PhotoshopApplication in maxscript
未完待续 ps_app= createOLEObject "Photoshop.Application" ps_app.Load "d:\\test\\aaa.tga&q ...