PHP7+也支持类型声明了,聊聊这个特性!

PHP也开始搞类型声明,PHP7+增加了类型声明的特性,下面本篇文章就来带大家了解一下PHP类型声明特性,分享一下在返回类型声明踩的坑,希望对大家有所帮助!

PHP也开始搞类型声明,PHP7+增加了类型声明的特性,下面本篇文章就来带大家了解一下PHP类型声明特性,分享一下在返回类型声明踩的坑,希望对大家有所帮助!

PHP7+也支持类型声明了,聊聊这个特性!

php零基础到就业直播视频课:进入学习程序员必备接口测试调试工具:立即使用

最近在研究PHP7的新特性,发现PHP也开始搞类型声明了,这么做的好处很明显:能提高程序运行速度。

下面开始介绍这一新特性:

默认情况下,所有的PHP文件都处于弱类型校验模式。

PHP7+增加了类型声明的特性,类型声明有两种模式:

  • 强制模式 (默认模式) 我的理解就是强制转换成需要的类型,不严格区分类型而是强转,类型不一致不报错
  • 严格模式 严格校验类型,类型与声明的不一致,报错

标量类型声明语法格式:

declare(strict_types=1);

其中strict_types的值:

  • 1表示严格类型校验模式,作用于函数调用和返回语句;
  • 0表示弱类型校验模式

可以使用的类型参数有:

  • string
  • int
  • float
  • bool
  • interfaces
  • array
  • callable

强制模式(默认模式)

<?php

function sum(int …$ints)
{
return array_sum($ints);
}

print(sum(1, ;2;, 3.1));
?>

9个杀手级的PHP项目,快来收藏使用!

转载2022-05-30 09:27:593516 + php学习QQ群:609135716PHP发展了这么多年,有许多有趣的项目。让我们摆脱那些讨厌的增删改查,一起来了解这些有趣的项目。

1、php-ai/php-ml,一个高级的PHP的机器学习库

php-ml是一个使用PHP实现的机器学习库,包含算法、神经网络、交叉验证、预处理、特征提取等人工智能领域中常用的功能方案。

官方还提供了众多的案例,比如:

  • 检测语言分类

  • MNIST 识别手写字体(标准的人工智能入门项目)

  • 垃圾邮件过滤

  • 文章分类

  • 预测葡萄酒的质量

php-ml有一个完善的文档,并且有丰富的博客文章。但是这已经是人工智能的领域了,你的知识结构可能一时半会还利用不了。

简单地用法如下:

require_once __DIR__ . '/vendor/autoload.php';

use Phpml\Classification\KNearestNeighbors;

$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];

$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);

$classifier->predict([3, 2]);
// return 'b'

2、rindow/rindow-neuralnetworks,一个高级的PHP的神经网络库

这也是一个人工智能项目,是一个高级的PHP的神经网络库,可以使用PHP实现一个强大的机器学习项目。

它有以下特点:

  • 可以轻易地实现DNN、CNN、RNN 和 Attention 机器学习模型

  • 和Python的Keras 很相似,可以利用相关经验

  • 提供了机器学习中的机器视觉和自然语言的处理

  • 处理性能是tensorflow CPU 的两倍

  • 无需专门的运行环境,可以在任何电脑环境运行

  • 附带有趣的示例程序

并且有相关的计算扩展,用于提高性能。还有对于GPU的扩展,可以利用GPU的计算能力,进一步提高性能,不过目前这一点还在测试阶段。

PHP7+也支持类型声明了,聊聊这个特性!

php零基础到就业直播视频课:进入学习程序员必备接口测试调试工具:立即使用

3、rubix/ml,一个高级的PHP的机器学习和深度学习库

是的, 这里又介绍了一个PHP的人工智能库。

他有这样几个特点:

  • 对开发人员很友好的接口方法调用

  • 40多种监督或非监督学习方法

  • 支持 ETL、预处理和交叉验证

与上面两个相比相比,它提供了最多的教程和示例项目 教程和示例项目 ,其中比较有趣的有离婚预测、DOTA2胜率预测等, 并且提供了电报群的交流渠道。

PHP7+也支持类型声明了,聊聊这个特性!

4、nlp-tools/nlp-tools,一个供初学者使用的半高级的自然语言处理库

这是一个专门用于处理人工智能中自然语言处理领域的库,他提供的方法相比之前几个会更低底层一些,但使用起来仍然很优雅。

它内置了多种分类模型,类聚方法,分词器,数据集等等几乎这一领取所需的所有工具和数据。

与之前介绍的几个项目相比,它是专门用来处理自然语言这一领域的,并且对初学者十分友好。有丰富的文档,内置了齐全的工具和数据。

这里演示一下分词效果:

include('vendor/autoload.php');

use NlpTools\Tokenizers\WhitespaceAndPunctuationTokenizer;

$text = "Please allow me to introduce myself
I'm a man of wealth and taste";

$tok = new WhitespaceAndPunctuationTokenizer();

print_r($tok->tokenize($text));

// Array
// (
// [0] => Please
// [1] => allow
// [2] => me
// [3] => to
// [4] => introduce
// [5] => myself
// [6] => I
// [7] => '
// [8] => m
// [9] => a
// [10] => man
// [11] => of
// [12] => wealth
// [13] => and
// [14] => taste
// )

5、workerman/gateway-worker,一个分布式的长链接服务框架

GatewayWorker基于Workerman开发的一个项目框架,用于快速开发TCP长连接应用,例如app推送服务端、即时IM服务端、游戏服务端、物联网、智能家居等等。

与其他的此类方案相比,它提供了这样几个无可比拟的优点:

  • 内置进程守护,通过简单的命令行即可稳定运行,无需自己去实现后台运行或进程守护

  • 内置分布式设计,可以在不需要修改任何代码的情况下,实现分布式部署

  • 完善的长链接操作,包括给连接绑定UID、给连接绑定分组、维护SESSION等

  • 提供标准的系统内推送消息的用法,提供了一个client,可以随时向gateway网络中发送消息

gatewayworker几乎解决了长链接开发中的所有痛点,非常好用。要注意的是,他是为长链接而设计的框架,如果是短连接(UDP)则需要其他方案。

它的启动方式如下,无需更多操作,健壮地完成进程守护、平滑重启。

1)启动

  • 以debug(调试)方式启动

php start.php start

  • 以daemon(守护进程)方式启动

php start.php start -d

2)停止

php start.php stop

3)重启

php start.php restart

4)平滑重启

php start.php reload

5)查看状态

php start.php status

6、robmorgan/phinx,一个数据库迁移工具

什么是数据库迁移工具呢,你可以先这样理解,就是一个数据库导入工具。

一般的如果我们需要导入数据库,需要先去之前的数据库导出sql文件,然后到另一个站点上导入sql文件。似乎这是天经地义的,没什么更好的方法,再好一点也就是做一个一键安装脚本。

其实有更好的方案,就是用数据库迁移工具phinx,在安装数据库时,不需要导出和导入sql文件,而是直接使用phinx提供的方法,设计好表结构,然后通过phinx的命令导入。

这样有很多好处:

  • 更优雅的安装方式,与系统代码一起管理,无需导出sql文件

  • 支持数据库升级降级,可以跟随系统升级,自动对比数据表变化,不用担心数据丢失

  • 支持多款数据库,在phinx设计的表结构可以直接安装到Mysql、PostgreSQL、SQLite、SQL Server

phinx绝对是现代的程序安装解决方案,你值得投入精力去使用它。

它的基本的用法像这样:

<?php

use Phinx\Migration\AbstractMigration;

class CreateUserLoginsTable extends AbstractMigration
{
public function change()
{
// 创建表结构
$table = $this->table('user_logins');
$table->addColumn('user_id', 'integer')
->addColumn('created', 'datetime')
->create();
}
}

7、league/flysystem,一个PHP的万能的文件存储操作库

flysystem是一个PHP的文件操作库,比如文件的读取、写入、目录列表等等操作。与众不同的是,他是“万能的”。其实说它是万能的有些夸张了,但是他官方支持了以下系统:

  • 本地存储

  • FTP存储

  • SFTP存储

  • 内存存储

  • 亚马逊云存储

  • 谷歌云存储

  • WebDAV存储

在社区生态中,还支持我们经常接触的一些系统:

  • 阿里云存储

  • 七牛云存储

  • Dropbox存储

  • 腾讯云存储

  • 华为云存储

等等,如果你需要,也可以自定义驱动。

就像下面的代码一样,对文件的操作是通用兼容的,如果需要切换存储系统,换一个驱动就可以了。

// 设置驱动
$adapter = new League\Flysystem\Local\LocalFilesystemAdapter($rootPath);
$filesystem = new League\Flysystem\Filesystem($adapter);

// 操作文件、目录
$filesystem->write($path, $contents);
$filesystem->read($path);
$filesystem->delete($path);
$filesystem->listContents($path, $recursive);
$filesystem->fileExists($path);
$filesystem->has($path);
$filesystem->lastModified($path);
…..

8、PHP-CPP,一个C++的PHP扩展开发框架

相比介绍的前几个项目,PHP-CPP并不是一个PHP的扩展或库,它是一个C++的框架,用来开发PHP扩展。

众所周知,PHP的扩展开发很困难,你一搜PHP的扩展开发,所有人都告诉你那可怕的Zend API,就像遇见了伏地魔一样,人们不敢提起它。

PHP-CPP解决了这样的混乱的Zend API的问题,实际上他解决了很多问题,使用他开发PHP扩展,写起C++代码来就像写PHP一样,毕竟PHP的语法也参考了C风格。

就像下面这样,简单几行就完成了一个PHP扩展。

#include <phpcpp.h>
#include <iostream>

void myFunction()
{
Php::out << "example output" << std::endl;
}

extern "C" {
PHPCPP_EXPORT void *get_module() {
static Php::Extension extension("my_extension", "1.0");
extension.add<myFunction>("myFunction");
return extension;
}
}

PHP-CPP还提供了丰富的文档和注释,手把手教你如何注册函数、调用函数、匿名函数、类和对象、解析和构造、魔术方法等。

9、PHP-FPM,一个强大的稳定的HTTP服务框架

很多人总是忽视这个PHP-FPM,甚至嫌弃他。

实际上,PHP-FPM是一个大杀器,

  • 稳定的运行

  • 丰富的扩展

  • 性能进阶方案

在Web中仍然闪闪发光。

PHP7+也支持类型声明了,聊聊这个特性!

原文地址:https://phpreturn.com/index/a624ac38895749.html

原文平台:phpreturn(PHP武器库)

转载至:php中文网【www.php.cn】

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/23913/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月20日 下午12:46
下一篇 2022年9月20日 下午12:48
软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!