![![]
基础复习
1. 计算机是如何表示信息的
- 采用二进制: 0,1
- 无论是数据, 还是操作数据的代码, 都采用二进制表示
0100 1000
, 是数据,还是代码? 数据表示:48H
,代码表示赋值操作
2. 计算机是如何区分数据和代码的
- 任何需要执行的程序, 都要事先保存到计算机内存中
- 内存,可以想象成宾馆中的房间, 由房号和房间中的客人二部分组成
- 将内存大体上分为二部分, 代码段, 数据段,将数据与代码分别存入
- 在访问内存的时候, 通过操作系统提供的保护机制,防止越界访问
3. 数据与代码在程序中是如何体现的
//数据, 变量表示, 放在数据段
$site = 'php.cn';
// 代码, 函数表示, 放在代码码
function get_site($webSite)
{
return $webSite . ' 欢迎您';
}
// 调用执行, 指令一条一条的进入到CPU中
echo get_site($site);
程序到内存的映射示意图
4. 代码的执行流程控制
- 任何一门编程语言, 都会有三种流程控制: “顺序”, “分支”, “循环”
- 顺序: 是最基本的执行流程, 执行顺序与源码的书写顺序一致
- 分支: 是程序具有人工智能最重要的工具, 可根据预置条件判断代码片断是否需要执行
- 循环: 是计算机最擅长的领域, 计算机从开机到关机循环无处不在,整个程序就是一个循环
4.1 分支
if
: 单分支if - else
: 双分支if - elseif - else
: 多分支switch - case - break
: 多分支简化方案
4.2 循环
for
: 计数式foreach
: 遍历数组while
: 入口判断do - while
: 出口判断
Tips:
- 顺序执行是默认,也是最容易理解的形式, 不再实例演示
- 分支和循环结构,可以相互嵌套, 从而完成一些复杂的业务逻辑工作
5. 为什么数据要有类型
5.1 操作的要求
- 只有先明确了数据的类型,才能定义允许的操作
- 例如,数值型允许算术四则运算,而字符中类型不允许
5.2 存储的要求
- 只有先明确了数据类型, 才能正确分配内存空间
- 很明显,数值型和字符串型,布尔型,它们占用的存储空间是不同的
6. 数据类型有哪些
- 基本类型: 数值(整数/实数), 字符串类型, 布尔类型
- 复合类型: 数组, 对象
- 特殊类型: 资源(文件,数据库连接等), null
特殊类型的操作相对简单,我们重点放在基本和复合类型上
7. 基本数据类型的特点与操作
- 基本数据类型就三种: 数值,字符串, 布尔值
- 字符串必须使用定界符表示: 单引号/双引号
- 单引号: 纯字符串
- 双引号: 除纯字符串外, 还能解析变量和转义特殊字符
- 如果在字符串中引用了定界符,必须使用反斜线进行转义
- 一旦确定了数据类型, 除了操作方式, “取值范围”和”存储方式”同步确定
取值范围:
- 数值类型取值范围与计算机的字长相关, 64位机器与32位机器肯定不相同
- 字符串类型取值范围与字符编码集相关, utf8与gbk肯定不相同
- 布尔值就简单了,取值范围只有二个值:
true 真
,false 假
存储方式:
- 栈中存储的是定长数据类型, 例如整数4个字符,小数8个字节,布尔型1个字节
- 堆中存储的是不定长数据类型,例如字符串, 但是它的读取入口地址在栈中
- 任何数据类型的地址, 都是固定长度,与机器字长相关,大多是64位,即8个字节
类型说明
- 基本类型: 一个变量名,对应一个具体的值, 所以也叫”单值类型” 或 “标量类型”
- php中弱类型语言, 没有变量声明语句(变量声明意味着内存分配), 所以变量是无类型的
- 所谓数据类型, 准确的讲, 应该特指变量的值的类型
访问方式
echo
: 回显, 无返回值print($var)
: 打印变量, 与echo功能类似 , 但是会有返回值: 1print_r($var, false|true)
: 以更容易理解的方式打印变量(readily易于理解)var_export($var, false|true)
: 输出/返回变量的字符串表示var_dump($var1, $var2...)
: 打印一个或多个变量的结构,包括类型与值
8. 复合类型的特点与操作
- 复合类型只有二种: 数组与对象
- 复合类型: 由零个或多个任意类型的值组成, 所以也叫”多值类型“
存储方式
9. 再聊数组
- 数组: 根据访问成员的键名类型,分为 “索引数组” 和 “关联数组” 二类
- 索引与关联数组的概念非常直观, 生活中的案例随外可见
- 例如你有三个孩子,既可以按出生顺序称呼,例如老大,老二,老三,这就是索引数组
- 你也可以直呼姓名: 例如我的三个女儿, 朱颜, 朱曼, 朱萌, 这就关联数组
- 索引数组, 是按成员在数组中的位置访问, 所以非常依赖访问顺序
- 关联数组, 是直接按成中在数组中的键名访问, 所以不依赖访问顺序,顺序不重要
9.1 索引数组
- 定义:
$user = [101, 'admin', 'admin@php.cn'];
- 访问:
echo
,print_r()
,var_dump()
,var_export()
- 遍历:
for
- 转换:
list()
,implode()
,explode()
9.2 关联数组
- 定义:
$user = ['id'=>101, 'name'=>'admin', 'email'=>'admin@php.cn'];
- 访问:
echo
,print_r()
,var_dump()
,var_export()
- 遍历:
for
- 转换:
list()
,implode()
,explode()
10. 对象初体验
- 面向对象, 是我们认识世界的一种方式, 是对真实世界的一种抽象
- 对象的来源是函数, 是对”面向函数编程”的进化
- 面向对象是一种完全区别与”函数式编程”的全新的编程思想与编程规范
- 任何事物, 都可以认为是由动态的特征和静态的行为构成
- 例如人类, 都会有一些共同的行为,如呼吸,行走,不同的人之间通过动态特征区分
- 到了代码中, 动态特征用属性表示, 静态形为用方法表示
10.1 类与对象
- 类是对象的模板: 类中描述了对象应该有什么, 如何去访问它们?
- 对象是类的实例: 类实例化后,类中成员才会与一个具体的对象绑定
举例:
- 手机是一个类, 华为meta30pro,就是一人手机类的一个实例
- 汽车是一个类, 丰田卡罗拉2019-1.8L-E-CVT旗舰版就是一个汽车类实例
注意:
- 类与对象: 有时界限并不清晰, 在不违背常识前提下,概念混用是允许的
- 有些教程中, 在不影响理解前提下, 直接使用类来代表它的实例来引用类中成员(php.net/pdo)
- 例如, 有一辆汽车撞向你的女友/男友, 这时,你应该用类,还是用类实例来提醒她/他呢?
- 对象与实例: 对象与类的一个具体实例是绑定的,对象与实例称呼可以互换,并不会引起歧义
基本流程:
- 创建类:
class Demo{}
- 添加类成员:
public $property; public function func() {}
- 创建类实例/对象:
$obj = new Demo();
- 访问类成员:
$obj->property; $obj->func();
类与实例的引用
self
: 引用当前类$this
: 引用当前类的实例/对象
总结:通过朱老师的讲解,逐渐明白数组,课堂中的理论与实际结合教学模式很不错!老师辛苦了!