前言
这里筑梦师,是一名正在努力学习的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代码写在这里..... %>
<? php代码写在这里..... ?>
php.ini配置
php.ini配置short_open_tag = On 方可使用
<?php php代码写在这里..... ?>
?>
<?php
PHP语言,是一种可以嵌入到“html”代码中的后台处理语言(程序)
开始标记
PHP代码
结束标记
示例
其他标记格式
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”人为使用强转换语法进行转换,比如:
变量
定义
在PHP中变量名区分大小写.
变量是一个“容器”,是一个“盒子”,是一个可以存放数据的位置——内存空间。
内存(条)中分割出很多很多的小格子,其中格子上都有标记(变量名),以及对应存放了数据。
举例: $data =123;
使用一个“标记符号”(标识符),来代表某个数据
定义形式: $变量名 = 具体的数据;
命名规则
赋值 & 取值
系统预定义变量
变量传值
可变变量
常量
含义
常量,就是一个用于存储“不会(也不允许)变化的数据”的标识符。
比如圆周率,在一定的应用场景中,就是是一个固定的值(人为规定为某个值)。
常量字符串const
系统内置常量 | 魔术常量 | 全局变化常量.
系统预定义常量
字符串
概念
字符串在C语言当中是当做字节数组处理的
字符串在PHP当中当做基本数据类型处理的,
字符串没有长度限制
字符串类型特点
单引号字符串
双引号字符串
常用字符串输出函数
常用字符串格式化函数
heredoc
nowdoc
转义字符
字符串长度
数组
概念
数组,是指将若干数据按一定的顺序组合为一个整体。
每个数据被称为一个“单元”——数组单元。
每个单元由两部分构成:下标和值,下标也称为“键”(key),
数组的一个重要特点是:其中的数据有明确的顺序,而是,是其放入数组时的先后顺序。下标定义
整数下标
索引数组
关联数组(字典)(JSON对象)
数组维数
遍历数组
变量定义
define()函数形式
define(‘常量名’, 对应的常量值);
常量名推荐使用“全大写”。
判断是否存在
截图
传值
值传递
引用传递
运算符
含义
就是对数据进行某种所需要的运算的语法符号,比如加减乘除,或比较大小,或判断真假。
表达式
赋值运算符:=
算术运算符:
/ %
连接运算符& 字符串运算符:
.自赋值运算符:
+= -= *= /= %= .=自操作运算符:
++ --比较运算符:
= < <= == != === !==
逻辑运算符:
&&(与) ||(或) !(非)条件运算符:
数据1 ? 数据2 : 数据3位运算符:
& | ~对象运算符
其他:
@,是错误抑制符
( ),括号,用于提升运算优先级,括号中的先运算。运算符优先级
流程控制
概述
程序运行过程中,根据判断条件的不同结果(true或false),决定是再次执行还是不再执行。
程序运行过程中,根据判断条件的不同结果(true或false),执行不同的分支(其他分支不再执行)。
程序运行的自然状态,就是从前往后(从上到下)运行程序。
顺序结构:
分支结构:
循环结构:
分支结构
巢状分支结构 if else 循环层次嵌套
单一条件分支结构 if
双条件分支结构 else
多条件分支结构 else if
多向条件分支结构 switch
循环结构
特殊控制语句
递归处理
递推处理
函数
函数的概念
函数不是数!
函数是一种代码形式(语法形式)。
函数是将“若干行代码”以一种语法形式包装成的一个整体。
该整体可以做到“需要的时候就去执行它”(就是执行其中的若干行代码)。
函数是解决在不同情形(不同代码位置)下需要执行相同代码的有效方式——所谓代码重用。
函数通常用于“专业的事由专业的人来做”这种现实世界的常见现象。也在其他语言中常被叫为”方法”.
函数的作用
函数详解
系统预定函数
作用域
应用各种形式的函数
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 normallyexit;exit();exit(0);//exit with an error codeexit(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()的方法执行,如果被其他文件导入,执行到此处后,该文件和后续代码都不会执行.
测试代码如下
<?phpecho '这是第一句话<br>';include "2.php";echo '这是第二句话<br>';?><?phpecho '这是第三句话<br>';exit('程序已退出<br>');echo '这是第四句话<br>';?>输出结果: 这是第一句话 这是第三句话 程序已退出
<?phpecho '这是第一句话<br>';include "2.php";echo '这是第二句话<br>';?><?phpecho '这是第三句话<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)" ="confirmDel( <?php echo $arr['id'] ?>)">删除</a>
循环读取数据库数据,输出html网页
PHP开发学习笔记(基础篇)_2.png
提交以后延迟跳转
PHP开发学习笔记(基础篇)_3.png
测试代码&验证代码
print_r($arr);
die();
活用isset函数规避错误
总结
本文仅对PHP基础进行了总结,目前正在进行PHP面向对象+MVC+项目实践的学习,这只是PHP的冰山一角.请等我后期的文章更新.