写给Python程序员的PHP快速入门教程
因为某些原因需要临时接手一个PHP项目,所以决定花点时间学习下PHP,对有其它语言编程经验的人来说来,上手还是很顺的。如果你也刚好在学PHP,希望本文对你有帮助。
安装Laragon
如果你是Windows系统,推荐用Laragon来搭建PHP开发环境。它集成了 Nginx/Apache、MySQL、Redis、Putty 等工具, 下载地址:https://laragon.org/download/ ,直接用laragon,会省去很多麻烦。
安装 PHPStorm
PHPStorm是Jetebrain旗下的IDE,与Pycharm类似,但没有社区版,不过可免费试用一个月。 下载地址:https://www.jetbrains.com/zh-cn/phpstorm/
hello world
//hello.php <?php echo "hello world";
php 文件第一行都是以 <?php
开头,估计是想告诉编译器,这是一个php文件。
运行
PHP运行方式有两种,一种是直接在命令行中执行
php hello.php
还有一种启动一个web服务器,通过浏览器访问该文件。通过cmder(cmder已经集成在Laragon中)进入hello.php所在目录, 执行
php -S localhost:9000
浏览器访问 localhost:9000/hello.php 或者直接在PHPStorm选择浏览器运行
html 与 php
html 中可以集成php代码, 只需要把php代码用 <?php xxx ?>
包裹起来。把文件后缀改为php。解释器去自动去解释执行PHP代码。
<html> <body> <h1>hello PHP </h1> <h2><?php echo "hello world 2"; ?> </h2> </body> </html>
变量
php 的变量都是以 $
开头,看来PHP之父当初写这门语言的时候比较穷 例如:
$hello = "hello"; $num = 123;
注意,PHP和Python一样,都是动态语言,定义变量无需指定类型。 与Python不同的是,PHP的变量的值还可以做变量名来使用。举个例子
$key = "name"; $name = "zhangsan";echo $$key //zhangsan
php语句都需要一个分号“;”表示结尾。
常量
python语法上没有所谓的常量概念,但是PHP从语法就支持常量,所谓常量就是你给这个特殊的“变量”指定了值之后,就不能再被改变。
定义常量方式有两种:
方式一:通过 define
函数定义常量
<? php define("AUTHOR", "张三"); echo AUTHOR;
常量的访问前面带美元符号 $
方式二:通过关键字 const
定义
const NAME = "张三";
字符串
单引号与双引号字符串的区别, 双引号可以解析变量,单引号不会对字符做任何处理,包括转义字符也是原样显示,看例子
$num =2;echo "$num is number"; echo '$num is number'
输出
2 is number $num is number
判断变量是否为字符串可以用函数 is_string($name)
来判断,返回值是bool类型。
常用的基本类型还包括整型、布尔类型、浮点型。 可以通过函数 var_dump
查看变量的数据类型。
<?php$name = "zhangsan"; $num = 1; $value = 12.2; $is_ok = true;echo(var_dump($name)); echo(var_dump($num)); echo(var_dump($value)); echo(var_dump($is_ok));
输出
string(8) "zhangsan" int(1) float(12.2) bool(true)
数据类型转化
不同类型之间的转换只需要再变量前加上 (目标类型)
,即可强制转换,例如:
$num = "123"; $num = (int)$num; echo var_dump($num) . PHP_EOL;
输出
int(123)
如果将一个非数字字符串转换为int类型,会怎样呢? 不会报错,而是直接转换为0。这和python有很大的区别。
数组
PHP数组和Python一样,无需声明长度,初始化后就可以直接添加元素,不限制元素类型。
<?php$nums = [1,2,3,4, 5, "6"];print_r($nums);
输出
Array ([0] => 1[1] => 2[2] => 3[3] => 4[4] => 5[5] => 6 )
追加元素
$nums[] = 7;
获取元素
通过下标索引获取
echo $nums[1];
删除元素
删除元素使用函数 unset()
<?php$nums = [1,2,3,4, 5, "6"]; $nums[] = 7;# 删除第0个元素 unset($nums[0]);print_r($nums);var_dump($nums[0]);
输出
Array ( [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 ) Notice: Undefined offset: 0 in C:\Users\lzjun\workspace\phphello\hello.php on line 10 NULL
元素删除后,该值所在的位置依然还在,只不过这个值为NULL,后面的元素并不会前移。 但是通过函数 count()
获取数组长度时,被删除的元素并不会统计进来。也就是说长度会减1, 感觉很乱是不是。
这时候可以通过 array_values()
函数重新编排,该函数会把NULL的元素移除掉,返回一个新数组
<?php$nums = [1,2,3,4, 5, "6"]; $nums[] = 7; unset($nums[0]);print_r(array_values($nums));
输出
Array ([0] => 2[1] => 3[2] => 4[3] => 5[4] => 6[5] => 7 )
unset整个数组后,整个数组被删除,该变量也不存在
unset($nums)print_r($nums)Notice: Undefined variable: new_nums in C:\Users\lzjun\workspace\phphello\hello2.php on line 46
PHP没有字典类型
PHP没有字典类型
PHP没有字典类型
关联数组
PHP虽然没有字典结构,其实,数组本质上也是字典结构,只不过key是数组的下标索引而已。 而PHP中数组的索引也可以是字符串,这就变相的实现了字典结构。
关联数组通过符号 =>
关联 Key-Value
$books = ['name' => "PHP之禅",'pages' => 100,'price' => 200 ]; print_r($books) echo $books['name'] . PHP_EOL;
输出
Array ([name] => PHP之禅[pages] => 100[price] => 200 ) PHP之禅
数组与关联数组二者还可以混用,在没有指定key时,PHP会自动维护一个Key,就是数组的数字下标索引。
$books = ['name' => "PHP之禅",'pages' => 100,'price' => 200,"PHP太逗了","PHP是世界上最好的语言" ];print_r($books);
输出
Array ([name] => PHP之禅[pages] => 100[price] => 200[0] => PHP太逗了[1] => PHP是世界上最好的语言 )
比较操作符
$a == $b //类型转换后相等 $a === $b // 类型转换前相等 $a !== $b // 类型不相等或者转换后值不相等
switch 语句
PHP支持switch语句
$a = 4; switch($a){case 4:echo(1);break;case $a>20:echo(2);break;default:echo("3"); }
case里面一定要有break,否则case后面的语句全部会执行,直到遇到第一个break
foreach 语句
foreach适合用来迭代关联数组, 当然对于普通数组可支持用foreach
foreach($books as $key=>$value){echo $key, ":" , $value, "\n"; }
输出
name:PHP之禅 pages:100 price:200 0:PHP太逗了 1:PHP是世界上最好的语言
函数
函数用关键字 function
来定义
function add($a, $b){return $a+$b; }
PHP7开始, 也像Python一样,支持对参数和返回值指定数据类型,
function add2(int $a, int $b):int{return $a+$b; }echo add2(3,3) . PHP_EOL; //6 echo add2(3.4, 4.9) . PHP_EOL; // 7 echo add2(3.4, "4.9") . PHP_EOL; // 7
传入参数时,会强制转换为对应的类型,如果转换失败就会报错。
函数参数传递
参数的传递本质上都是值传递
function add3(int $a, int $b):int{$a = $a+$b;return $a; }$a = 3; $b = 4; echo add3($a,$b) . PHP_EOL; echo $a . PHP_EOL;
输出:
调用add3($a,$b)时,传递的是$a的拷贝值, 函数外的变量 $a 并不会受影响。 除了直接传值之外,也可以传引用
function add4(int &$a, int $b):int{$a+=$b;return $a; }$a = 3; $b = 4; echo add4($a,$b) . PHP_EOL; echo $a . PHP_EOL;
输出:
&
表示传引用,相当于你传过去的是$a对应的内存地址,开始该地址对应的值是3, 函数处理后,改地址的值被改为了7。
数组排序
升序:sort
降序: rsort
$nums = [9, 1, 2, 3, 4, 5, "6"];print_r($nums); sort($nums); print_r($nums);
输出
([0] => 9[1] => 1[2] => 2[3] => 3[4] => 4[5] => 5[6] => 6 ) Array ([0] => 1[1] => 2[2] => 3[3] => 4[4] => 5[5] => 6[6] => 9 )
排序函数直接在数组上进行操作,因为原数组的顺序会发生改变。函数的返回值是bool。
文件读写函数
- file_put_contents 快速写入内容到文件, 文件不存在则创建
- fopen 打开文件,可指定读写模式
- fwrite 写入内容
- fread 读内容
- feof 判断是否读完文件
- fclose 关闭文件
- unlink 删除文件
file_put_contents("hello.txt", "nihao ,php");$file = fopen("hello.txt", 'aw');fwrite($file, "php最好"); fclose($file);$file = fopen("hello.txt", "r"); while (!feof($file)){$content = fread($file, 10);echo $content, "\n"; } fclose($file);unlink("hello.txt")
面向对象:类
class Car {const WHEEL = 4;var $seat;var $door;var $engine;var $brand;// 构造方法public function __construct($seat, $door, $engine, $brand){$this->seat = $seat;$this->door = $door;$this->engine = $engine;$this->brand = $brand;}public function drive() {echo "启动" . PHP_EOL; } }// 实例化 $car = new Car();// 调用公有方法 $car->driver();// 访问常量 Car::WHEEL;// 继承class Benz extends Car {public __construct($door){$this->brand='benz'parent::__construct($door, $this->brand);} }
常量访问使用 类名::
,例如: Car::WHEEL
访问对象的属性和方法通过 ->
符号, 属性的访问需要先赋值
class Car{var $brand;const ENGINE='oil'; }$car = new Car();$car->brand=4; var_dump($car->brand);
PHP中没有方法重载这一说,比如构造函数
class Car{var $brand;var $seat;const ENGINE='oil';/*** @param $brand* @param $seat*/public function __construct($brand, $seat){$this->brand = $brand;$this->seat = $seat;} }
只能定义一个构造函数,不像Java,可根据不同的参数和返回值构造多个同名不同参的方法.
类的访问控制
属性和方法可以通过 public
\ protected
\ private
来修饰, 他们的可见范围和java是一致的.
var
私有方法只能在内里面使用,类外面不可访问, 但是可以通过反射进行访问
反射
class Bmw extends Car {private function somking(){echo 'driver is smoking'} }$method = new RefelctionMethod(Bmw::class, "somking"); $method->setAccessible(true); $bmw = new Bmw(); $method->invoke($bmw);
抽象类
abstract class Car{abstract public function drive(); }class Byd extends Car {public function drive(){echo "drive at 100km/h";} }
接口
接口中的方法必须都是公有的,顾名思义,不是公有的,怎么被实现类来访问实现呢。
interface Car {public function drive(); }
Trait
Trait 是PHP独有的概念, 在其它语言中并没有找到类似的概念,这是一种全新的代码复用思想,Trait 的中文意思是"特点,特征". Trait 和 类相似,可以定义属性和方法.但是不支持构造方法(也不能被实例化), 只能给其它类来使用. 算是给别人做嫁衣的. 在类中使用 Trait 可以使用关键字 use
来引入, 引入了 Trait 的类, 等于完全拥有了Trait的属性和方法.
通过Trait 可以解决PHP中多继承问题, 因为在一个类中,可以 use
多个Trait.
<?phptrait Hand{private $num;public function clap(){echo "鼓掌\n";} }trait Leg{private $num;public function run(){echo "running\n";} }class Person{use Hand;use Leg;public function sleep(){echo "sleeping..\n";} }$person = new Person(); $person->clap(); $person->run(); $person->sleep();
这里我定义了一个Person类,两个Trait, 分别是 Hand 和 Leg, 被 Person使用, 相当于 Person 同时继承了这两个Trait的数据.
写给Python程序员的PHP快速入门教程相关推荐
- python绘制函数图像opengl3d_写给 python 程序员的 OpenGL 教程
原标题:写给 python 程序员的 OpenGL 教程 作者:牧马人 (本文来自作者投稿) 1预备知识 OpenGL 是 Open Graphics Library 的简写,意为"开放式图 ...
- python notebook软件_Jupyter notebook快速入门教程(推荐)
本文主要介绍了Jupyter notebook快速入门教程,分享给大家,具体如下: 本篇将给大家介绍一款超级好用的工具:Jupyter notebook. 为什么要介绍这款工具呢? 如果你想使用Pyt ...
- python如何开发小软件-Python程序员,如何快速开发一个小程序
要点: 小程序是前后端分离的. 前端使用的是微信自定义的一套规范wxml+wxss+json+js,本质还是html+css+js. 后台可以选用任何你熟悉的语言:Java,Python,PHP,Ru ...
- python程序员又叫什么-Python程序员都知道的入门知识の四
1. 模块 2. 类和对象 3. 类的继承 python自学之路 1. 模块 一个.py文件相当于一个模块(module). 导入模块语法: import 模块名 from 模块名 import 函数 ...
- 如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程
Bar3D(3D 柱状图) name -> str 图例名称 x_axis -> str x 坐标轴数据.需为类目轴,也就是不能是数值. y_axis -> str y 坐标轴数据. ...
- 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(一)
一.计算机编程基础 编程语言 编程语言与标记语言的区别 编程语言 有很强的逻辑和行为能力,有if else等具有逻辑性和行为能力的指令,主动 标记语言(html)不用于向计算机发出指令,常用于格式化和 ...
- 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(精灵图,字体图标,技巧)
一.基础班学习路线 三.CSS高级技巧 1.精灵图 为什么需要精灵图sprites 精灵图使用(原理) 精灵图使用(代码) 精灵图案例-拼出自己名字 2.字体图标 字体图标产生和优点 字体图标下载 字 ...
- 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(边框,阴影,浮动)
一.基础班学习路线 三.CSS3基础 1.综合案例-快报模块 以上为使用了盒子的底边框后又使用margin的悲剧效果(右边那个才是整个盒子),所以要用padding,又因为h3没有写宽度属性,所以给它 ...
- 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(复合选择器,元素显示模式,背景)
一.基础班学习路线 三.CSS3基础 1.Emmet语法 emmet语法生成html标签 <!DOCTYPE html> <html lang="en"> ...
最新文章
- 黎曼曲面Riemann Surface
- 微信小程序弹出用户授权弹窗,微信小程序引导用户授权,获取位置经纬度
- 假笨说-谨防JDK8重复类定义造成的内存泄漏
- html 星空效果,使用css实现星空效果!
- iOS 9之WatchKit for WatchOS 2
- linux 线程id 进程id,在Linux上显示正在运行的进程的线程ID
- 简单事务:.NET Core应用程序的微服务示例体系结构
- vs2008+sqlserver2008 同一台服务器webconfig 数据连接串的配置要点
- 组态王中时间存access怎么存_组态王如何实现实时显示数据并且记录到Access数据库中?...
- iphone手机删除的照片怎么恢复
- PHP安装Xdebug
- python中count方法
- 基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计
- 万字手撕七大排序(代码+动图演示)
- ffmpeg批量提取mp4视频文件中的音频
- linux ln命令详解
- 美国匹斯堡大学计算机专业,匹兹堡大学计算机专业
- 网易视频云互动直播公测正式启动
- 打开服务器网站的网址http,网站是如何打开的?
- html探照灯效果,巧用CSS的MASK滤镜
热门文章
- Shodan Hacking
- poi根据模板导出word(包含图片、动态生成表格、合并单元格)(亲测有效)
- Edmonds-Karp算法(EK算法)简单讲解及实现(邻接表)
- 北京市海外学人中心《北京市留学人员工作居住证》攻略
- steam好友服务器当前处于离线状态,steam怎么修改在线状态-steam设置离线、想交易、隐身等状态的方法 - 河东软件园...
- up考研资料更新目录
- c++自动抢购_304不锈钢全自动洗衣机全铜加长特长拖把池 智能止水6分4分水龙头1元优惠券券后价7.8元...
- 入库管理系统示例代码
- win7 64位搭建scrapy
- 《降龙之剑》刷马坐标 BOSS坐标,鉴定出好马的时间段