写给JavaScript开发人员的PHP快速入门指南
即将开播:5月14日,Jenkins在K8S下的三种部署流程和实战演示
我从2012年开始学习如何使用HTML和CSS进行编码,自从我的编码之旅开始以来,PHP一直是我一直想学习的语言之一。
作为一个刚从JavaScript培训学校毕业的学生,我决定要重新尝试学习PHP。一直以来,要想找到一些关于 PHP 的资源,而不是针对那些从未接触过代码的人,是相当困难的。所以,这也是我写这篇文章的原因。我希望能够帮助其他像我这样的人,他们只是需要一个快速的指导,让他们了解自己选择的语言和他们想学的语言之间的区别。
一般语法
PHP 的语法和 JavaScript 的比较大的区别之一是,PHP 的语法中,需要在行的末尾加上分号。我一开始很纠结于这个问题,现在有时也会这样,所以我想在这里首先说明一下。
使用语言
在JavaScript中,除了确保文件具有 .js 扩展名之外,无需执行任何特殊操作即可运行代码。但是,在PHP中,即使在扩展名为 .php 的文件中,也需要使用标签。
<?php # code here ?>
声明变量
在PHP中创建变量非常简单。与JavaScript一样,PHP是一种动态类型化的语言,因此不必在创建变量时声明变量的类型。它使用 $ 符号表示变量。
$myvar = 'value';
在PHP中,默认情况下你声明的任何变量都是可变的,绝对可以在任何地方进行更改。
声明常量
PHP有一个称为 define 的特殊功能,用于专门创建无法更改的变量。它带有两个参数:变量的名称和要分配给它的值。默认情况下,此函数将你创建的变量名称设置为区分大小写。可以通过将 true 作为第三个参数传递给函数来覆盖它。
define('CONSTANT_NAME', value, true);
声明数组
很像JavaScript的数组可以用标准的括号符号或PHP中的一个函数来创建。也就是说,PHP的关联数组相当于一个JavaScript对象,是在PHP中创建key/value对集合的唯一方法,而不需要导入某种模块。在PHP中给键赋值是用 => 表示的。
$myArray = ['key1' => 'value', 'key2' => 'value', 'key3' => 'value'];
函数
PHP中的函数与JavaScript(特别是ES5)非常相似。
function myFunc($param) { return $param; }
这方面,我能在两种语言之间找到的唯一真正的区别是,PHP具有一个运算符,可将你传入的参数从基于值更改为引用:&。
$myVar = 10; echo $myVar; # displays 10 function addTen(&$param) { return $param += 10; } addTen($myVar); echo $myVar; # displays 20
循环
就像函数一样,循环与用JavaScript编写的方式没有太大不同。一个例外是PHP的 foreach 循环,它会根据你尝试循环的数组类型而变化。
foreach($arrayName as $item) { # do code }
类和OOP方法论
类是PHP与JavaScript有很大不同的地方。尽管PHP最初不是作为一种面向对象的编程语言(类似于JavaScript),但后来又添加了该功能。
访问修饰符关键字
在标准JS中,类不需要修饰词。但是,对于PHP,它们是。
你在PHP中拥有的修饰符是:
- public——可以通过脚本或其他类在类外部使用它。
- private——创建此类的类是唯一可以访问它的类。
- protected ——只有当它在类的子类中被调用时,才可以在类外访问。
- static ——允许使用一个属性或方法,而不需要对该属性或方法所属的类进行实例化。
在PHP中创建类时,比较好的做法是利用这些关键字来告诉类它需要如何使用类中的属性和方法。
class MyClass { private $classAttrib; public function __construct($classAttrib) { this->classAttrib = $classAttrib; } }
在上面的代码片段中,你会注意到几件事。首先可能是两个修饰关键字。在这里,我们声明了一个名为 classAttrib 的私有变量,这个变量只能通过 MyClass 访问。第二个是我们与PHP的内置 __construct 方法结合使用的 public 关键字。就像在JavaScript中一样,这使我们可以实例化一个类,就好像它是一个函数一样。
$myClass = new MyClass(someValue);
this和箭头
继续上面的 MyClass 示例,你会注意到我们以与JavaScript中相同的方式来使用它。此处的区别在于,我们使用箭头(->)访问该类上的 classAttrib。我们还将使用这个指针来访问类上的任何需要在整个代码中使用的东西。
这是JavaScript中的同一类:
class MyClass { constructor(classAttrib) { this.classAttrib = classAttrib; } }
Getters 和 Setters
Getter和Setter是用于获取和设置(或更新)与类属性有关的信息的类方法。在JavaScript中,我们通常不需要编写它们,类似地,在PHP中也不需要。话虽如此,但在PHP中你会看到这些方法的频率要高得多,所以我觉得在这里还是慎重一点。基本上,这些方法是唯一应该在类外直接修改或与类属性交互的东西。
# ... inside MyClass public function setClassAttrib($classAttrib) { return $this->classAttrib = $classAttrib; } public function getClassAttrib() { return $this->classAttrib; }
继承
从PHP中的父类继承类似于JavaScript,不同之处在于我们不使用 super 来传递父类的属性。相反,我们使用 :: 运算符,也称为范围解析运算符。
class SecondClass extends MyClass { private $newAttrib; public function __construct($classAttrib, $newAttrib) { parent::__construct($classAttrib); this->newAttrib = $newAttrib; } }