设为首页 收藏本站
查看: 685|回复: 0

[经验分享] PHP5.4的变化关注---What has changed in PHP 5.4.x

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-26 14:41:47 | 显示全部楼层 |阅读模式

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  :一些内容将不兼容



1)不再支持安全模式,

2) 移除魔术引用,

3) 移除全局变量php.ini设置,

4) 移除Call-time
pass by reference(如call_user_func_array('function', array(&$a)
不支持)

5)break/continue 不接受参数,但保留接受静态参数

6)必须设置时区timezone



7) 注意非数字数组键值 详看:PHP5.4中一个需要注意的变化(Chained
string offsets)


8) 数组转字符串提示 E_NOTICE level
error

8) 使用超全局变量做函数参数将导致致命错误

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
    an E_CORE_ERROR level 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_WARNING if you try to use them. Offsets of types double, bool and null produce a E_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 a E_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_NOTICE level 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 an E_WARNING level error, instead of E_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 FALSE when 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_STRICT level error is emitted.


The following keywords are now reserved,
and may not be used as names by functions, classes, etc.



  • trait

  • callable

  • insteadof


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 新功能



1)traits特性的功能相当使一个类可以存在两个父类。在php5.4之前,一个类不能继承两个父类。



   2)数组可以类似c/c++写法

   3)Class::{expr}() 这个写法有点迷糊

  4)支持二进制数值,即二进制直接写赋值给变量:

$bin  = 0b1101;
echo $bin;
//13

而不必使用bin2dec转换成十进制

       想看大鸟:二进制直接量(binary number format)

  5)上传进度支持(Upload
progress in sessions)

  6)php5.4可以编译成命令行模式的server





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:



  • mcrypt_generic_end()

  • mysql_list_dbs()


4. Changed Functions 变化的自带函数



Several functions were given new, optional parameters in PHP 5.4:

PHP Core:



  • Added the optional limit parameter 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()


SPL:



  • class_uses()


Session:



  • session_status()

  • session_register_shutdown()


Mysqli:



  • mysqli_error_list()

  • mysqli_stmt_error_list()


Libxml:



  • libxml_set_external_entity_loader()


LDAP:



  • ldap_control_paged_result()

  • ldap_control_paged_result_response()


Intl:



  • transliterator_create()

  • transliterator_create_from_rules()

  • transliterator_create_inverse()

  • transliterator_get_error_code()

  • transliterator_get_error_message()

  • transliterator_list_ids()

  • transliterator_transliterate()


Zlib:



  • zlib_decode()

  • zlib_encode()


6 . New Classes and Interfaces 新增的类和接口



The following classes were introduced in PHP 5.4.0:

SPL:



  • CallbackFilterIterator

  • RecursiveCallbackFilterIterator


Reflection:



  • ReflectionZendExtension


Json:



  • JsonSerializable


Session:



  • SessionHandler

  • SessionHandlerInterface


Snmp:



  • SNMP


Intl:



  • Transliterator

  • Spoofchecker


7. New Methods 新增的方法



Several new methods were introduced in 5.4.0:

XSL:



  • XsltProcessor::setSecurityPrefs()

  • XsltProcessor::getSecurityPrefs()


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()


Reflection:



  • ReflectionExtension::isPersistent()

  • ReflectionExtension::isTemporary()

  • ReflectionClass::isCloneable()


Closure:



  • Closure::bind()

  • Closure::bindTo()


PDO_dblib:



  • PDO::newRowset()


StreamWrapper:



  • StreamWrapper::stream_metadata()

  • StreamWrapper::stream_truncate()


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_DISALLOWED

  • ENT_HTML401

  • ENT_HTML5

  • ENT_SUBSTITUTE

  • ENT_XML1

  • ENT_XHTML

  • IPPROTO_IP

  • IPPROTO_IPV6

  • IPV6_MULTICAST_HOPS

  • IPV6_MULTICAST_IF

  • IPV6_MULTICAST_LOOP

  • IP_MULTICAST_IF

  • IP_MULTICAST_LOOP

  • IP_MULTICAST_TTL

  • MCAST_JOIN_GROUP

  • MCAST_LEAVE_GROUP

  • MCAST_BLOCK_SOURCE

  • MCAST_UNBLOCK_SOURCE

  • MCAST_JOIN_SOURCE_GROUP

  • MCAST_LEAVE_SOURCE_GROUP


Curl:



  • CURLOPT_MAX_RECV_SPEED_LARGE

  • CURLOPT_MAX_SEND_SPEED_LARGE


LibXML:



  • LIBXML_HTML_NODEFDTD

  • LIBXML_HTML_NOIMPLIED

  • LIBXML_PEDANTIC


OpenSSL:



  • OPENSSL_CIPHER_AES_128_CBC

  • OPENSSL_CIPHER_AES_192_CBC

  • OPENSSL_CIPHER_AES_256_CBC

  • OPENSSL_RAW_DATA

  • OPENSSL_ZERO_PADDING


Output buffering:



  • PHP_OUTPUT_HANDLER_CLEAN

  • PHP_OUTPUT_HANDLER_CLEANABLE

  • PHP_OUTPUT_HANDLER_DISABLED

  • PHP_OUTPUT_HANDLER_FINAL

  • PHP_OUTPUT_HANDLER_FLUSH

  • PHP_OUTPUT_HANDLER_FLUSHABLE

  • PHP_OUTPUT_HANDLER_REMOVABLE

  • PHP_OUTPUT_HANDLER_STARTED

  • PHP_OUTPUT_HANDLER_STDFLAGS

  • PHP_OUTPUT_HANDLER_WRITE


Sessions:



  • PHP_SESSION_ACTIVE

  • PHP_SESSION_DISABLED

  • PHP_SESSION_NONE


Streams:



  • STREAM_META_ACCESS

  • STREAM_META_GROUP

  • STREAM_META_GROUP_NAME

  • STREAM_META_OWNER

  • STREAM_META_OWNER_NAME

  • STREAM_META_TOUCH


Zlib:



  • ZLIB_ENCODING_DEFLATE

  • ZLIB_ENCODING_GZIP

  • ZLIB_ENCODING_RAW


Intl:



  • U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR

  • IDNA_CHECK_BIDI

  • IDNA_CHECK_CONTEXTJ

  • IDNA_NONTRANSITIONAL_TO_ASCII

  • IDNA_NONTRANSITIONAL_TO_UNICODE

  • INTL_IDNA_VARIANT_2003

  • INTL_IDNA_VARIANT_UTS46

  • IDNA_ERROR_EMPTY_LABEL

  • IDNA_ERROR_LABEL_TOO_LONG

  • IDNA_ERROR_DOMAIN_NAME_TOO_LONG

  • IDNA_ERROR_LEADING_HYPHEN

  • IDNA_ERROR_TRAILING_HYPHEN

  • IDNA_ERROR_HYPHEN_3_4

  • IDNA_ERROR_LEADING_COMBINING_MARK

  • IDNA_ERROR_DISALLOWED

  • IDNA_ERROR_PUNYCODE

  • IDNA_ERROR_LABEL_HAS_DOT

  • IDNA_ERROR_INVALID_ACE_LABEL

  • IDNA_ERROR_BIDI

  • IDNA_ERROR_CONTEXTJ


Json:



  • JSON_PRETTY_PRINT

  • JSON_UNESCAPED_SLASHES

  • JSON_NUMERIC_CHECK

  • JSON_UNESCAPED_UNICODE

  • JSON_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 &quot;declare(encoding=...)&quot; 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 &quot;&quot; (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_ALL now includes E_STRICT level
    errors in the error_reporting configuration
    directive.

  • SNMP now
    has an OOP API. Functions now return FALSE on 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&#43;, Net-SNMP v5.4&#43; 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.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104556-1-1.html 上篇帖子: php使用CURL伪造IP和来源的方法 下篇帖子: php 支持断点续传的文件下载类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表