达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心 达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心
PHP互联网工程师
 当前位置:主页 > 高端课程 > PHP互联网工程师 >

如何编写不同的PHP?

时间:2020-07-23  来源:未知  作者:广州达内培训

PHP是开发界讨论最多的编程语言之一。有人将其称为无效的编程语言,有人将其称为令人讨厌的编程语言,没有约定或体系结构,我同意其中的一些观点,因为他们有公平的观点。但是,在这里,我将分享我这些年来用PHP进行编程的经验。其中一些技巧仅在最新的PHP版本中可用,因此它们在旧版本中可能无法使用。

类型提示和返回类型

就数据类型而言,PHP并不是一种完美的语言,但是您可以使用类型提示和返回类型来提高代码质量并防止进一步的类型冲突。使用PHP的这些功能的人并不多,并不是所有的PHP程序员都知道这是可能的。

<?php
function greet_user(User $user, int $age): void {
    echo "Hello" . $user->first_name . " " . $user->last_name;
    echo "\nYou are " . $age . " years old";
}

可以在参数变量之前使用类型的名称或类声明类型提示,并在冒号后的函数签名之后声明返回类型。

在像Laravel这样的框架中设计控制器时,可以更高级地使用它:

<?php
class UserController extends Controller
{
    // User sign up controller
    public function signUp(Request $request): JsonResponse
    {
        // Validate data
        $request->validate([
            'plateNumber' => 'required|alpha_num|min:3|max:20|unique:users,plate_number',
            'email' => 'required|email|unique:users',
            'firstName' => 'required|alpha',
            'lastName' => 'required|alpha',
            'password' => 'required|min:8',
            'phone' => 'required|numeric|unique:users'
        ]);
        // Create user
        $new_user = new User;
        $new_user->plate_number = trim(strtoupper($request->input('plateNumber')));
        $new_user->email = trim($request->input('email'));
        $new_user->first_name = trim($request->input('firstName'));
        $new_user->last_name = trim($request->input('lastName'));
        $new_user->password = Hash::make($request->input('password'));
        $new_user->phone = trim($request->input('phone'));
        $new_user->save();
        return response()->json([
            'success' => true,
        ]);
    }
}

三元运算符

三元运算符是几乎70%的程序员都知道并广泛使用的东西,但是如果您不知道三元运算符是什么,请参见以下示例:

<?php
$age = 17;
if($age >= 18) {
    $type = 'adult';
} else {
    $type = 'not adult';
}

可以使用三元运算符将此代码简化为以下代码:

<?php
$age = 17;
$type = $age >= 18 ? 'adult' : 'not adult';

如果满足条件,则不将第二部分分配给该变量。

如果要使用条件的值(如果它被评估为真实值),则还有一种更短的方法。

<?php
$url = 'http://example.com/api';
$base_url = $url ? $url : 'http://localhost';

如您所见$url,既用作条件又用作条件为真的结果。在这种情况下,可以转义左侧操作数:

<?php
$url = 'http://example.com/api';
$base_url = $url ?: 'http://localhost';

空合并运算符

就像三元运算符一样,您可以使用空合并运算符来查看值是否存在,请注意,因为false本身就是值,所以现存值与错误值不同。

<?php
$base_url = $url ?? 'http://localhost';

现在$base_url等于,http://localhost但是如果我们将其定义$url为false,则$base_url变量将等于false。

<?php
$url = false;
$base_url = $url ?? 'http://localhost';

使用此运算符,您可以检查以前是否定义了变量,以及是否未为其分配值:

<?php
$base_url = 'http://example.com';
$base_url = $base_url ?? 'http://localhost';

您可以使用空合并分配运算符来缩短此代码

<?php
$base_url = 'http://example.com';
$base_url ??= 'http://localhost';

所有这些nall合并技术都可以在数组值上实现。

<?php
$my_array = [
    'first_name' => 'Adnan',
    'last_name' => 'Babakan'
];
$my_array['first_name'] ??= 'John';
$my_array['age'] ??= 20;

上面的数组将具有first_nameas,Adnan因为它已经被定义,但是将定义一个名为的新键,age并为其指定编号20,因为它不存在。

飞船运算符

当您想知道哪个操作数更大而不是仅知道一侧是否更大时,太空飞船算符是一个非常有用的运算符。

飞船操作者将返回的一个1,0或-1值时,左边的操作数较大时,当两个操作数是相等的,并且当右操作数分别是较大的。

<?php
echo 5 <=> 3; // result: 1
echo -7 <=> -7; // result: 0
echo 9 <=> 15; // result: -1

很简单,但非常有用。

当您意识到太空飞船操作员也可以比较其他事物时,这将变得更加有趣:

<?php
// String
echo 'c' <=> 'b'; // result: -1
// String case
echo 'A' <=> 'a'; // result: 1
// Array
echo [5, 6] <=> [2, 7]; // result: 1

箭头函数

如果您曾经编写过JavaScript应用程序,尤其是使用其最新版本进行编程,则应该熟悉箭头功能。箭头函数是一种定义没有范围的函数的较短方法。

<?php
$pi = 3.14;
$sphere_volume = function($r) {
    return 4 / 3 * $pi * ($r ** 3);
};
echo $sphere_volume(5);

上面的代码将引发错误,因为$pi未在此特定函数的范围内定义变量。如果我们想使用它,我们应该稍微改变一下我们的功能:

<?php
$pi = 3.14;
$sphere_volume = function($r) use ($pi) {
    return 4 / 3 * $pi * ($r ** 3);
};
echo $sphere_volume(5);

因此,现在我们的函数可以使用$pi在全局范围内定义的变量。

但是做这些事情的更短的方法是使用箭头功能。

<?php
$pi = 3.14;
$sphere_volume = fn($r) => 4 / 3 * $pi * ($r ** 3);
echo $sphere_volume(5);

如您所见,它非常简单整洁,默认情况下可以访问全局范围。

推荐教程:《PHP》


上一篇:ASP.NET 和 PHP :Web开发应选择哪一个?
下一篇:关于php中文网线上直播班,看看老学员们怎么评

友情链接:
  • 全球最大晶圆代工半导体制造厂,台积电斥资订购艾斯摩尔机器设备
  • 英特尔依然是那个英特尔,且看英特尔的城防体系
  • 支持双 DRAM 内存接口,慧荣企业级 SSD 主控方案披露
  • 在全球被反垄断罚款,冤!高通到底哪里得罪了欧盟?
  • 强强联合!万业、微电子所和芯鑫共同打造全新半导体设备
  • 复旦大学校长称:对于集成电路产业发展,大学应该主动担当
  • 技术再升级!无锡中科芯攻克晶圆级再布线及晶圆级凸点制备关键技
  • 聚力!万业企业设立集成电路装备集团,提供自主可控设备
  • 德州仪器C2000微控制器增强连通性和控制性
  • 英特尔打出降价策略,以免被竞争对手 AMD 打败?
  • 贸易摩擦的闹剧没有赢家,苹果有勇气离开中国吗?
  • 图像信号与视觉处理器的发展趋势
  • 真干快消品定位方案班(第二期)火热开班
  • Java集合 ArrayList原理及使用
  • TDD(测试驱动开发)死了吗?
  • JAVA基础之XML相关
  • javaweb项目搭建ehcache缓存系统
  • 每日一码——字符串统计
  • 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
  • 九:模板方法模式
  • 十二:命令模式(人员解耦和)
  • Java 转PPT为图片、PDF、SVG、XPS、ODP以及PPT和PPTX互转
  • SpringCloud学习(SPRINGCLOUD微服务实战)一
  • 记一次微信网页授权后获取用户信息并重定向
  • 速途新营销五点实战洞察解码“品效合一”
  • 十一:外观模式详解(Service,action与dao)
  • 手把手教你学会 基于JWT的单点登录
  • mysql锁机制总结,以及优化建议
  • 解决多个版本jar包冲突【jar内包名重命名】
  • 中国首张5G终端电信设备进网许可证 华为Mate 20 X 5G版入网
  • RPC之Thrift
  • 高级Java工程师必备 ----
  • 天猫618期间实物支付GMV增长38.5%
  • 换季了,老板你的库存处理好了吗?
  • 从“618”大数据看中国消费新活力
  • 小米生态链:贵在格局感与收放度
  • CODING 2.0 企业级持续交付解决方案
  • 老铁奇趴“新京济” 快手*京东618战报出炉
  • 中小企业新媒体运营基本技能
  • 上汽大通房车再度携手LINE FRIENDS 魔都巡游顺利开启
  • 华为高端手机国内市场份额超苹果夺得榜首
  • 中国智能制造分析报告
  • iPlus艾加营销助力腾讯广告牵手吴晓波 推进商业IP变现
  • 2019世界新能源汽车大会7月1日将在海南举行
  • 区域酒企如何转型突围
  • 时时彩论坛
  • 五星体育斯诺克
  • 北单比分直播
  • 河北11选5走势图
  • 福建体彩36选7开奖结果
  • 九龙图库下载