这篇文章主要介绍了PHP语言及其最新版本的更新内容和配置教程。PHP作为一种流行的Web开发脚本语言,以其易学、高效和强大的功能受到开发者青睐。文章详细列举了PHP 8.5.4版本的新特性,包括属性钩子、不对称可见性控制、新的DOM API支持HTML5等,同时提到了一些弃用的功能和向后不兼容的改动。
软件还提供了丰富的内置函数和扩展库,支持多种数据库和Web服务器,并且完全免费。文章还详细介绍了如何配置PHP环境,包括DLL文件的位置、php.ini的修改以及Apache的配置步骤。此外,文中解释了Thread Safe和Non Thread Safe版本的区别,提醒用户根据运行模式选择合适的版本。
更新日志部分列出了多项修复内容,涵盖了核心、卷曲、日期、LDAP等方面的问题。总的来说,这篇文章为开发者提供了全面的PHP信息,帮助他们更好地理解和使用这门语言。
作为一个开发者,我觉得PHP的新特性非常实用,尤其是对HTML5的支持和属性钩子功能,这些都能提高开发效率。不过弃用的部分需要注意,避免代码出现兼容性问题。总体来说,PHP仍然是Web开发中的重要工具之一。

php最新版本新特性
一、新功能和优化
1、属性钩子
属性钩子提供对计算属性的支持,这些属性可以被 IDE 和静态分析工具直接理解,而无需编写可能会失效的 docblock 注释。此外,它们允许可靠地预处理或后处理值,而无需检查类中是否存在匹配的 getter 或 setter。
2、不对称可见性
现在可以独立地控制写入属性的作用域和读取属性的作用域,减少了需要编写繁琐的 getter 方法来公开属性值而不允许从类外部修改属性的需求。
3、#[\Deprecated] 属性
新的 #[\Deprecated] 属性使 PHP 的现有弃用机制可用于用户定义的函数、方法和类常量。
4、新的 ext-dom 功能和 HTML5 支持
新的 DOM API 包括符合标准的支持,用于解析 HTML5 文档,修复了 DOM 功能行为中的几个长期存在的规范性错误,并添加了几个函数,使处理文档更加方便。
新的 DOM API 可以在 Dom 命名空间中使用。使用新的 DOM API 可以使用 Dom\HTMLDocument 和 Dom\XMLDocument 类创建文档。
5、BCMath 的对象 API
新的 BcMath\Number 对象使在处理任意精度数字时可以使用面向对象的方式和标准的数学运算符。
这些对象是不可变的,并实现了 Stringable 接口,因此可以在字符串上下文中使用,如 echo $num。
6、新的 array_*() 函数
新增函数 array_find()、array_find_key()、array_any() 和 array_all()。
7、PDO 驱动程序特定子类 RFC
新的 Pdo\Dblib、Pdo\Firebird、Pdo\MySql、Pdo\Odbc、Pdo\Pgsql 和 Pdo\SQLite 的子类可用。
8、new MyClass()->method() 不需要括号
现在可以在不使用括号包裹 new 表达式的情况下访问新实例化对象的属性和方法。
二、新的类、接口和函数
1、新的 延迟对象。
2、基于 IR 框架的新 JIT 实现。
3、新增 request_parse_body() 函数。
4、新增 bcceil()、bcdivmod()、bcfloor() 和 bcround() 函数。
5、新增 RoundingMode 枚举用于 round(),包括 4 个新的舍入模式 TowardsZero、AwayFromZero、NegativeInfinity 和 PositiveInfinity。
6、新增 DateTime::createFromTimestamp()、DateTime::getMicrosecond()、DateTime::setMicrosecond()、DateTimeImmutable::createFromTimestamp()、DateTimeImmutable::getMicrosecond() 和 DateTimeImmutable::setMicrosecond() 方法。
7、新增 mb_trim()、mb_ltrim()、mb_rtrim()、mb_ucfirst() 和 mb_lcfirst() 函数。
8、新增 pcntl_getcpu()、pcntl_getcpuaffinity()、pcntl_getqos_class()、pcntl_setns() 和 pcntl_waitid() 函数。
9、新增 ReflectionClassConstant::isDeprecated()、ReflectionGenerator::isClosed() 和 ReflectionProperty::isDynamic() 方法。
10、新增 http_get_last_response_headers()、http_clear_last_response_headers() 和 fpow() 函数。
11、新增 XMLReader::fromStream()、XMLReader::fromUri()、XMLReader::fromString()、XMLWriter::toStream()、XMLWriter::toUri() 和 XMLWriter::toMemory() 方法。
12、新增 grapheme_str_split() 函数。
三、弃用和向后不兼容
1、IMAP、OCI8、PDO_OCI 和 pspell 扩展已从 PHP 中分离并移至 PECL。
2、隐式可空参数类型现已弃用。
3、使用 _ 作为类名现已弃用。
4、将零的负数次幂现已弃用。
5、向 round() 传递无效模式将抛出 ValueError。
6、来自扩展 date、intl、pdo、reflection、spl、sqlite、xmlreader 的类常量现在是有类型的。
7、GMP 类现已是 final 类。
8、已删除 MYSQLI_SET_CHARSET_DIR、MYSQLI_STMT_ATTR_PREFETCH_ROWS、MYSQLI_CURSOR_TYPE_FOR_UPDATE、MYSQLI_CURSOR_TYPE_SCROLLABLE 和 MYSQLI_TYPE_INTERVAL 常量。
9、已弃用 mysqli_ping()、mysqli_kill()、mysqli_refresh() 函数,mysqli::ping()、mysqli::kill()、mysqli::refresh() 方法,以及 MYSQLI_REFRESH_* 常量。
10、stream_bucket_make_writeable() 和 stream_bucket_new() 现在返回 StreamBucket 实例而不是 stdClass。
11、exit() 行为变更。
12、E_STRICT 常量已弃用。
软件特色
1、内置了对文件上传、密码认证、Cookies 操作、邮件收发、 动态GIF生成等功能。
2、PHP5直接为很多数据库提供原本的连接,包括Oracle,Sybase,Postgres,Mysql,Informix,Dbase,Solid,Access 等,完全支持ODBC接口,用户更换平台时,无需变换PHP代码,可即拿即用。
3、软件完全免费,并提供了更多web server的支持,例如Zeus,Netscape EntERPrise,Apache Win32 module,并增加了很多性能,并修正了很多bug。
php配置教程
1)在PHP安装目录下,找到文件php5ts.dll,将其复制到C盘system32目录下。
2)在PHP安装目录下,找到文件libmysql.dll,将其复制到C盘system32目录下。
3)在PHP安装目录下,找到文件php.ini,将其复制到C:windows下。这个文件是配置PHP的基本文件,如设置服务器根目录配置,用文本编辑器打开php.ini文件,找到"doc_root=",因为我把Apache默认安装在D盘根目录下,所以,修改这个配置项的值为:doc_root=d:apache2htdocs
提示:用户根据自己安装Apache的路径,修改该配置项的值。
4)在php.ini中找到“extension_dir ="./"”,这个配置项用来载入PHP的扩展模块,修改该配置项如下:extension_dir = d:phpext,(需要按自己的安装目录修改PHP的载入位置)。
5)在php.ini中找到“;extension=php_mysql.dll”,把这项前面的分号去掉,表示使这个项生效。这个配置项用来使PHP支持MySQL,这里分号起注释作用。修改完PHP的配置文件php.ini后,保存退出该文件。
6)进行Apache的配置。转到Apache的安装目录下的conf目录,用文本编辑器打开Apache的配置文件http.conf。在此文件中找到 dynamic shared (DOS) Support,在LoadModule行的最后添加如下配置项:LoadModule php5_module d:/php/php5apache2.dll,(需要按自己的安装目录修改PHP的载入位置)。该项是通过Apache来载入PHP模块php5apache2.dll,即PHP以Apache的一个模块来运行。
7)为了让Apache支持.php后缀的文件,在http.conf中找到AddType项,在最后添加如下配置项:AddType application/x-httpd-php.php。找到directoryIndex,在最后添加index.php。为了支持中文,找到AddDefaultCharset ISO-8859-1改为AddDefaultCharset GB2312。修改完后保存http.conf。即完成Apache的基本配置。
Thread Safe和Non Thread Safe怎么选择?
1、PHP 有两种服务模式:ISAPI 和 FastCGI 。ISAPI 服务模式是以 DLL 动态库的形式被调用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,以防止耗尽系统资源;而 FastCGI 执行方式则是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查反而可以提高执行效率。
2、简单的概括就是当 PHP 以 ISAPI 模式运行服务时,选择 Thread Safe(简称ts) 版本;当 PHP 以 FastCGI 模式运行服务时,选择 Non Thread Safe(简称nts) 版本。通常,IIS 以 FastCGI 模式运行服务,只能选择 Non Thread Safe 版本,Apache 以 ISAPI 模式运行服务,只能选择 Thread Safe 版本。
更新日志
v8.5.4版本
核心:
修复了错误 GH-21029(zend_mm_heap 在 Aarch64、LTO 版本上损坏)。
修复了错误 GH-21059(预加载常量 AST 闭包时出现段错误)。
修复了错误 GH-21072(常量表达式中(未设置)转换时崩溃)。
修复了使用 JIT 访问数组的空键时显示的弃用问题。
修复了错误 GH-20657(由 setRawValueWithoutLazyInitialization() 和 newLazyGhost() 触发的 zend_lazy_object_get_info 中的断言失败)。
修复了错误 GH-20504(通过 isset() 访问 Reflection LazyProxy 上的属性时 zend_get_property_guard 中的断言失败)。
修复了 OSS-Fuzz #478009707(对非类型化挂钩属性支持值进行了无聊的分配操作/inc/dec)。
修复了错误 GH-21215(构建因 -std= 而失败)。
修复了错误 GH-13674(使用 slibtool 时构建系统安装 libtool 包装器)。
卷曲:
不要截断长度。
日期:
修复了错误 GH-20936(DatePeriod::__set_state() 无法处理空开始)。
修复时区偏移导致秒数丢失精度的问题。
DOM:
修复了错误 GH-21077(访问 DomNode::baseURI 可能引发 TypeError)。
修复了错误 GH-21097(访问 DomNode 属性可能会引发 TypeError)。
LDAP:
修复了错误 GH-21262(ldap_modify() 控制参数验证过于严格,导致无法取消设置属性)。
MB字符串:
修复了错误 GH-21223;当传递大量候选编码(超过 200,000 个条目)时,mb_guess_encoding 不再崩溃。
操作缓存:
修复了错误 GH-20718(在 Solaris 上使用 JIT 时“共享内存不足”)。
修复了错误 GH-21227(包含部分对象的数组的 SCCP 被破坏)。
OpenSSL:
修复一堆泄漏和错误传播。
窗户:
修复了使用 clang 进行的编译(缺少 intrin.h 包含)。
































共有 0条评论