PHP开发学习笔记(基础篇)

前言

这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程.

个人学习方法分享 全栈开发自学笔记 已开源 [PHP开发学习笔记(面向对象篇)] 稍后更新 [PHP开发学习笔记(框架篇)] 稍后更新 [PHP开发学习笔记(实际应用篇)] 稍后更新

本文阅读建议
1.一定要辩证的看待本文.
2.本文并不会涉及到PHP详细知识点,只陈述在学习PHP过程中遇到的关键点.
3.PHP依照其开发应用分为'基础篇,面向对象篇,框架篇,实际应用篇',根据本人学习进度更新.
4.本文知识点繁杂,并不能全部发布,还请移步github下载完整笔记进行参考
5.本文所表达观点并不是最终观点,还会更新,因为本人还在学习过程中,有什么遗漏或错误还望各位指出.
6.觉得哪里不妥请在评论留下建议~
7.觉得还行的话就点个小心心鼓励下我吧~

目录

1.PHP介绍 2.环境搭建 3.HTTP协议 4.PHP基础

  • 认识PHP
  • PHP可以做什么
  • 使用流程
  • 基本语法
  • 基本数据类型
  • 类型转换
  • 变量
  • 常量
  • 字符串
  • 数组
  • 宏定义
  • 传值
  • 运算符
  • 流程控制
  • 函数
  • 数组与数组结构
  • 文件加载
  • 错误处理

5.PHP基础项目写法 6.总结


学习体会

这篇文章大概在大半个月前就应该发出来了,为什么鸽了这么久呢,因为那时才学习了一个星期的PHP,在阅读了大量的书籍和文章以后,我才发现,这门所谓"世界上最好的语言"学起来,并没有那么简单.

因为不想直接从书籍和文章搬运,所以这篇以及其他文章迟迟没有发布出来,我要总结出属于自己的东西.

在经过了将近这大半个月的学习,终于对PHP这门语言拥有了自己的看法和见解.

首当其冲的就是,在学习PHP语言开发的同时,一定要结合着MySQL进行学习,并且做一个拥有自己想法的网站Demo,充分利用起来HTML & CSS & JavaScript.


如何学习

PHP这门语言虽然有着容易上手之称,但因为其开源,所以其复杂程度并不亚于任何一门成熟的面向对象语言.

因为其种类为服务器脚本语言,刚入门的时候,我们学习的必定是PHP面向过程的写法.

通过面向过程的写法去了解PHP这门服务器脚本语言,然后带入类和对象的概念,因为其版本原因,在PHP5.1版本后才完全支持面向对象.

在学习了面向对象以后,自然会引入MVC和其他类型的设计模式,设计出成型的项目架构,或者使用现在项目中较为流行的Smarty、ThinkPHP、Laravel等


PHP介绍

经过这一段时间的学习,个人认为PHP主要用来处理从服务器发送来的请求

本文主要阐述PHP语言的基础部分,并不涉及面向对象以及MVC概念.

环境搭建

环境搭建可以看我这篇文章LAMP环境搭建

HTTP协议

推荐读者阅读图解HTTP协议这本书,更系统的了解什么是HTTP协议

OSI网络模型

OSI参考模型分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

TCP/IP协议

网络之间传输都是基于HTTP协议,但HTTP协议当中还有很多子协议,其中TCP/IP协议便是其内部的一个子集.

TCP/IP又将OSI分为了四层,让其分工更加明确:应用层->传输层->网络层->链路层.

URL

URL全称为Uniform Resource Identifier,中文意思是统一资源标识符,网络请求URL,由服务器返回请求该标识符的资源例如网页、视频、文件等.

例如:www.jianshu.com 这就是一个URL.

请求

通俗来讲,网络请求都是由客户端发出,例如浏览器或手机等.

请求报文:请求行,请求头,空行,请求数据;

响应

通俗来讲,服务器用来配置发布到万维网/互联网的内容,内容发布以后,可以通过URL进行访问.

由服务器来处理每一个由客户端访问的请求,并将其访问的数据响应给客户端

响应报文:状态行,响应码,响应正文;


PHP基础

认识PHP

  • 服务器端的语言
  • 嵌入到HTML当中的语言
  • 脚本语言

PHP可以做什么

  • 收集表单数据
  • 生成动态网页
  • 字符串处理
  • 动态输出图像
  • 处理服务器端文件系统
  • 编写数据库支持的网页
  • 会话跟踪控制
  • 处理XML文件
  • 支持利用大量的网络协议
  • 服务器端的其他相关操作

使用流程

  • 编写PHP后缀文件
  • 放在服务器上
  • 通过URL访问到该PHP文件

基本语法

  • php.ini配置文件
    • php解锁挂载功能模块需要修改php.ini文件
    • 各种配置设置都在该文件进行修改.
  • PHP标记
    • PHP语言,是一种可以嵌入到“html”代码中的后台处理语言(程序)
    • 开始标记
      • <?php
    • PHP代码
    • 结束标记
      • ?>
    • 示例
      • <?php php代码写在这里..... ?>
    • 其他标记格式
      • <% php代码写在这里..... %>
        • php.ini配置
      • <? php代码写在这里..... ?>
        • php.ini配置short_open_tag = On 方可使用
  • PHP语句结束规则
    • 每一行代码的结束处要以”;”结尾.
    • 结束用;号
  • 注释
    • 注释不仅方便项目交接,并可以随时说明代码的功能参数以及作用.
    • 单行注释//
    • 多行注释 /* */
  • 空白处理规范

基本数据类型

  • 整数int & integer
  • 浮点数 float & double
  • 布尔类型 Bool & Boolean
  • 字符串类型
  • 资源类型
  • 数组类型
  • 对象类型
  • NULL类型
  • 伪类型
  • 类型判断

此处内容在笔记里有详细解释

类型转换

  • 自动转换
    • 我们无需做任何处理,而是,程序会根据运算时运算符所需要的数据类型进行转换。
    • 如果参与运算的数据不是需要的类型,则会自动转换为需要的数据类型。

    $v1 = 1 + “3”; //结果是4; $v2 = 1 . “3”; //“.”是字符串连接符,这里,1会被转换为字符串,结果是:“13”

  • 强制转换
    • 人为使用强转换语法进行转换,比如:

    $v1 = (int) “1”; //结果,$v1是整数类型的1 $v2 = (float) “1.23”; //结果是浮点类型的1.23 $v3 = (string) $v1; //结果是字符串“1”

变量

  • 定义
    • 使用一个“标记符号”(标识符),来代表某个数据
    • 定义形式: $变量名 = 具体的数据;
    • 举例: $data =123;
    • 在PHP中变量名区分大小写.
    • 变量是一个“容器”,是一个“盒子”,是一个可以存放数据的位置——内存空间。
    • 内存(条)中分割出很多很多的小格子,其中格子上都有标记(变量名),以及对应存放了数据。
  • 命名规则
  • 赋值 & 取值
  • 系统预定义变量
  • 变量传值
  • 可变变量

常量

  • 含义
    • 常量,就是一个用于存储“不会(也不允许)变化的数据”的标识符。 比如圆周率,在一定的应用场景中,就是是一个固定的值(人为规定为某个值)。
  • 常量字符串const
  • 系统内置常量 | 魔术常量 | 全局变化常量.
  • 系统预定义常量

字符串

  • 概念
    • 字符串在C语言当中是当做字节数组处理的
    • 字符串在PHP当中当做基本数据类型处理的,
    • 字符串没有长度限制
  • 字符串类型特点
  • 单引号字符串
  • 双引号字符串
  • 常用字符串输出函数
  • 常用字符串格式化函数
  • heredoc
  • nowdoc
  • 转义字符
  • 字符串长度

数组

  • 概念
    • 数组,是指将若干数据按一定的顺序组合为一个整体。 每个数据被称为一个“单元”——数组单元。 每个单元由两部分构成:下标和值,下标也称为“键”(key), 数组的一个重要特点是:其中的数据有明确的顺序,而是,是其放入数组时的先后顺序。
  • 下标定义
  • 整数下标
  • 索引数组
  • 关联数组(字典)(JSON对象)
  • 数组维数
  • 遍历数组

变量定义

  • define()函数形式
  • define(‘常量名’, 对应的常量值); 常量名推荐使用“全大写”。
  • 判断是否存在
  • 截图

传值

  • 值传递
  • 引用传递

运算符

  • 含义
    • 就是对数据进行某种所需要的运算的语法符号,比如加减乘除,或比较大小,或判断真假。
  • 表达式
  • 赋值运算符:=
  • 算术运算符:
      • / %
  • 连接运算符& 字符串运算符: .
  • 自赋值运算符: += -= *= /= %= .=
  • 自操作运算符: ++ --
  • 比较运算符:

= < <= == != === !==

  • 逻辑运算符: &&(与) ||(或) !(非)
  • 条件运算符: 数据1 ? 数据2 : 数据3
  • 位运算符: & | ~
  • 对象运算符
  • 其他: @,是错误抑制符 ( ),括号,用于提升运算优先级,括号中的先运算。
  • 运算符优先级

流程控制

  • 概述
    • 顺序结构:
      • 程序运行的自然状态,就是从前往后(从上到下)运行程序。
    • 分支结构:
      • 程序运行过程中,根据判断条件的不同结果(true或false),执行不同的分支(其他分支不再执行)。
    • 循环结构:
      • 程序运行过程中,根据判断条件的不同结果(true或false),决定是再次执行还是不再执行。
  • 分支结构
    • 单一条件分支结构 if
    • 双条件分支结构 else
    • 多条件分支结构 else if
    • 多向条件分支结构 switch
    • 巢状分支结构 if else 循环层次嵌套
  • 循环结构
  • 特殊控制语句
  • 递归处理
  • 递推处理

函数

  • 函数的概念
    • 函数不是数! 函数是一种代码形式(语法形式)。 函数是将“若干行代码”以一种语法形式包装成的一个整体。 该整体可以做到“需要的时候就去执行它”(就是执行其中的若干行代码)。 函数是解决在不同情形(不同代码位置)下需要执行相同代码的有效方式——所谓代码重用。 函数通常用于“专业的事由专业的人来做”这种现实世界的常见现象。
    • 也在其他语言中常被叫为”方法”.
  • 函数的作用
  • 函数详解
  • 系统预定函数
  • 作用域
  • 应用各种形式的函数

PHP开发学习笔记(基础篇)_1.png

数组与数组结构

  • 数组的定义
  • 数组的分类
    • 索引数组
    • 关联数组
  • 数组的创建
    • 字面量创建
    • array()函数声明
    • 多维数组
  • 数组的遍历
    • for循环遍历
    • foreach遍历
  • 系统预定义数组

文件加载

  • 文件加载含义
    • 将一个(别的)文件包含到当前文件中,成为当前文件运行过程中的一部分。 通常,一些公共的代码,在多个页面都需要用到的时候,会做成一个独立的文件。 然后在不同的页面需要用到的时候,直接载入进来就可以了。
  • 文件加载的四种方法.
    • include("");
      • 每次都载入文件(可能会重复载入),如果载入失败,在报错后继续执行后续语句;
    • include_once(“”);
      • 只载入一次(不会重复载入),如果载入失败,在报错后继续执行后续语句;
    • require(“”);
      • 每次都载入文件(可能会重复载入),如果载入失败,在报错后终止程序;
    • require_once(“”);
      • 只载入一次(不会重复载入),如果载入失败,在报错后终止程序;

错误处理

  • 错误分类
    • 语法错误:
      • 程序不能运行,是在运行之前,检查语法的时候,就发现语法出错,结果是提示错误,不运行程序。
    • 运行时错误
      • 语法检查没错,然后开始运行,在运行中出现了错误,然后报错。 这是开发中最常见的错误。
    • 逻辑错误:
      • 程序能运行,且一直到结束没有报错,但执行得到的结果却是错的。
  • 常见错误代号
    • 含义
    • E_NOTICE
    • E_WARNING
    • E_ERROR
    • E_PARSE
    • E_USER_ERROR
    • E_USER_WARNING
    • E_USER_NOTICE
    • E_ALL
  • 错误触发
  • 错误显示设置
  • 错误日志设置
  • 自定义错误处理

exit()、die()、return

exit()

官网定义

输出一个消息并且退出当前脚本。

中止脚本的执行。 尽管调用了 exit(), Shutdown函数 以及 object destructors 总是会被执行。

exit 是个语法结构,如果没有 status 参数要传入,可以省略圆括号。

die()

官网定义

等同于exit();

常用于除了错误抛出错误信息

return

官网定义

如果在一个函数中调用 return 语句,将立即结束此函数的执行并将它的参数作为函数的值返回。return 也会终止 eval() 语句或者脚本文件的执行。

如果在全局范围中调用,则当前脚本文件中止运行。如果当前脚本文件是被 include 的或者 require 的,则控制交回调用文件。此外,如果当前脚本是被 include 的,则 return 的值会被当作 include 调用的返回值。如果在主脚本文件中调用 return,则脚本中止运行。如果当前脚本文件是在 php.ini 中的配置选项 auto_prepend_file 或者 auto_append_file 所指定的,则此脚本文件中止运行。


用法
基本用法

exit:

<?php

$file = fopen($filename, 'r')
    or exit("unable to open file ($filename)");
//exit program normally
exit;
exit();
exit(0);

//exit with an error code
exit(1);
exit(0376); //octal

?>

return:常用于结束函数和返回一个函数返回值

<?php
$_SESSION['text'] = 'Best PHP';
function getText()
{
    $text = $_SESSION['text'];
    return $text;
    unset($_SESSION['text']);
}
echo getText().'<br />';
echo $_SESSION['text'];
?>

特别注意

当某个php文件当中,第一层代码有return的存在,代码执行到此处就会结束掉该php文件的执行.

并且,该文件的return只会影响到自己,即便被导入也只会结束掉该文件.

而如果php文件的第一层代码有die()和exit()的方法执行,如果被其他文件导入,执行到此处后,该文件和后续代码都不会执行.

测试代码如下

<?php

echo '这是第一句话<br>';

include "2.php";

echo '这是第二句话<br>';

?>

<?php

echo '这是第三句话<br>';

exit('程序已退出<br>');

echo '这是第四句话<br>';

?>

输出结果:
这是第一句话
这是第三句话
程序已退出
<?php

echo '这是第一句话<br>';

include "2.php";

echo '这是第二句话<br>';

?>

<?php

echo '这是第三句话<br>';

return;

echo '这是第四句话<br>';

?>

输出结果:
这是第一句话
这是第三句话
这是第二句话

由此可见exit()和return对php文件的影响.


PHP基础项目写法

基本

  • 每个php拥有各自的职能.
  • 数据库连接的PHP文件可以用require_once导入
  • 根据各自的需求设置

代码块

JS指向指定的PHP文件,完成相应的工作.

<script type="text/javascript">
        //定义JS删除函数
        function confirmDel(id) {
            // 询问是否要删除
            if (window.confirm("你确定要删除吗?")) {
                //如果单击"确定",跳转到delete.php页面
                location.href = "./delete.php?id="+id;
            }
        }
    
</script>

获取传递过来的数据数组$arr当中 id的值传给删除方法,进行删除

<a href="javascript:void(0)" onclick="confirmDel( <?php echo $arr['id'] ?>)">删除</a>

循环读取数据库数据,输出html网页

PHP开发学习笔记(基础篇)_2.png

提交以后延迟跳转

PHP开发学习笔记(基础篇)_3.png

  • 测试代码&验证代码
    • print_r($arr);
    • die();
  • 活用isset函数规避错误

总结

本文仅对PHP基础进行了总结,目前正在进行PHP面向对象+MVC+项目实践的学习,这只是PHP的冰山一角.请等我后期的文章更新.

结束语

如果您对这篇文章有什么意见或者建议,请评论与我讨论. 如果您觉得还不错的话~可以点个喜欢鼓励我哦. 如果您想和我一起学习,请毫不吝啬的私信我吧~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python入门

使用Python这么多年,才发现Python还有这些实用的功能和特点

在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性。一些可以说是非常有用,但却没有充分利用。考虑到这一点,我编辑了一些你应该了解的Pytho...

10910
来自专栏沈唁志

PSR-各个框架遵循的统一编码规范现代PHPer的开发规范

19220
来自专栏北京马哥教育

学会这二十个正则表达式,能让你少些1000行代码!

正则表达式,是一个强大且高效的文本处理工具。通常情况下,通过一段表达准确的表达式,能够非常简短、快速的实现复杂业务逻辑。 因此,正则表达式通常是一个成熟开发人员...

38070
来自专栏日常学python

为什么 Python 这么慢?

对于一个类似的程序,Python 要比其它语言慢 2 到 10 倍不等,这其中的原因是什么?又有没有改善的方法呢?

20120
来自专栏程序员互动联盟

【答疑释惑】C语言里面栈和堆的区别

很多初学者朋友对C语言里面的堆和栈理解的不是太清楚,模模糊糊。他们到底有哪些区别呢?我认为主要从以下几根方面来了解他们的不同之处: 1,变量位置:栈和堆都是程...

420120
来自专栏WeTest质量开放平台团队的专栏

Unity手游崩溃异常如何捕获--C#及JVM捕获

C#脚本未捕获的异常,与Android和Native未捕获异常很大的区别是,未捕获异常不会照成引用的闪退。所以,C#脚本的异常危害相对较小,但是同样更加容易存在...

37040
来自专栏PPV课数据科学社区

适用于 PHP 开发人员的 Python 基础知识

您是一名 PHP 开发人员。您在过去 五年(或更长时间)中可能一直都编写应用程序,您已经将许多想像变成了可能 — 电子商务系统、简单内容管理系统、Twitte...

422150
来自专栏企鹅号快讯

前端中的数据结构——队列篇

队列是数据结构中的一种,它与实际生活中的排队相似:在一条队伍中,先来的人总是能够先得到服务,后来的人只能排在队伍末尾等候。队列也是一样,它符合先进先出 FIFO...

24880
来自专栏FreeBuf

如何利用IDA Python浏览WINDOWS内核

当我去参加安全会议时,我总喜欢跟大神们讨论关于逆向工程方面的东西。因为这样我就可以从别人的经验中了解到他们是如何自动化实现那些繁琐操作的了。值得一提的是,很多人...

16840
来自专栏玉树芝兰

如何让Jupyter Notebook支持多种编程语言?

不满意Jupyter Notebook只有Python 2环境,还打算让它支持Python 3与R?没问题,本文一步步帮助你实现这个愿望。

26310

扫码关注云+社区

领取腾讯云代金券