PHP8.4新功能

一、属性钩子(Property Hooks)

        属性钩子(Property Hooks)是PHP8.4的一个新特性,允许我们在定义非静态属性时设置钩子函数,完成自定义功能逻辑。目前可以用的钩子有两个:set和get,分别对应在设置属性、访问属性这两个行为动作。

属性钩子的主要特性
  • 只允许定义在非静态属性上;
  • 两个钩子:get和set,分别对应在设置属性、访问属性这两个行为动作;
  • 钩子的形式可以是:set=>...、set{}、set($value){} 三种表达式,如果是简单的表达式,可以直接使用箭头表达式即可。

属性钩子的基本用法
<?php

class people
{
    public string $name = 'lisi' {
        get => $this->name. ' get';
        set => $this->name = 'lisi set';
    }
}

$people = new people();
echo '获取到的名字:' . $people->name . PHP_EOL;
$people->name = 'zhangsan';
echo '修改后的名字:' . $people->name . PHP_EOL;

 输出结果

获取到的名字:lisi get
修改后的名字:lisi set get

另外的用法

<?php

class people
{
    public string $name = 'lisi' {
        get {
            return $this->name. ' get';
        }
        set(string $value){
            $this->name = $value;
        }
    }
}

$people = new people();
echo '获取到的名字:' . $people->name . PHP_EOL;
$people->name = 'zhangsan';
echo '修改后的名字:' . $people->name . PHP_EOL;

输出结果

获取到的名字:lisi get
修改后的名字:zhangsan get

二、惰性对象(Lazy Objects)

什么是惰性对象

惰性对象是其初始化被推迟到它被访问或者修改的时候才会触发,它依靠反射的惰性实例去实现。在日常的项目中,利用它的这一特性可以提高资源的利用率。在依赖注入框架中,可以显著减少不必要的对象初始化,从而提高应用程序的性能。只有当依赖项被实际使用时,它们才会被初始化。

惰性对象的基本用法
<?php

class people
{
    public string $name = 'zhangsan';
    public function __construct()
    {
        echo "初始化方法被调用了" . PHP_EOL;
    }
}

$reflect = new ReflectionClass('people');
//初始化的方法
$init = function (people $people) {
    $people->__construct();
};
//创建惰性实例
$lazy_obj = $reflect->newLazyGhost($init);
var_dump($lazy_obj);
echo "================". PHP_EOL;
echo $lazy_obj->name . PHP_EOL;

输出结果

lazy ghost object(people)#3 (0) {
  ["name"]=>
  uninitialized(string)
}
================
初始化方法被调用了
zhangsan

结论:创建惰性实例的时候,初始化方法并没有被执行,当访问它的name属性时也就是实际使用时才会调用初始化方法。

完结

如果你在阅读这篇文章时有所收获,请不要忘记点赞评论加关注,你的支持是我创作的最大动力。当然,如果你在文中发现了疏漏之处,或是有着其他的见解,欢迎私信与我交流。


我是老卢,一个热爱分享、不断探索的知识旅者。

### 准备工作 为了在 CentOS 7 上从源码编译并安装 PHP 8.4,需要先更新系统的软件包管理器以及安装必要的依赖库。考虑到 CentOS 7 默认的 GCC 版本可能过低,影响编译过程的成功率。 ```bash sudo yum update -y sudo yum install -y epel-release sudo yum groupinstall "Development Tools" -y sudo yum install -y centos-release-scl ``` 这些命令会确保开发工具链是最新的,并且安装了 Software Collections (SCL),这有助于解决因默认 GCC 版本较低而引起的编译问题[^3]。 ### 安装所需依赖项 接着,需安装一系列用于构建 PHP 的依赖库: ```bash sudo yum install -y \ httpd-devel \ libxml2-devel \ openssl-devel \ curl-devel \ libjpeg-turbo-devel \ libpng-devel \ freetype-devel \ gmp-devel \ bzip2-devel \ sqlite-devel \ oniguruma-devel \ readline-devel \ libzip-devel \ re2c \ bison \ autoconf \ automake \ libtool-ltdl-devel ``` 上述命令涵盖了大部分常见的扩展需求及其对应的开发库文件[^1]。 ### 获取 PHP 源代码 前往官方下载页面获取最新稳定版的 PHP 8.4 源码压缩包。假设选择了 `php-8.4.x.tar.gz` 文件作为目标版本,则可以通过如下方式下载并解压该档案: ```bash cd ~/ wget https://www.php.net/distributions/php-8.4.x.tar.gz tar zxvf php-8.4.x.tar.gz cd ~/php-8.4.x ``` 注意替换实际发布的具体版本号来匹配当前最新的发布情况[^2]。 ### 配置与编译 配置脚本允许自定义安装选项,在此阶段可以根据个人偏好调整参数设置。下面是一个基本的例子: ```bash ./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/lib \ --enable-mbstring \ --enable-zip \ --with-curl \ --with-png \ --with-freetype \ --with-gettext \ --with-recode=shared \ --with-readline \ --with-zlib \ --without-pear make && sudo make install ``` 这段脚本指定了 PHP 及其模块的具体路径和其他一些常用功能的支持状态。完成之后执行 `make test` 来验证编译是否正常结束。 ### 设置环境变量 为了让系统能够识别新安装的 PHP 解释器位置,编辑 `/etc/profile.d/php.sh` 文件加入以下内容: ```bash export PATH=$PATH:/usr/local/php/bin source /etc/profile.d/php.sh ``` 这样就可以全局生效地添加 PHP 命令至用户的 PATH 中去了。 ### 复制配置文件 最后一步是从源码目录复制一份预设好的 INI 文件到指定的位置以便后续修改使用: ```bash cp ~/php-8.4.x/php.ini-production /usr/local/php/lib/php.ini ``` 至此,整个编译安装流程已经完毕,现在应该可以在终端里通过 `php -v` 查看已成功安装的新版本 PHP 信息了[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员老卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值