合并_01php基础语法(8days)笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并_01php基础语法(8days)笔记相关的知识,希望对你有一定的参考价值。

一.入门指引

1.php是什么?

PHP是什么?

Hypertext Preprocessor,超文本预处理器

Personal Home Page,个人主页

是一种在服务器端执行的脚本语言,可嵌入到 html中,尤其适合 web 开发。

?

  1. php可以做什么?

    网站,web程序 B/S架构

    ?

    技术分享

    ?

    命令行脚本

    桌面应用程序

    ?

    ?

    二.安装Apache

    制作一台服务器,来提高网页服务,只要安装了一个能提供网页服务的软件的电脑,就可以称之为网页服务器。

    常见的网页服务器软件

技术分享

?

安装Apache

1. 在D盘根目录下新建一个文件,命名为amp,并分别创建apache、php和mysql文件夹

2. 填写基本信息

技术分享

?

  1. 选择自定义安装,

    ?

    ?

    ?

    ?

    技术分享

    ?

  2. 选择安装路径

    技术分享

    ?

  3. 安装,完成

    ?

    6测试安装是否成功

    在浏览器中,输入http://localhost,看到如下界面,就表示安装成功

    技术分享

    分析:it work是哪里来的?

    技术分享

    ?

    在htdocs 下,有一个html页面,如下:

    技术分享

    ?

    Apache默认的文档目录,apache/htdocs

    默认的索引页:index.html

    ?

    Apache的安装易出问题的地方:

    关于端口的占用问题,http的端口是80,迅雷用的也是80端口。

    技术分享

    什么是静态网站,什么是动态网站?

    ?

    是否和数据库打交道,动态网站的内容是随时变化的,而静态则一成不变(除非更改源代码)。

    ?

    对于动态网站而言,我们需要提供一个数据源,通常情况下,是由数据库来完成的。比如mysql

    ?

    对于apache而言,他只能管理文件和文件夹,并不能完成和数据库的交互,也不能完成逻辑代码的编写,所以,我们需要一门语言来完成这个工作,这就是PHP了。

    ?

    对于静态网站来说,只有html,css和javascript,而动态网站,则包括一门语言和数据库(PHP+MySQL)

    ?

    ?

    三.安装PHP

    Php并没有独立的安装程序,它是作为apache的一个模块来安装的。

    安装步骤

  4. 在amp目录下新建一个文件夹,命名为php,然后将php安装包拷贝到该目录下,并解压。
  5. 然后配置apache
  6. 找到httpd.conf文件

    技术分享

    ?

  7. 具体配置

    ?

    要讲php作为apache的一个模块来运行,将php配置为apache的一个模块,使用loadmodule指令完成。

    LoadModule 模块名 模块文件

    技术分享

    ?

    技术分享

    ?

    凡是php文件,要指定将其php模块来处理。配置这个的指令有三种:

    第一种:使用addtype指令,

    技术分享

    ?

    第二种:使用addhandler指令

    技术分享

    ?

    这种,有一个小问题,就是只有文件名中含有.php,都会被当做php文件来解析。所以一般不推荐

    ?

    第三种:使用FilesMatch指令

    技术分享

    ?

    PHP在运行的时候,需要载入php的配置文件,由于php是作为apache的一个模块来运行的,所以我们需要告知apache,这个配置在哪里。

    ?

    找到php.ini相关文件

    技术分享

    ?

    复制其中一个,然后更名为php.ini

    使用PHPIniDir配置,设置PHP。Ini路径

    技术分享

    ?

    ?

    技术分享

    有了上述三个配置,基本上就可以完成apache和php的整合。

    ?

    ?

    注意,配置文件,很容易出错,一般来说,一个指令尽量要顶格写。

    ?

    有时候,还需要对php进行一些初始化设置。需要在php.ini文件中进行相应的配置。

    ?

    常用的配置:

    Extension,php扩展库目录

    ?

    技术分享

    ?

    在默认情况下,所有的扩展库都是关闭的,所以我们还需要手动开启相应的一些扩展库,比如gd库、myslq扩展库。

    技术分享

    ?

    市区设置

    技术分享

    ?

    一定要注意,在php.ini配置过程中,要顶格写。

    每一次配置都需要重启apache才能生效,php.ini也是一样。

    ?

    php与apache之间的联系

    Php作为apache的一个模块来运行的,php和apache是通过CGI来关联的。

    建议大家使用php5.3版本。

    ?

    四.安装MySQL

    安装步骤

  8. 在amp下新建一个目录,命名为mysql
  9. 安装
  10. 选择自定义安装

    技术分享

  11. 选择安装目录和数据存放目录

    技术分享

    ?

    技术分享

  12. 启动配置向导
  13. 选择详细配置

    技术分享

  14. 选择开发者机器

    技术分享

  15. 多功能

    技术分享

  16. 端口和模式设置

    技术分享

  17. 选择字符集

    技术分享

  18. 设置path

    技术分享

  19. 设置密码

    技术分享

    ?

    出现了错误

    ?

    技术分享

    ?

  20. 安装完成

    技术分享

    ?

    测试安装

    技术分享

    ?

    Php连接mysql。

    测试

    在phpinfo中查看是否有mysql,

    技术分享

    ?

    可以编写一段代码来测试,

    ?

    可以安装一个phpmyadmin来测试

    将phpmyadmin解压到在htdocs下,然后更名为phpmyadmin,然后访问即可。

    输入用户名和密码,进入主界面

    ?

    技术分享

    ?

    Mysql安装最容易出问题的当然,是卸载之后的安装,原因在于卸载并不彻底,主要是这数据存放目录data。默认在C:\\C:\\ProgramData\\Mysql\\Mysql server\\data

    ?

    ?

    五.虚拟主机配置

    通常情况下,一个web服务代理一个网站,但是有时候我们需要用一台服务器代理多个网站。这个就是基于域名的虚拟主机技术。

    ?

    我们可以直接在httpd.conf当中进行配置,也可以使用extra中的httpd-vhosts.conf配置,建议使用第二种方式。

    首先要开启vhost.conf配置,

    技术分享

    ?

    打开vhost.conf进行配置

    ?

    为了使用基于域名的虚拟主机技术,我们需要指定服务器的ip和端口来接收服务。

    这个通过NameVirtualHost 指令完成。

    NameVirtualHost *:80

    如果端口不是80 必须要改端口的,这句很关键

    ?

    其中*表示所有的ip地址,如果是一个具体的ip,你可以写上这个ip,但建议使用*,80指的是端口。

    接下来,要单独的配置具体的域名,通过 VirtualHost 指令段,其参数必须和NameVirtualHost

    而且在指令段中必须包含ServerName 和 DocumentRoot

    ?

    技术分享

    ?

    配置hosts文件,指定域名和DNS的对应关系。

    ?

    技术分享

    ?

    ?

    技术分享

    ?

    通过浏览器访问某个域名的时候,需要进行域名的解析,首先找本地的hosts文件,如果能解析,就使用本地的配置,如果不能解析,则去外网进行解析。

    ?

    ?

    现在去访问localhost,会怎么样?

    会访问到在vhost文件中配置的第一个虚拟主机。

    ?

    默认的虚拟主机,如果访问一个url,没有配置对应的虚拟主机,则会访问到vhost文件中配置的第一个虚拟主机。

    ?

    技术分享

    ?

    再来配置一个

    ?

    那如果要访问原来的localhost。

    ?

    技术分享

    ?

    在hosts文件配置域名ip对应关系

    技术分享

    ?

    ?

    ? 配置细节

  • 配置项一般不区分大小写,但参数通常是大小写敏感的
  • 配置项要顶格写,否则无效
  • #表示注释
  • / 和 \\ 的使用,路径的结尾不用添加斜线,建议使用/
  • "" 的使用,地址要使用引号包含
  • Apache 的每一次配置,包括后面的php.ini的配置,都需要重启apache才能生效
  • 如果配置错误,则Apache不能正常启动

?

思考一个问题:

一个主配置httpd.conf,一个是辅助配置文件vhost.conf

如果关闭辅助文件,然后再来访问localhost,会怎么样?

在主配置文件中,有如下配置:

技术分享

技术分享

?

六.访问权限配置

在G盘中配置一个虚拟主机shop.cc,然后在浏览器中进行访问,

技术分享

?

说明没有权限。

Apache有一个严格的权限控制。

?

通过directory指令来进行权限的配置。

默认的一个权限配置

技术分享

?

?

第一种解决方案:在主配置文件中配置directory段,如下

技术分享

?

第二种解决方案,在辅助文件中,对应的virtualhost 指令段中进行配置(推荐

技术分享

?

?

注意,这个配置要求更加严格,

?

将shop网站下的index.html更名为index1.html,出现如下状况:

技术分享

?

默认的索引页,

<IfModule dir_module>

DirectoryIndex index.html

</IfModule>

?

在默认情况下,只索引index.html,如果要默认能够访问index.php,可以在此处添加

DirectoryIndex index.html index.php

?

?

索引列表

如果没有默认的索引页,它会将该文件夹下面的所有文件以列表的形式展示出来,但是需要有权限才行。

?

技术分享

?

在实际的网站部署时,索引列表是应该 关闭的 。

FollowSymLinks 是指的符号链接,linux系统才有效。

?

关于Deny 和 Allow 的说明

[总则]:

影响最终判断结果的只有两点:

  • order语句中allow、deny的先后顺序;
  • allow、deny语句中各自包含的范围。

?

修改完配置后要保存好并重启Apache服务,配置才能生效;

开头字母不分大小写;

allow、deny语句不分先后顺序,谁先谁后不影响最终判断结果,但都会被判断到;

order语句中,"allow,deny"之间"有且只有"一个逗号(英文格式的),而且先后顺序很重要;

Apache有一条缺省规则,"order allow,deny"本身就默认了拒绝所有的意思,因为deny在allow的后面;同理,"order deny,allow"本身默认的是允许所有;

"order allow,deny"代表先判断allow语句再判断deny语句,反之亦然。

?

如果主文件和辅助文件都配置了权限,会怎么办?

以辅助文件为主

注意options这个指令,不会叠加,所以有时候我们会看到在indexes 有一个 + 或者 -的出现。

?

?

七.分布式配置文件

?

.htaccess

分布式配置文件,名字是固定的

?

?

配置分布式文件步骤:

  1. 开启分布式配置,默认情况下,这个是关闭的

    将 AllowOverride None 改为 AllowOverride All 就开启了分布式配置

    ?

  2. 创建.htaccess

    使用editplus编辑器或其他高级编辑器来创建

    ?

    ?

  3. 配置相应的权限

    凡是写在directory中的权限配置都可以写在这个文件当中。

    deny from All

    ?

    分布式配置文件修改之后,不需要重启,立即生效。

    ?

    和directory配置一样,所配置的权限在该目录及其子目录生效。

    ?

    ?

    思考:使用.htaccess好不好?

    ?

    优点:方便,给内容提供者一个自由配置权限的机会。

    ?

    缺点:性能所损失(不小),只要开启分布式配置,那么它会在每个文件夹下搜索.htaccess。

    ?

    一般不推荐使用分布式配置文件。

    ?

    ?

    ? 注意细节

  • .htaccess 文件,比较特殊,可以使用 editplus 或者 ST2 等编辑器来创建。
  • .htaccess 属于目录级别的控制,对应于 Directory 指令段中的配置。
  • .htaccess 默认并未启用,可在主配置文件中使用allowoverride 指令加以配置。
  • 配置修改.htaccess 文件,不需要重启,每次都会读取,性能有损失。

?

?

?

?

?

?

作业:配置一个虚拟主机,名字 test.ip.com,其中ip就是大家自己的IP,如test.192.168.5.32.com

?

?

?

?

?

八.Php语言基础

?

Php语言的执行周期

?

  1. apache来调用php模块
  2. 初始化php模块(读取php.ini配置文件,并加装相应的扩展库)
  3. 处理php代码
  4. 释放php的相应资源
  5. Php模块将处理结果返回到apache

    ?

    技术分享

    ?

    Opcode是zend 引擎能够识别并执行的代码。

    ?

    ?

    弄清一个概念?

    PHP是什么类型的语言? 编译型 or 解释型

    ?

    任何一门语言,C、PHP、java最终都要转换成机器能够识别的代码才行。这个过程通常称之为编译(解释、翻译)。

    ?

    编译之后,得到一个编译后的代码,对于编译后的代码,在执行的时候,通常有两种选择,一是重复的执行编译后的代码,一次编译,多次运行,这种类型的就是编译型

    二是每一次执行都需要编译一次,像这种类型的就是解释型语言。

    ?

    PHP属于解释型

    ?

    为什么需要标记?

    <?php ?>

    ?

    由于php是可以嵌入html代码的服务器端的脚本语言,php可以和html混在一起写,如果没有一个标记以区分哪个是PHP代码,那么php模块如何来处理php代码呢?

    ?

    标记有四种:

  • <?php ?> 标准的写法,推荐使用
  • <script language=‘php‘> </script>
  • <? ?> [需要开启short_open_tag] (在php.ini中开启)
  • <% %> [需要开启asp_tags]

大家需要注意的 <? ?>,但是在5.3之后,默认是关闭的。

?

Php语句结束符

开启错误显示

display_errors = On

?

每一行代码必须有一个分号作为语句结束符。

Php结束符 ?> 默认包含一个语句结束符

如果php代码段是整个文档内最后的一个代码段,可以省略结束标记 ?>

?

如果整个文件都是php代码,建议不写 ?>

?

注释:

单行注释:# //

多行注释: /* */

?

? 注意细节

  • 尽量多写注释
  • 注释应尽量规范化 [推荐使用phpdocumentor规范]
  • php注释只能注释php的代码,不能注释标签的内容
  • 放在html代码注释内的php代码也会被执行

?

技术分享

?

技术分享

?

?

?

一.变量

1.变量概念

所谓变量,是指在程序中其值可以变化的量。

?

程序是用来管理和处理数据的。在程序运行过程当中,我们需要保存这些数据,变量和常量就是用于保存程序运行时的数据的。

?

变量通常由两部分组成,变量名

技术分享

?

在php中,定义一个变量,使用$符号,在定义的时候不用理会其类型。

技术分享

?

增,就是赋值,比如$a = "PHP"

改, 重新赋值即可,$a = "Mysql"

查, 通过引用的方式 如 $a

删, 使用unset

?

Unset 到底干了什么?

去掉了引用,然后销毁变量。

?

变量的命名规范

  1. 变量名通常是由字母、数字和下划线组成,不以数字开头。
  2. 见名知意
  3. 对于一个有多个单词组成的变量名,单词之间如何分割,firstName,first_name。(入乡随俗)

    ? 注意细节

  • $不是变量名的一部分,这是语法,表示后边的标识符是一个变量(特殊的this)
  • 当使用一个没有定义的变量时,会报一个notice错误,可以使用isset来检查
  • 变量名是大小写敏感的,建议使用下划线方式

技术分享

技术分享

?

?

2.变量之间的赋值

在php中,变量赋值默认是采用值传递的方式。

?

技术分享

?

还有一种传值的方式,就是引用传递。

?

技术分享

技术分享

? 注意细节

unset一个变量时,删除了该变量,以及标识符到变量之间的引用

只有有名字的变量才可以引用赋值。($bar = &(24 * 7); // 非法;)

?

3.可变变量

变量名(变量标识符),它还可以是一个变量,这就是可变变量。

技术分享

?

简单的例子

技术分享

在php中,不仅有可变变量,还有可变函数。

?

4.预定义变量

php中存在很多不需要用户脚本来定义就可以直接使用的变量,称之为预定义变量。

  • $_POST
  • $_GET
  • $_REQUEST
  • $_SERVER
  • $_FIELS
  • $_SESSION
  • $_COOKIE
  • $_ENV
  • $GLOBALS

?

关于get和post,如果在get和post同时存在一个变量,应该取哪一个值。

?

取决于reques的顺序。

技术分享

?

起作用是后面POST。

?

$_REQUST = $_POST + $_GET

?

如果能够明确是post还是get提交,就直接使用post或者get,当不明确的时候,那就可以使用$_REQUEST。

?

$_SERVER,和HTTP协议以及服务器相关的一些信息。

?

技术分享:服务器的ip地址

技术分享:浏览器请求端的IP地址

技术分享:当前请求的完整的URL路径

技术分享:文件名,相对的路径

?

? 注意细节

  • 使用request时,如果post和get都有一个相同名称的变量时,则只保留post,取决于php的配置 request_order = ‘GP‘;
  • $GLOBALS 引用全局作用域中可用的全部变量

?

作用域

什么是作用域?

指的是变量的生效范围。

  • 全局变量
  • 局部变量
  • 超级全局

?

全局变量的作用域,也就是生效范围,在当前脚本,在脚本运行结束的时候失效。

?

?

二.常量

1.常量的基本用法

和变量相对应,在程序运行过程中,其值不能变化的量,这就是常量。

定义常量,需要使用define函数。

技术分享

?

常量一般都使用大写,我们可以通过define函数的第三个参数来决定是否区分大小写,默认情况是大小写敏感的,设置为true,则不区分大小写,但不建议这么做。

?

常量不能重新复制,

在编程的时候,有时候不知道常量是否已经定义,或者说在常量没有定义的情况下,我就要定义它。该怎么做?

?

使用defined函数来判断常量是否已经定义。

技术分享

?

常量的命名,规则和变量一致,但是使用大写。

?

变量和常量的区别

  1. 变量有$符号,常量没有。
  2. 常量只能使用define语句来定义,不能直接使用赋值语句。
  3. 变量是有作用域的,但是常量是没有作用域概念的。
  4. 常量的值一经定义,不可改变
  5. 常量的值只能是标量(整型,浮点,字符串,布尔)

    技术分享

    ?

    在php5.3以上,还可以使用constant函数来获取常量的值。

    技术分享

    2.预定义常量

    PHP自身也提供了大量的预定义常量,可以通过get_defined_constants函数获取。

    技术分享

    比如:

    技术分享

    ?

    技术分享

    技术分享:换行符,很重要

    不同操作系统其换行符是不同的,

    Windows:\\r\\n *nix:\\n MAC:\\r

    PHP_EOL,会根据不同的操作系统,使用不同的值。

    ?

    技术分享

    整型的最大值,整型占用的字节数

    ?

    技术分享

    目录分隔符,windows下面可以使用\\ 和/,而在*nix下面则只使用/。

    ?

    技术分享

    环境变量中路径与路径之间的分隔符。

    技术分享

    ?

    C:\\Program Files\\Intel\\WiFi\\bin\\ ; C:\\Program Files\\Common Files\\Intel\\WirelessCommon

    ?

    在手册中的位置

    技术分享

    3.魔术常量

    形似常量,实非常量。

    技术分享

    ?

    典型的应用(项目代码)

    技术分享

    下面的写法也是可以的,但要注意__DIR__必须在PHP5.3以上版本才支持。

    技术分享

    ?

    ? 注意

  • 它们的值随着它们在代码中的位置改变
  • 这些特殊的常量不区分大小写,但尽量大写,保持一致

?

魔术常量的名称 前后都有__,所以大家在定义常量的时候,就不要使用这种形式。

?

三.数据类型

什么是数据类型?

简单来说,具有某种类型的数据,不同类型的数据在结构上、操作上都有不同的限制和约定。

在PHP中,有八种数据类型,4 + 2 + 2

4: 4种标量类型(简单),整型、浮点型、布尔、字符串

2:两种复合类型,数组和对象

2:两种特殊类型,资源和NULL。

?

技术分享

?

?

PHP在定义变量的时候,是不需要声明类型的。但是它不代表没有类型的。

变量的类型是如何确定的?在程序运行的上下文来确定的。

?

如何来查看某个变量的数据类型? 使用var_dump函数。

?

技术分享

?

1.整型

在php当中,整型的范围,占用 个字节,最大值是多少?

技术分享

?

在PHP中,不支持符号。没有无符号的(unsigned)。

?

整型,除了可以使用十进制的表示方式之外,还可以使用八进制,16进制来表示。

八进制:以0开头,如012--->2*80 + 1 * 81 = 10

十六进制:以0x开头,0x12--->2*160 + 1 * 161 = 18

技术分享

不同的位,有不同的权。

技术分享

?

要将10进制转成其他进制,如2进制,8进制,16进制? 要使用长除法

55

技术分享

?

在php中,提供了一系列的函数用于进制之间的转换。

? decbin:10进制 -> 2进制

? dechex:10进制 -> 16进制

? decoct:10进制 -> 8进制

? bindec:2进制 -> 10进制

? hexdec:16进制 -> 10进制

? octdec:8进制 -> 10进制

?

Dec :10进制 bin:2进制

Oct :8进制 hex:16进制

? 注意细节

  • 对于整型,一旦数值过大,不会溢出,而是发生类型转换,会转成浮点型。
  • php不支持无符号整型。

?

技术分享

?

Php中的整型,无法定义让其只有正数部分。

2.浮点型

浮点型,在php中,float,double 实际上是相同的。

技术分享

?

在PHP中浮点数具有14位十进制数字的精度,最大值 和平台相关,通常是 1.8e308。

?

注意,浮点数的比较是不靠谱的。

技术分享

在编写程序的时候,不要试图通过比较两个浮点数是否相等来获得业务逻辑。

其它的定义浮点数的方式,科学计数法的方式 e或者E

技术分享

3.布尔类型

这是最简单的数据类型,它只有两个值,TRUE和FALSE,而且不区分大小写。

我们经常说0表示假,非0表示真。在程序运行的时候,会转换成布尔类型。0和1本身是表示整型的。

?

技术分享

?

通常情况下,布尔类型应用在程序的流程控制当中,尤其是if语句中。

4.字符串类型

一个字符串,它是由多个字符组成的,通常情况下,我们有四种方式来定义字符串。

  • 双引号
  • 单引号
  • Heredoc (定界符)
  • Newnoc (定界符)

?

在双引号中,可以解析变量,而在单引号中,是不能解析变量的。

技术分享

?

在单引号中,可以包含双引号,在双引号中,也可以包含单引号。但是不能自身。

技术分享

变量能不能解析,不是取决于变量被哪一个包含,而是取决于定义字符串是单引号还是双引号,如果是双引号,则变量解析,如果是单引号,则不解析。

技术分享

?

在字符串中,如果有{$ 连在一起的时候,就表示{}当中的这个作为一个变量进行解析。

技术分享

?

?

[需求]:使用php输出一个a标签,并给a标签定义一个点击事件,alert一句话。

?

需要使用转义字符

技术分享

?

转义字符

技术分享

在双引号中,支持所有的转义字符。

在单引号中,只支持‘ 和

?

使用PHP输出一段html代码

?

技术分享

Heredoc的结束符必须顶格写,且改行除了结束符和;,也不能有其他的内容。

5.数组

数组是一组数据的集合,是一个复合类型的。数组可以保存多个值。

数组中的每一个元素都是由Key/value组成的键值对。

数组的基本操作

增加 定义

定义一个数组有两种方式,使用array结构或者使用 []语法

在定义的时候,可以指定下标,也可以不指定下标。

技术分享

?

指定下标

下标的数据类型可以是哪一些?

通常情况下使用的是整型字符串,当然也可以使用浮点和布尔类型。只能是标量类型。

如果是浮点数,则会取整(只取整数部分)。如果是布尔类型,true->1 false->0,不要使用浮点和布尔。

?

如果下标重复,实际上就是修改该元素,那么其结果就是修改之后的值。

在一个数组中,可以同时存在整型下标和字符串下标。

以数字作为下标,我们一般称其为 索引数组。

以字符串作为下标的,我们一般称其为关联数组。关联数组能够表示业务逻辑。

?

不指定下标

在定义数组的时候,如果省略下标,如果还没有元素的话的,就从0开始,否则元素的下标就是在当前的最大索引上加1。

?

查看

可以使用print_r 和 var_dump,可以结合pre与格式标签,不要使用echo来输出数组,它只能输出Array。

?

修改

重新赋值即可。可以使用array语言结构全部修改,或者使用[]来修改某一个元素。

?

删除

删除数组有两种情况,一是删除其中的某个(某些),而是删除整个的数组。都可以使用unset。

技术分享

?

? 注意细节

  • 元素的下标只能是字符串和整型,可以使用浮点数,但会被取整,如果使用字符串形式的数字,则仍会被当做整数。如果使用布尔型,则true->1 ,false-> 0
  • 可以不指定下标,如果不指定下标,则系统会自动分配一个数字下标,其值是当前最大的下标 + 1。
  • 如果指定的键名已经有了值,则该值会被覆盖。
  • 应始终在用字符串表示的数组索引上加上引号。$foo[‘bar‘] √ $foo[bar] ×。
  • 字符串的 [] 特殊用法

技术分享

?

在字符串中,也可以使用数组的方式来访问该字符串中的字符。可以将字符串比作数组,而字符则是该数组中的元素。此时只针对单字节字符有效,如果是多字节,则会出现乱码。

技术分享

6.对象

和数组类似,是一个复合类型的数据,数组只能保存多个变量,而对象不仅可以保存多个变量,而且还可以保存方法。有时候,我们称对象是有生命力的数组。

技术分享

7.资源

在使用PHP编程的时候,有时候需要操作一些不属于PHP本身的一些资源,比如数据库,图形处理,文件处理。

当我们使用php扩展库的时候,就会得到一个资源类型的数据。

技术分享

?

8.NULL

NULL表示一个变量没有值,该类型只有一个值,就是NULL,而且不区分大小写。

什么样的数据会是NULL。

?

在下列情况下一个变量被认为是 NULL:

  • 被赋值为 NULL
  • 尚未被赋值
  • 被 unset()

?

最常见的一个应用就是将对象的值赋值为NULL,以销毁该对象。

?

9.伪类型

有时候,我们需要在程序或手册中描述数据的类型,这就是伪类型。

Number 数值型,如max函数

Mixed 混合类型(不确定),如var_dump函数

Callback 回调函数,如array_map

Void 空,如echo和pi

?

?

作业:

进制转换,十进制101转成二进制,八进制。

$a = 5, $b = 10,不用第三个变量,交换两个数的值。

利用循环及转义字符知识 输出 ASCII码中的可见字符。提示:32-126之间

?

?

?

?

?

?

?

?

?

作业说明

进制转换,十进制101转成二进制,八进制。

两种都要会,一是手算,理解原理。

二是利用系统函数,

二进制:bin

八进制:oct

十进制:dec

十六进制:hex

技术分享

其它进制转成十进制,参数是字符串。

?

?

$a = 5, $b = 10,不用第三个变量,交换两个数的值。

利用加减法(正解)

技术分享

?

下面的方法也可以

技术分享

?

?

利用循环及转义字符知识 输出 ASCII码中的可见字符。提示:32-126之间

?

一.类型转换

技术分享

?

运算数在参加运算的时候,需要将类型转为相同,然后才进行计算。在上面的例子中,第一个运算中,会先将$int转成浮点,然后和$f1相加,第二个运算中,会先将$str转成int类型,然后和$int相加。

?

在这个过程中,出现了类型转换。在上面的例子中,转换是系统自己进行的。

?

弱类型和强类型。

?

在定义一个变量的时候,不需要指定变量的类型,它的类型由程序的上下文来决定的,比如$a = 10,那就意味着$a是一个整型,$a = ‘hello‘,就意味着$a是一个字符串。

像这种确定变量类型的方式就是弱类型

与之对应的就是强类型,比如C、java、C#等。

?

变量在参与运算的时候,类型发生了变化,但变量本身的类型并没有改变。

?

?

注意两点:

  • 在参与运算的多个操作数据之间,运算之前都需要将数据类型转成一致才可以。
  • 这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。

?

通常有两种方式来完成类型转换:

  • 强制转换
  • 自动转换

?

强制转换,我们在需要转换的变量之前,使用类型关键字,用括号括起来。

Int 或者 interger

Float

Boolean

String

Array

Object

在PHP中,实现强制转换,在要转换的变量之前加上用括号括起来的目标类型即可。

  • (int), (integer) - 转换为 整型(integer)
  • (bool), (boolean) - 转换为 布尔型(boolean)
  • (float), (double), (real) - 转换为 浮点型(float)
  • (string) - 转换为 字符串(string)
  • (array) - 转换为 数组(array)
  • (object) - 转换为 对象(object)
  • (unset) - 转换为 NULL

?

将其他类型转为资源类型是没有意义的。

强制转换在程序中,应用并不多,大部分情况下,使用自动类型转换就可以完成业务逻辑。

?

转换规则

?

转换成字符串

  • 一个 整数 或 浮点数 被转变为数字的字面样式的字符串
  • 一个boolean TRUE 值被转换成 字符串"1"。 Boolean FALSE 被转换成"" ????
  • 数组转换成 字符串 "Array"
  • 资源总会被转变成"Resource id #1"这种结构的 字符串
  • NULL 总是被转变成空的字符串。

?

技术分享

?

?

转换成整型

  • 从布尔值转换,FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
  • 从浮点数转换,当从浮点数转换成整数时,将向下取整
  • 从字符串转换,如果字符串 没有包含 ‘.‘,‘e‘或‘E‘ 并且数字值符合整数类型的限定 ,可被认定是一个 integer, 否则被认定为一个float。字符串的开始部分给定了它的值,如果 字符串 以合法的数字开始,这个数字可直接使用。 否则,值就是 0 。

技术分享

?

转换成布尔型

当转换为 boolean 时,以下值被认为是 FALSE:

  • 布尔值 FALSE 自身
  • 整型值 0 (零)
  • 浮点型值 0.0 (零)
  • 空字符串, 以及 字符串 "0" (注意"00"、"0.0"被认为是TRUE)
  • 空数组
  • 特殊类型 NULL (包括尚未设定的变量)

?

所有其它值都被认为是 TRUE(包括对象和资源)。

1 和其它非零值(不论正负)一样,被认为是 TRUE!

技术分享

? 注意细节

  • HTML 表单并不传递整数、浮点数或者布尔值,它们只传递字符串
  • FALSE 是一个布尔值而 "false" 是一个字符串。

数据类型相关函数

  • Var_dump:打印变量的详细信息,包括类型和值
  • Gettype:获得类型
  • Settype:设置类型
  • Is系列:其中is_array会经常用到
  • Isset:检查一个变量是否存在(设置)
  • Empty:检查一个变量是否为空

?

对于isset而言,只要声明过(有值),不管它的值是什么,那么就返回true

对于empty而言,相当于 boolean(变量) ,然后再来取反。

技术分享

简单例子

技术分享

注意,在使用empty时候,要结合具体的业务逻辑类分析。

?

二.运算符

能够实现某种运算功能的符号。

根据不同的功能,可以分为以下几大类:

  • 算术运算符
  • 赋值运算符
  • 字符串运算符
  • 比较运算符
  • 递增/递减运算符
  • 逻辑运算符
  • 位运算符
  • 错误控制运算符
  • 三目运算符

?

不同的运算符所对应的的运算数是不同的,单目、双目、三目。

一个运算符在进行运算的时候,需要确保运算数是一致的。

1.算术运算符

技术分享

除法运算的结果,可能是浮点数,也可能是整数。

在取模运算中,如果有小数,则会去除小数部分。

在取模运算中,结果的正负取决于第一个数。

技术分享

面试题:

执行程序段<?php echo 8%(-3) ?>将输出

?

2.赋值运算符

就是 =

$a = ‘php‘

?

[思考]:$a = ($b = 4) + 5; 这行代码如何理解? $a = 9

赋值运算表达式的值也就是所赋的值。也就是说,"$a = 3"的值是 3。

表达式也是有值的。

有时候我们还将 = 和其它的运算组合到一起,形成组合赋值。

$a = $a + 5 => $a += 5;

?

3.字符串运算符

只有一个,就是 点 . ,没有加号,

注意的是,点 和 赋值运算符一起 形成 组成赋值。

.=

技术分享

4.比较运算符

技术分享

比较运算符,比较两个运算数的关系,返回的结果是一个布尔值

不等有两种写法,!= 和<>

技术分享

?

技术分享

?

? 注意细节

如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。

=== 和 == 的区别。比如 0 == false 返回真,而0 === false 返回假。

技术分享

?

5.递增递减运算符

++ 和 --

根据其位置的不同,又分为前++,前--,后++,后--

?

前置和后置的区别?

不管是前置还是后置,变量的结果是一致的。

不同的运算的顺序,通过表达式来分析,前置,++$b,是先进行运算,然后再得到值,

而后置$b++,则是先得到值,然后进行运算。

?

技术分享

?

? 注意细节

递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1

技术分享

?

技术分享

?

6.逻辑运算符

?

技术分享

与:两者都为true的情况才为true and

技术分享

或:两者都为false的才为false or

技术分享

?

非:非真即假,非假即真,直接取反。 !

?

异或:xor,如果两者相异,结果为真,两者相同,结果为假。

技术分享

?

之所以出现 && 和and 两种运算符,是由于它们的优先级不同。

?

短路运算

在进行逻辑运算的时候,如果通过第一个参数已经能够确定整个表达式的值,那么就不会进行后面的运算。

技术分享

?

对于 与 运算,如果第一个为假,则后面的不会进行计算。

对于 或 运算,如果第一个为真,则后面的不会进行计算

?

真实的代码:

技术分享

?

7.位运算符

按位进行运算,

位,bit,是指二进制表示中的每一个数值。 010101

字节 Byte,是由位构成的,通常是8 bit 00001010

1KB = 1024 Byte

1MB = 1024 KB

1GB = 1024 MB

1TB = 1024GB

技术分享

已知$a = 9,$b = -4,分别求: $a & $b, $a | $b, ~$b,$a ^ $b,$a >>2, $b<<2的值。

位运算都是以二进制的形式来出现的。

同时要注意,二进制的表示形式有 原码反码补码

?

原码

将十进制转成的二进制。用最高位表示符号位,0表示正数,1表示负数。

技术分享

?

反码

对于正数,反码和原码相同

对于负数,符号位不变,其它位取反。

技术分享

?

补码

对于正数,补码和原码相同

对于负数,在反码的基础上 + 1。

技术分享

?

计算机在底层进行运算的时候,是以补码的形式进行的。Why?

技术分享

?

$a & $b $a | $b的过程:

技术分享

?

  • 右移:低位溢出,符号位不变,高位用符号位补全 (相当于除以2n 然后取整)
  • 左移:高位溢出,符号位不变,低位补0 (相当于乘以2n

?

$a >> 2 和 $b << 2的运算过程:

技术分享

不管是左移还是右移,它只会改变该数的大小,不改变符号,所以在移位操作的时候,符号位始终是不变的。

?

在实际编程的时候,经常会用一个位表示一种状态(或一个值)。

技术分享

?

技术分享

8.错误控制运算符

技术分享

?

我们不期望看到错误,可以使用错误控制运算符进行屏蔽。

?

不是在每个会出现错误的地方使用这个运算,一般而言,对于我们无法控制的错误,比如去请求其它的资源的时候,可以使用。

?

? 注意细节

@ 运算符只对表达式有效。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

?

9.三目运算符

从名字我们就可以得知,这个运算符有三个运算数。? :

表达式1 ? 表达式2 : 表达式3

等价于一个简单的if……else语句

If (表达式1){

表达式2

} else {

表达式3

}

技术分享

使用三目运算符可以简化程序。

?

10.其它特殊运算符

主要有以下几个:

=> 数组运算符

表示键和值的对应关系

Array(‘os‘ => ‘Linux‘

[ ] 数组运算符

用于获取数组元素

-> 对象运算符

对象操作属性,以及方法的运算符

?

instanceof 对象运算符

判断某个对象是否是类的实例。

:: 域作用符,用在面向对象当中的。

?

11.结合性和优先级

先看一个问题:

技术分享

?

多个运算数在参与运算的时候,要注意它们的顺序和优先级。

?

在程序当中,并不是所有的运算符都是由左向右的,有一些是从右向左,比如赋值=。

一般来说,单目运算符比双目运算符的优先级高。

?

= 的优先级比较低,比它还低的有 and or xor ,

And 和 && 的区别

技术分享

? 注意细节

  • 运算符优先级指定了两个表

以上是关于合并_01php基础语法(8days)笔记的主要内容,如果未能解决你的问题,请参考以下文章

PHP学习笔记——入门篇——语法&变量

PHP学习笔记——入门篇——语法&变量

合并_00基础班php(6days)作业

Java基础学习笔记二十三 Java核心语法之反射

人生苦短 我学python之OldBoy21天入门_day01·Python基础语法

04mvc框架原理(8days)03