Python 程序员入门 PHP 指南

1. 基本语法

  • PHP 中使用 // 单行注释,/* ... */ 多行注释;Python 用 # 单行注释, ''' ... ''' 多行注释。
  • PHP 使用 { } 来表示代码块(for / if);Python 使用缩进。
  • PHP 每行代码都应该以 ; 结尾,通过 { } 区分代码块的情况下可以不加(for、if、function等)。
  • PHP 中更推荐使用 echo 输出字符串,echo 可以一次输出多个字符串,用,隔开;print 只能输出第一项。注意:PHP 中 echo 和 print 会将内容输出到接口返回,而不是将结果打印到后台
  • PHP 中使用 if ... elseif ... else ... 语法进行判断,同时支持使用 switch 。Python 的判断语法为if ... elif ... else ...
$color = 'red';

switch ($color) {
  case 'red':
    echo 'Your favorite color is red.';
    break;			// 每个case分支必须使用break关键词来防止控制流执行下一个case分支
  case 'blue':
    echo 'Your favorite color is blue.';
    break;
  default:
    echo 'Your favorite color is not red or green.';
}
  • PHP 使用 try ... catch ... finally 来处理异常;Python 使用 try ... except ... finally

2. 变量

  • PHP 需要在变量名前加上 $ 符号来声明变量。
$name = "John";
  • PHP 可以使用 $$ 方法创建动态变量名,被称为变量间引用或可变变量。
$$name = 20;
echo $John					// 20
  • global 关键词用于函数内访问全局变量,要想在函数内访问函数外定义的全局变量,需要在变量前加上 global。
$x = 5;
$y = 10;

function test(){
  global $x, $y;
  $y = $x + $y;
}

test();
echo $y; 			// 15
  • 如果希望某个局部变量会在函数执行完之后不被删除,可以在声明变量时使用 static 关键词,这样每次调用函数时,变量会保留上一次被调用的值。
function test(){
  static $x = 0;
  echo $x;
  $x++;
}

test();
test();
test();					// 0 1 2

3.数据类型

  • PHP 进行数据比较时,==只比较值,===要求值和类型都一致。
  • PHP 使用并置运算符 .拼接字符串,同时支持 a .= b,相当于 a = a . b;Python 通过 +来拼接字符串。
echo "Hello" . " " . "world!"		// Hello world!
  • PHP 中单引号和双引号的用法会有差别,双引号支持变量解析,单引号中所有占位符都会被当作普通字符串处理。Python 中单引号和双引号没有区别。
$name = 'world';

echo "Hello $name";				// Hello world
echo 'Hello $name';				// Hello $name
  • PHP 中没有字典(dict)的概念,而是用 array 创建关联数组达到类似的效果。

4.数组

  • PHP 中的数组有三种类型:数值数组(相当于 Python 中的 list)、关联数组(相当于 Python 中的 dict)、多维数组。
$cars = array("Volvo","BMW","Toyota");
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");		// 关联数组

// 或者可以通过指定键的方式创建
$cars[0] = "Volvo"; ...
$age['Peter'] = "35"; ...
  • PHP 访问数组元素的方法和 Python 一样,都是通过索引访问。
echo $cars[1];					// BMW
echo $age['Joe'];				// 43
  • PHP 通过 foreach 遍历数组。
foreach ($cars as $item){
  echo $item . "\n";
}

foreach ($age as $key => $value){
  echo $key . ":" . $value;
}

5.运算符

  • PHP 支持三元运算符 condition ? x : y,相当于 Python 中的 x if condition else y
  • 逻辑运算符:与( and、&& ),或( or、|| ),异或( x xor y :x 和 y 有且只有一个为 true 时返回 true),非( !x )。
    注意,符号的优先级大于等号大于英文:&& > = > and ; || > = > or
$a = 3; 
$b = false; 
$c = $a or $b; 					// 由于 = 优先级大于or,被解释为 ($c = $a) or $b;
var_dump($c); 					// int(3)

$d = $a || $b; 					// 由于||优先级大于 = ,被解释为 $d = ($a || $b);
var_dump($d)					// bool(true)
  • ::用于访问静态属性、静态方法和常量,也可以访问父类的静态成员或常量。
// PHP中用static关键词定义静态属性和方法,const关键词定义常量
// 在面向对象编程中,静态属性、静态方法和常量是与类直接相关联而不是与类的实例相关联的,可以通过类名直接调用,而不需要实例化对象。

class Math {
  const PI = 3.14;							// 常量

  public static function add($a, $b) {		// 静态方法
    return $a + $b;
  }
}

echo Math::add(1, 2); 			// 3
echo Math::PI;					// 3.14

6.函数

  • PHP 使用 function 关键词定义函数;Python 使用 def 关键词
function add($x,$y)
{
  $total = $x+$y;
  return $total;
}
 
echo "1 + 16 = " . add(1,16);		// 1 + 16 = 17
  • 在 PHP 中,使用 ...语法把可变数量的参数打包成一个数组作为函数入参(…$params)

7.面向对象

  • PHP 使用 class 声明类,使用 new 关键词创建新的对象,使用 extends 关键词继承一个类。
  • PHP 使用 $this 来代表当前的对象,通过 ->调用对象的属性和方法,以下代码是 PHP 和 Python 面向对象的对比。
// PHP面向对象
class Person{
  private $name;
  protected $age;
     
  public function __construct($name, $age){			// 构造函数,用来在创建对象时初始化(给变量赋初始值)
    $this->name = $name;
    $this->age = $age;
   }
     
  public function getName(){
    return $this->name;
  }
       
  public function sayHello(){
    echo "Hello, my name is $this->name, and I am $this->age years old.";
  }
};

$person = new Person("John", 18);
$person->sayHello();							// Hello, my name is John, and I am 18 years old.


class Student extends Person{					// 继承
  private $grade;

  public function __construct($name, $age, $grade){
    parent::__construct($name, $age);
    $this->grade = $grade;
  }

  public function getGrade(){
    return $this->grade;
  }

  public function sayHello(){					// 方法重写
    echo "Hello, my name is " . $this->getName() . ", I am $this->age years old, and I am in grade $this->grade.";			// 子类无法访问父类的私有属性,但可以通过方法来获取($this->getName());子类可以访问父类的保护属性($this->age)
  }
}

$student = new Student("John", 18, 3);
$student->sayHello();							//Hello, my name is John, I am 18 years old, and I am in grade 3.
# Python面向对象
class Person:
  def __init__(self, name, age):
    self.__name = name
    self._age = age
    
  def getName(self):
    return self.__name

  def sayHello(self):
    print(f"Hello, my name is {self.__name}, and I am {self._age} years old.")

person = Person("John", 18)
person.sayHello()

class Student(Person):
  def __init__(self, name, age, grade):
    super().__init__(name, age)					# super()可以调用父类的方法
    self.__grade = grade

  def sayHello(self):
    print(f"Hello, my name is {self.getName()}, I am {self._age} years old, and I am in grade {self.__grade}.")

student = Student("John", 18, 3)
student.sayHello()
  • PHP 通过在属性和方法前加关键词来实现访问控制:public(公有,可以在类内部和外部以及子类中访问)、private(私有,只能在当前类内部被访问)、protected(受保护的,可以在当前类内部和子类中访问)。在 Python 中,以双下划线开头(如 __name)的属性和方法被视为私有的,不应该被类外部直接访问,以一个下划线开头的属性或方法(如 _age)被视为受保护的,表示它们应该只能在当前类或其子类中使用。
// 接上续 PHP代码
echo $person->name;			// 外部不能访问私有属性,此行会出现语法错误
echo $person->age;			// 外部不能访问保护属性,此行会出现语法错误
echo $student->grade;		// 3

# 接上续 Python代码
print(person.__name)		# 报错,'Person' object has no attribute '__name'
print(person._age)			# 18,Python可在类的外部访问受保护属性和方法,但不推荐
print(student.getName())	# John
print(student._age)			# 18
  • PHP 使用 interface 关键词定义一个接口,可以指定某个类必须实现哪些方法,但这个部分不需要定义这些方法的具体内容。之后,类通过 implements 操作符来实现这个接口,类中必须实现接口中定义的所有方法,否则会报错。
interface Flyable {
  public function fly();
}

interface Maneuverable {
  public function land();
}

class Airplane implements Flyable, Maneuverable {		// 类可以实现多个接口,用逗号隔开
  public function fly() {
    echo "Airplane is flying";
  }

  public function land() {
    echo "Airplane is landing";
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值