php7.3到php7.4新特性

1.对象属性现在支持类型申明

<?php
class User {
    public int $id;
    public string $name;
}
?>

上列例子中将会强制转化$id为integer类型,$name为字符串类型

 

2.箭头函数

现在箭头函数会提供一个短语法用来定义那些在作用域内值申明不明确的函数

<?php
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
?>

3.有限返回类型协方差和参数类型协方差(谷歌翻译的)

下列代码将会运行

<?php
class A {}
class B extends A {}

class Producer {
    public function method(): A {}
}
class ChildProducer extends Producer {
    public function method(): B {}
}
?>

仅当使用自动加载时,才提供完全差异支持。 在单个文件内,只能使用非循环类型引用,因为所有类在被引用之前都必须可用

 

4.空合并分配运算符

<?php
$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}
?>

5.Unpacking inside arrays(谷歌翻译是 在数组内部解包,看这不对,先用英文吧)

<?php
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
?>

6.数值字符分隔符

数字字符可以在数字之间包含下划线。

<?php
6.674_083e-11; // float
299_792_458;   // decimal
0xCAFE_F00D;   // hexadecimal
0b0101_1111;   // binary
?>

7.弱参考(Weak references)

弱参考允许编程人员保留对不能防止被销毁的对象的参考(Weak references allow the programmer to retain a reference to an object that does not prevent the object from being destroyed.)

8.允许__toString()的异常

现在可以通过__toString()抛出异常,在之前的版本这会导致一个致命错误,字符串转换中现有的可导致致命错误已转换为抛出异常。

 

剩下的扩展以后再看

### 将 Electron-Vite 与 Python 项目联合打包 #### 配置环境准备 为了实现将 Electron-Vite 应用与 Python 后端服务一同打包,需先配置好开发环境。确保已安装 Node.js 和 npm 或 yarn 工具链,并通过命令 `npm install -g pnpm` 安装 pnpm 来管理 JavaScript 包[^2]。 对于国内用户来说,可以设置镜像源加速下载速度: ```bash npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/ ``` 这一步骤有助于提高构建过程中的资源获取效率[^3]。 #### 创建并初始化项目结构 创建一个新的工作目录用于存放整个项目的文件夹,在该文件夹下分别建立前端部分(基于 Vite 构建)和后端部分(即 Python 程序)。接着按照常规流程初始化各自的 package.json 文件和其他必要的配置项。 #### 设置前后端交互机制 为了让两个独立的应用能够相互通信,可采用 IPC (Inter-Process Communication) 方式让主进程中运行的 Python 脚本同渲染页面之间传递数据。具体做法是在 main.ts 中监听来自 renderer 的请求并通过 child_process.spawn 方法调用外部 python.exe 执行相应的 .py 文件[^1]。 例如,在主进程中定义如下逻辑处理函数: ```typescript import { ipcMain } from 'electron'; const { spawn } = require('child_process'); ipcMain.handle('invoke-python', async (_, arg) => { const pyProc = spawn('python', ['path/to/script.py']); let result = ''; pyProc.stdout.on('data', data => { result += data.toString(); }); await new Promise((resolve, reject) => { pyProc.on('close', code => resolve(code)); pyProc.stderr.on('data', err => reject(err)); }); return JSON.parse(result); }); ``` 而在前端组件里则可以通过预加载脚本来发送指令给后台的服务端实例: ```javascript // preload.js contextBridge.exposeInMainWorld('api', { invokePythonScript: (arg) => ipcRenderer.invoke('invoke-python', arg), }) ``` 最后在 Vue 组件内部就可以方便地调用这个 API 接口了: ```vue <script setup> import { ref } from "vue"; async function runPython() { try { window.api.invokePythonScript({ message: "Hello from frontend!" }).then(response => console.log(response)) } catch(error){ console.error(error) } } </script> <template> <button @click="runPython">Run Python Script</button> </template> ``` #### 编写打包脚本 当完成上述准备工作之后,就需要编写专门针对此混合型应用的打包脚本。考虑到最终产物既要包含完整的 Web App 又要嵌入 Python 解释器及其依赖库,建议利用 electron-builder 插件来进行定制化封装操作。编辑 project-root/package.json 添加 build 字段描述目标平台和支持架构等信息。 另外还需要注意的是如果希望把 Python 运行时也一并打入到发行版里面,则可能需要用到 PyInstaller 或类似的工具提前准备好 standalone 版本的二进制文件再加入到 assets 列表当中去。 #### 测试与发布 经过以上几步精心设计后的应用程序应该已经具备跨语言协作的能力了。不过正式上线前务必进行全面的功能性和兼容性测试以验证一切正常运作无误。一旦确认无虞便可借助 CI/CD 平台自动部署至各大分发渠道供广大用户下载体验啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值