找到
295
篇与
易航
相关的结果
- 第 24 页
-
PHP 8.0:新时代的编程巨浪 随着技术的不断进步,PHP也在不断演化,迎来了它的8.0版本。这一版本不仅仅是数字的增加,更是PHP语言的一次重大飞跃。今天,让我们一起探索PHP 8.0的新特性,以及它如何为开发者带来前所未有的便利。 图片 PHP 8.0简介 PHP 8.0是PHP语言的最新主要版本,它引入了许多新特性和改进,包括JIT编译器、命名参数、联合类型、属性、改进的类型系统等。这些变化旨在提高性能、增强代码的可读性和可维护性。 PHP 7与PHP 8.0的差异 PHP 8.0在多个方面与PHP 7有所不同,以下是一些主要的差异: JIT编译器:PHP 8.0引入了Just-In-Time (JIT) 编译器,这使得PHP代码的执行速度有了显著提升。 命名参数:PHP 8.0允许开发者使用命名参数,这使得函数调用更加灵活和可读。 联合类型:PHP 8.0支持联合类型,允许一个变量或函数参数接受多种类型的值。 属性:PHP 8.0引入了属性(Attributes),这是一种新的元数据语法,可以用于注解类、方法和属性。 改进的类型系统:PHP 8.0对类型系统进行了改进,包括更严格的类型检查和新的类型声明。 PHP 8.0新增功能和方法 PHP 8.0带来了许多新功能和方法,以下是一些值得关注的亮点: 图片 JIT编译器:通过在配置文件中启用JIT,可以显著提高代码执行速度。 命名参数:允许在函数调用时指定参数名称,例如: htmlspecialchars($string, double_encode: false);联合类型:允许函数参数或返回值为多种类型之一,例如: function foo(int|float $number): int|float { return $number * 2; }属性:使用属性来注解代码,例如: #[Route("/api/items/{id}", methods: ["GET"])] function getItem($id) { // 你的代码 }Match表达式:提供了一种更简洁的switch语法,例如: $status = match ($statusCode) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown', };入门指导 要开始使用PHP 8.0,你需要确保你的开发环境已经支持这个版本。你可以通过以下步骤来安装或升级到PHP 8.0: 检查当前版本:首先,运行以下命令来检查你当前的PHP版本: php -v升级到PHP 8.0:如果你的系统支持包管理器,你可以通过包管理器来安装或升级到PHP 8.0。例如,在Ubuntu上,你可以使用以下命令: sudo apt update sudo apt install php8.0代码案例 让我们来看一个简单的例子,展示PHP 8.0中的一些新特性: // 命名参数 htmlspecialchars($string, double_encode: false); // 联合类型 function foo(int|float $number): int|float { return $number * 2; } // 属性 #[Route("/api/items/{id}", methods: ["GET"])] function getItem($id) { // 你的代码 } // Match表达式 $status = match ($statusCode) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown', };PHP 8.0优劣势 优势: 性能提升:PHP 8.0引入了JIT编译器,显著提高了执行速度。 代码简洁:命名参数和联合类型等新特性使得代码更加简洁和易读。 开发效率:属性和其他改进减少了样板代码,提高了开发效率。 劣势: 兼容性问题:升级到PHP 8.0可能会遇到一些兼容性问题,需要对现有代码进行适配。 学习曲线:新特性可能需要开发者花费时间去学习和适应。 使用方法和场景 PHP 8.0适用于所有希望提高性能和代码质量的PHP开发者。它特别适合以下场景: 高性能应用:对于需要快速响应和高吞吐量的应用,PHP 8.0的JIT编译器是一个巨大的优势。 现代化开发:PHP 8.0的新特性使得代码更加现代化,适合追求最新技术趋势的开发者。 注意事项 在使用PHP 8.0时,开发者需要注意以下几点: 兼容性测试:在升级之前,确保对现有代码进行充分的兼容性测试。 文档学习:深入学习PHP 8.0的新特性,充分利用其带来的优势。 结尾 亲爱的开发工程师们,PHP 8.0为我们带来了新的机遇和挑战。让我们拥抱变化,勇敢地迈向新时代。记住,技术的海洋无边无际,每一次升级都是我们航行的新起点。明天,我们将继续探索PHP 8.1的奥秘,敬请期待! 在这篇文章中,我们深入探讨了PHP 8.0的新特性,并提供了入门指导、代码案例和使用场景。希望这些信息能帮助你在开发旅程中做出明智的选择,并在技术的海洋中乘风破浪。
-
《黑神话·悟空》是用什么编程语言开发的? 最近这个“黑神话·悟空”真是火的一塌糊涂,这款被誉为中国第一款3A制作的单机游戏,凭借其惊艳的画面、流畅的战斗体验和深厚的文化内涵,属实是火出圈儿了,连央视、外交部都纷纷点赞了。 图片 关于这款游戏的制作和文化咱就不聊了,毕竟我也不是专业的,今天咱们聊聊另一个话题。 话说,你知道黑神话·悟空这款游戏是用什么编程语言开发的吗? 答案主要是C++(也用到C#和其他语言) 根据游戏开发公司游戏科学官网的显示,《黑神话:悟空》游戏使用的是虚幻引擎(Unreal Engine): 图片 而这个引擎的底层源码主要使用的就是C++。 图片 图片 开发这款引擎的是Epic Games,一家来自美国的游戏公司。 虚幻引擎属于开源项目,大家自己学习或者开发一些免费的东西是可以直接用的。但如果要开发像《黑神话:悟空》这样的商业产品,那就得给钱了。按照他们的协议,当产品销售超过100万$时,就要付5%的版税。 图片 悟空的销售早就超过这个数了,所以现在每多一个人购买这款游戏,就会有5%进入到这家公司的钱包里。当然这种算法可能有些粗糙,在不同平台还有平台抽成,但大体是这么个意思,每销售一次,就会有一笔钱进到这家公司的账户。 我在微博、知乎、公众号很多平台看到大家都在感叹,国内的游戏公司很少愿意投入到这样的3A游戏制作,投入太大、周期长、收益不确定,导致大家都更愿意做投入小、来钱快的网游、手游,做一些奶头乐的游戏,而这类游戏,往往很难承载起文化传播的重担。 确实是这样,过去的十几年里,中国的游戏开发者们大多集中在网游和手游领域,原因很简单——来钱快。网游可以通过内购和会员制等方式持续盈利,而手游更是凭借短平快的开发周期和庞大的用户基数成为了香饽饽。 每次看到这样的评论留言,我就想到咱们软件开发领域其实不是一样的吗? 在中国的软件开发行业,Java和Python几乎成为了开发者的首选。无论是互联网公司开发的各种应用,还是传统企业的信息系统,这两种语言无处不在。为什么它们如此受欢迎?原因很简单:Java和Python的学习门槛低,开发速度快,并且有丰富的生态系统和社区支持。这让企业能够迅速推出产品,抢占市场份额,迎合快速迭代的商业需求。 再来看C++,国内做C++开发的团队实在是太少了,企业想招聘一个合适的C++人员往往要付出更多的时间和成本。这里面有多方面的原因,一方面C++学习曲线陡峭,开发人员需要掌握内存管理、操作系统机制等复杂内容,不仅耗时,而且容易出错。其次,C++的开发周期较长,企业在如此内卷的市场下,也很难快速迭代,毕竟市场不等人。 于是多年下来,造成的局面就是,国内的软件开发主要集中在网站、APP、小程序等领域,很少有涉及底层的软件系统。各种工业软件、操作系统、游戏引擎、数据库、浏览器这些东西基本都是国外的东西。 我看到很多人期望《黑神话:悟空》能像一束光,照亮国内3A游戏的道路,有更多的公司和团队进入到这个领域。其实我也希望,国内有更多的C、C++这些编程语言的开发者,开发出各种基础设施软件,走向全球市场,未来别人用我们的东西,每卖出一份也能给我们交钱。而不只是像现在一样,做一些同质化严重的小程序和APP。 期望归期望,但坦率来讲,这很难,毕竟《流浪地球》五年过去了,如今也只有一个《流浪地球》。 商业和资本本质毕竟还是逐利的,尤其是国内的市场太过浮躁,大家更看重短期利益。别说公司和企业了,个人同样如此,很多人都期望培训班培训三个月,就能月薪上万进入大厂。 不过星星之火总好过一片暗淡,当《黑神话:悟空》这样的星星之火越来越多时,终究有燎原之日。 最后期望中国游戏产业和中国软件产业都能有美好的未来!
-
iFrame父子相互获取对方DOM元素 父页面获取子页面dom的方法 /* 必须用onload */ window.onload = () => { const sonWindow = document.querySelector("iframe").contentWindow; const sonDiv = sonWindow.document.querySelector(".son") console.log(sonDiv); }子页面获取父页面dom的方法 /* 必须用onload */ window.onload = () => { const parentWindow = window.parent; const parentDiv = parentWindow.document.querySelector(".parent") console.log(parentDiv); }
-
ThinkPHP中日期时间区间查询以及whereTime用法 一、使用where方法进行时间的比较查询 where('create_time', '> time', '2021-8-8'); // 大于某个时间 where('create_time', '<= time', '2020-8-8'); // 小于某个时间 where('create_time', 'between time', ['2020-1-1', '2020-10-1']); // 时间区间查询二、使用whereTime方法 whereTime('birthday', '>=', '1970-10-1')->select(); // 大于某个时间 whereTime('birthday', '<', '2000-10-1')->select(); // 小于某个时间 whereTime('birthday', 'between', ['1970-10-1', '2000-10-1'])->select(); // 时间区间查询 whereTime('birthday', 'not between', ['1970-10-1', '2000-10-1'])->select(); // 不在某个时间区间三、时间表达式 // 获取今天的文章 Db::table('think_news')->whereTime('create_time', 'today')->select(); // 获取昨天的文章 Db::table('think_news')->whereTime('create_time', 'yesterday')->select(); // 获取本周的文章 Db::table('think_news')->whereTime('create_time', 'week')->select(); // 获取上周的文章 Db::table('think_news')->whereTime('create_time', 'last week')->select(); // 获取本月的文章 Db::table('think_news')->whereTime('create_time', 'month')->select(); // 获取上月的文章 Db::table('think_news')->whereTime('create_time', 'last month')->select(); // 获取今年的文章 Db::table('think_news')->whereTime('create_time', 'year')->select(); // 获取去年的文章 Db::table('think_news')->whereTime('create_time', 'last year')->select();四、如果查询当天、本周、本月和今年的时间,还可以简化为: // 获取今天的文章 Db::table('think_news')->whereTime('create_time', 'd')->select(); // 获取本周的文章 Db::table('think_news')->whereTime('create_time', 'w')->select(); // 获取本月的文章 Db::table('think_news')->whereTime('create_time', 'm')->select(); // 获取今年的文章 Db::table('think_news')->whereTime('create_time', 'y')->select();五、时间范围查询 // 查询两个小时内的文章 Db::table('think_news')->whereTime('create_time', '-2 hours')->select(); // 查询两天内的文章 Db::table('think_news')->whereTime('create_time', '-2 days')->select();图片
-
给你的网站增加一款简洁而功能强大的音乐播放器 H5播放器介绍 APlayer 是一个简洁漂亮、功能强大的 Html5 音乐播放器 MetingJS 是为 APlayer 添加网易云、QQ音乐、酷狗音乐等支持的插件 安装教程 安装很简单,一共需要调用三个文件:APlayer.min.js APlayer.min.css Meting.min.js 你可以使用 CDN 调用,只需要在 <head> 里面插入: <link href="https://cdn.bootcdn.net/ajax/libs/aplayer/1.10.1/APlayer.min.css" rel="stylesheet"> <script src="https://cdn.bootcdn.net/ajax/libs/aplayer/1.10.1/APlayer.min.js"></script>在 footer 里面插入: <script src="https://cdn.bootcdn.net/ajax/libs/meting/2.0.1/Meting.min.js"></script>当然,你可以将这些文件托管在自己的服务器,把上面的调用链接改成自己的就行了 使用方法 APlayer 原生用法 先看一个最简单的例子: <div id="aplayer"></div> <script type="text/javascript"> const ap = new APlayer({ container: document.getElementById('aplayer'), audio: [{ name: '你从未离去', artist: '白挺', url: 'https://doge.ottoli.cn/你从未离去.mp3', cover: 'https://doge.ottoli.cn/你从未离去.jpg' }] }); </script>在js 代码中: 参数 container 值为 document.getElementById('aplayer') 意思是定义当前播放器容器 id 为 aplayer 参数 audio 中有 4 个子参数,定义关于音频的相关参数: 参数 name 定义音频名称 参数 artist 定义艺术家名 参数 url 指向音频文件的地址 参数 cover 指向音频封面的地址 然后,在需要使用播放器的地方,将容器 <div> 的 id 设置为参数 container 中设定的值即可 MetingJS 的用法 前面已经看到,APlayer 原生用法设置参数十分繁琐,而且只能调用音频文件直链,增加服务器开销。而使用 MetingJS 就很好地解决了这个问题 先看一个最简单的例子: 对应的代码为: <meting-js server="netease" type="song" id="31365604" > </meting-js>一个 MetingJS 播放器至少需要三个参数: server 指定调用的 API ,可选 netease, tencent, kugou, xiami, baidu ,分别对应网易云音乐、QQ音乐、酷狗音乐、虾米音乐、百度音乐 type 指定调用类型,可选 song, playlist, album, search, artist ,分别对应单曲、歌单、专辑、搜索结果、艺术家 id 指定调用的 id ,一般可以在地址栏中找到 当 type 选择的是个播放列表时,生成的播放器是这样的: 播放列表默认是打开的,你可以使用参数 listFolded="true" 使其默认折叠 当你设定 fixed="true" ,会生成一个吸附在页面左下角的播放器,就像我的博客左下角那个 当你设定 mini="true" ,会生成一个 mini 播放器: 值得注意的是:除了 mini 模式,MetingJS 生成的播放器默认是带有歌词的(而且关不掉) 全部参数说明请查阅 MetingJS 官方文档(其实除了三个必要参数其余都和 APlayer 原生参数一样)