php foreach 循环 判断index 小于多少_Go 与 PHP 的语法对比
好久没写文章了,文笔有点生疏,这篇文章是工作中的一点总结。
Go 是由 Google 设计的一门静态类型的编译型语言。它有点类似于 C,但是它包含了更多的优点,比如垃圾回收、内存安全、结构类型和并发性。它的并发机制使多核和网络机器能够发挥最大的作用。这是 GoLang 的最佳卖点之一。此外,Go 速度快,表现力强,干净且高效。这也是 Go 如此吸引开发者学习的原因。
PHP 是一种动态类型语言,它使新手更容易编写代码。现在的问题是,PHP 开发人员能否从动态类型语言切换到像 Go 这样的静态类型语言?为了找到答案,让我们对比一下 Go 和 PHP 之间的语法差异。
数据类型
Go 同时支持有符号和无符号整数,而 PHP 只支持有符号整数。
另一个主要区别是数组。Go 对 array 和 map 有单独的类型,而 PHP 数组实际上是有序的 map。
Go 与 PHP 相比没有对象。但是,Go 有一个类似于
object
的struct
类型。
PHP 数据类型:
booleanstringinteger // Signed integer, PHP does not support unsigned integers.float (also known as "floats", "doubles", or "real numbers")arrayobjectnullresource
Go 数据类型:
stringboolint int8 int16 int32 int64 // Signed integeruint uint8 uint16 uint32 uint64 uintptr // Unsigned integersbyte // alias for uint8rune // alias for int32float32 float64complex64 complex128arrayslicesmapstruct
变量
Go使用var
声明全局变量和函数变量。但是,它也支持带有初始化程序的简写语法,但只能在函数内部使用。另一方面,PHP仅支持带有初始化程序的变量声明。
// 变量声明// Go // PHPvar i int $i = 0 // integervar f float64 $f = 0.0 // floatvar b bool $b = false // booleanvar s string $s = "" // stringvar a [2]string $a = [] // array// 简短的变量声明// Go // PHPi := 0 $i = 0 // integerf := 0.0 $f = 0.0 // floatb := false $b = false // booleans := "" $s = "" // stringa := [1]string{"hello"} $a = [] // array
类型转换
// Goi := 42 // Signed integerf := float64(i) // Floatu := uint(f) // Unsigned integer// PHP$i = 1;$f = (float) $i; // 1.0$b = (bool) $f // true$s = (string) $b // "1"
数组
// Govar a [2]stringa[0] = "Hello"a[1] = "World"// ORa := [2]string{"hello", "world"}// PHP$a = ["hello","world"];
Maps
// Gom := map[string]string{"first_name": "Foo","last_name": "Bar",}// PHP$m = ["first_name" => "Foo","last_name" => "Bar"];
对象类型
Go 不支持对象。但是,您可以使用structs
实现object
之类的语法。
// Gopackage mainimport "fmt"type Person struct { Name string Address string}func main() { person := Person{"Foo bar", "Sydney, Australia"} fmt.Println(person.Name)}// PHP$person = new stdClass;$person->Name = "Foo bar";$person->Address = "Sydney, Australia";echo $person->Name;// 或使用类型转换$person = (object) ['Name' => "Foo bar",'Address' => "Sydney, Australia"];echo $person->Name;
函数
Go 和 PHP 函数之间的主要区别是;Go 函数可以返回任意数量的结果,而 PHP 函数只能返回一个结果。但是,PHP 可以通过返回数组来模拟相同的功能。
// Gopackage mainimport "fmt"func fullname(firstName string, lastName string) (string) {return firstName + " " + lastName}func main() { name := fullname("Foo", "Bar") fmt.Println(name)}// PHPfunction fullname(string $firstName, string $lastName) : string {return $firstName . " " . $lastName;}$name = fullname("Foo", "Bar");echo $name;
// 返回多个结果// Gopackage mainimport "fmt"func swap(x, y string) (string, string) {return y, x}func main() { a, b := swap("hello", "world") fmt.Println(a, b)}// PHP// 返回一个数组以获得多个结果function swap(string $x, string $y): array {return [$y, $x];}[$a, $b] = swap('hello', 'world');echo $a, $b;
控制语句
If-Else
// Gopackage mainimport ("fmt")func compare(a int, b int) {if a > b { fmt.Println("a is bigger than b")} else { fmt.Println("a is NOT greater than b")}}func main() {compare(12, 10);}// PHPfunction compare(int $a, int $b) {if ($a > $b) { echo "a is bigger than b";} else { echo "a is NOT greater than b";}}compare(12, 10);
Switch
根据 Golang 官方教程文档:
Go的switch与C,C+,Java,JavaScript和PHP中的类似,除了Go只运行选中的case,而不是随后的所有case。实际上,
break
语句在这些语言中的每个case后都是必需的,而在Go中则是自动补充的。另一个重要的区别是Go的switch cases不需要是常量,并且涉及的值也不必是整数。
// Gopackage mainimport ("fmt""runtime")func main() { fmt.Print("Go runs on ")
os := runtime.GOOS;
switch os {case "darwin": fmt.Println("OS X.")case "linux": fmt.Println("Linux.")default: fmt.Printf("%s.\n", os)}}// PHPecho "PHP runs on ";
switch (PHP_OS) {case "darwin": echo "OS X.";break;case "linux": echo "Linux.";break;default: echo PHP_OS;}
For 循环
// Gopackage mainimport "fmt"func main() { sum := 0
for i := 0; i < 10; i++ { sum += i}
fmt.Println(sum)}// PHP$sum = 0;
for ($i = 0; $i < 10; $i++) { $sum += $i;}echo $sum;
While 循环
Go 自身没有 while 循环的语法。相应的,Go 使用 for
循环代替实现 while 循环。
// Gopackage mainimport "fmt"func main() { sum := 1
for sum < 100 { sum += sum}
fmt.Println(sum)}// PHP$sum = 1;while ($sum < 100) { $sum += $sum;}echo $sum;
Foreach/Range
PHP使用 foreach
迭代数组和对象。与之对应, Go 使用 range
迭代 slice 或 map。
// Gopackage mainimport "fmt"func main() { colours := []string{"Maroon", "Red", "Green", "Blue"}
for index, colour := range colours { fmt.Printf("index: %d, colour: %s\n", index, colour)}}// PHP$colours = ["Maroon", "Red", "Green", "Blue"];
foreach($colours as $index => $colour) { echo "index: {$index}, colour: {$colour}\n";}
今天的内容就是这些。我尽量使文章篇幅较小且简洁。作为 PHP 开发人员, 我尝试在练习 Go 时分享我的知识。也请随意分享你的想法。希望你们喜欢阅读本篇文章。
php foreach 循环 判断index 小于多少_Go 与 PHP 的语法对比相关推荐
- php foreach 循环 判断index 小于多少_PHP设计模式之迭代器模式 - 硬核项目经理
一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便 ...
- 采用数组实现斐波那契数列的计算、foreach循环的使用、100以内质数的判断
想要实现斐波那契数列的计算,我们首先得了解斐波那契数列的定义及其原理: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称 ...
- 如何确定foreach循环中的第一次和最后一次迭代?
问题很简单. 我的代码中有一个foreach循环: foreach($array as $element) {//code } 在这个循环中,我想在第一次或最后一次迭代时做出不同的反应. 这该怎么做? ...
- java foreach 跳过本次循环_【Java】对foreach循环的思考
阿里java开发手册已经发表,很多都值得认真研究思考,看到零度的思考题,没忍住研究了一下. 在这里插入图片描述 首先,看一下给出的反例的执行结果. 如果是"1",最后list中的元 ...
- oracle for循环遍历数组,foreach循环
Smarty foreach控制循环次数 1.在 smarty 中数组是经常会用到的,循环遍历数组用 section 或者 foreach ,如何得到数组长度或者判断一个数组个数呢?可以用{$arra ...
- 如何跳出forEach循环
介绍 相信所有的前端小伙伴对 forEach() 方法并不陌生,它实现了对数组的每个元素执行一次给定的函数.可在使用中,经常希望跟 for 一样,在循环过程中,某个判断成立后跳出这个循环.本期我们就将 ...
- C# for循环与foreach循环
一:for( )循环 通过下标,对循环中的代码反复执行,功能强大,可以通过index取得元素.在处理比较复杂的处理的时候较为方便. 注意: 1.初始化参数.更新循环变量可以写多个,用逗号隔开 2.变量 ...
- php循环如何中断,如何中断forEach循环(详细介绍)
本篇文章给大家带来的内容是关于如何中断forEach循环(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在使用for循环的时候可以使用break 或者return语句来结 ...
- php if foreach个数记录,php foreach循环只返回数组中第一次迭代的值
我似乎无法确定为什么我的foreach循环能够循环所有5个生成的ProductionOrderID,但只返回第一个ID的数据. 我的理解是数组正确循环,因为你可以在这里看到当前结果:https://i ...
最新文章
- python登录代码思路_用python登录Dr.com思路以及代码分享
- java测试不成功_为什么我的Java布尔测试总是失败?
- adb 测试工作中的总结
- QEMU KVM Libvirt手册(7): 硬件虚拟化
- leetcode 107. 二叉树的层次遍历 II(维护两个队列,通过异或运算切换)
- 计算机视觉招聘_INDEMIND|SLAM、计算机视觉、深度学习算法招聘(社招实习)
- xpath之string(.)方法
- InstallShield 2020
- Hadoop大数据简介
- 宝塔搭建javaweb_宝塔面板配置及部署javaweb教程(全网最全)
- 17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试
- 语义分割论文:Fully Convolutional Networks for Semantic Segmentation (CVPR2015)
- 佛祖保佑,永无bug,代码注释大全
- 自己的微信小程序学习笔记【1】——小程序开发工具的使用及项目文件说明
- 适合所有网站的前端优化技巧,值得你收藏!
- win7做服务器性能如何,win7如何做服务器配置
- 解决eclipse报错:错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)
- 无迹卡尔曼滤波(UKF)超详细解释
- mysql connector详解_MySQL Connector 编程
- MySQL 数据库基础(一)(数据库的简介)