PHP 笔记——基础
一、PHP 简介
1. PHP是什么
- PHP:Hypertext Preprocessor,即超文本预处理器。
- PHP是一种跨平台、服务器端、可嵌入HTML文件的脚本语言。
- 嵌入了PHP代码的HTML文件称为PHP文件,扩展名通常为.php。
2. PHP工作流程
浏览器
- 主要功能是显示HTML网页内容,并让用户与这些网页内容产生互动
Web服务器
- WEB服务器的功能是解析HTTP。
- 目前可用的WEB服务器有很多,Apache服务器、IIS服务器、omcat服务器、Nginx等。
PHP预处理器
- 主要功能是解析PHP代码
数据库服务器
- 提供数据查询和数据管理服务的软件
二、PHP 基础
(1)PHP 标记符
标记:区分HTML与PHP代码,使用标记对PHP代码进行标识。
标记类型 | 开始标记 | 结束标记 | 开启项 |
---|---|---|---|
标准标记 | <?php | ?> | 无 |
短标记 | <? | ?> | short_open_tag |
ASP式标记 | <% | %> | asp_tags |
Script标记 | <script language="php"> | </script> | 无 |
在PHP7中,仅支持标准标记和短标记。
(2)PHP 注释
注释:可以使用注释来进行解释和说明。
分类 | 风格 | 示例 |
---|---|---|
单行注释 | C++风格的单行注释 “//“ | // 输出一句话 |
单行注释 | Shell风格的注释 “#” | # 输出一句话 |
多行注释 | C 风 格 的 多 行 注 释 “/……/” | /* echo 'Hello, PHP'; echo 100 + 200; */ |
(3)PHP 标识符
标识符:自定义一些符号来标记一些名称。
标识符的定义需要遵循一定的规则,具体如下:
- 标识符只能由字母、数字、下划线组成,且不能包含空格。
- 标识符只能以字母或下划线开头的任意长度的字符组成。
- 标识符区分大小写,类和关键词除外。
- 如果标识符由多个单词组成,那么应使用下划线进行分隔。
(4)输出语句
分类 | 说明 |
---|---|
echo | 可将紧跟其后的一个或多个字符串、表达式、变量和常量的值输出到页面中。 多个数据之间使用逗号 “,” 分隔。 |
与 echo 的用法相同,唯一的区别是print只能输出一个值。 | |
print_r() | PHP的内置函数,它可输出任意类型的数据,如字符串、数组等 |
var_dump() | 不仅可以打印一个或多个任意类型的数据,还可以获取数据的类型和元素个数。 |
(5)常量
- 概念:常量就是在脚本运行过程中值始终不变的量。
- 特点:一旦被定义就不能被修改或重新定义。
- 举例:数学中的圆周率π就是一个常量,其值就是固定且不能被改变的。
- 命名规则:遵循标识符的命名规则,默认大小写敏感,习惯上常量名称总是使用大写字母表示。
(6)常量的定义和使用
1. 常量定义使用 define() 函数,其基本格式如下:
bool define( string $name, mixed $value[, bool $case_insensitive = false] )
- $name:表示常量名称的字符串。
- $value:常量值,可以是字符串、整数或浮点数。
- $case_insensitive:其值为true或false,false为默认值。true表示该常量名称在使用时不区分大小写,false
表示要区分大小写。(即 true:大小写不敏感;false:大小写敏感。)
2. 可以用函数 constant() 来获取常量的值。
通过 name 返回常量的值。当你不知道常量名,却需要获取常量的值时,constant() 就很有用了。也就是常量名储存在一个变量里,或者由函数返回常量名。
mixed constant( string $name )
3. defined() 函数可用于测试常量是否已经定义。
bool defined( string $name )
如果名称 name 的常量已定义,返回 TRUE;未定义则返回 FALSE。
(7)预定义常量
常量名 | 功能描述 |
---|---|
_FILE_ | PHP程序文件名 |
_LINE_ | PHP程序中的当前行号 |
PHP_VERSION | PHP程序的版本,如 “7.1.4” |
PHP_OS | 执行PHP解析器的操作系统名称 |
TRUE | 该常量是一个真值(true) |
FALSE | 该常量是一个假值(false) |
NULL | 该常量是一个空值(null) |
E_ERROR | 该常量表示错误级别为致命错误 |
E_WARNING | 该常量表示错误级别为警告 |
E_PARSE | 该常量表示错误级别为语法解析错误 |
E_NOTICE | 该常量表示错误级别为通知提醒 |
(8)变量
概念:变量就是保存可变数据的容器。
组成:在PHP中,变量名是由 $ 和 标识符 组成
PHP 变量规则:
- 变量以 $ 符号开头,其后是变量的名称。
- 变量名称必须以字母或下划线开头,不能以数字开头。
- 变量名称只能包含字母数字字符和下划线。
- 变量名称对大小写敏感。
1. 变量是否设置
isset(mixed $var)
- 变量不存在
- 返回 FALSE
- 变量存在
- 值为NULL——返回 FALSE
- 值不为NULL——返回 TURE
2. 删除变量
unset(mixed $var)
(9)变量赋值
由于PHP是一种弱语言,变量不需要事先声明,就可以直接进行赋值使用。
实现方式:
- 传值赋值:变量默认总是传值赋值。当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
- 引用赋值:所谓引用赋值就是在要赋值的变量前添加 “&” 符号。新的变量简单的引用(换言之,"成为其别名" 或者 "指向")了原始变量。改动新的变量将影响到原始变量,反之亦然。
(10)可变变量
在变量名称之前加一个 “$” 符号,即可将变量的值作为变量名称。
<?php
$a = 'hello';
$$a = 'world';
echo "$a ${$a}"; // hello world
echo "$a $hello"; // hello world
?>
三、数据类型
(1)boolean 布尔型
这是最简单的类型。boolean 表达了真值,可以为 TRUE 或 FALSE。
要指定一个布尔值,使用常量 TRUE 或 FALSE。两个都不区分大小写。
(2)Integer 整型
整型值可以使用十进制,十六进制,八进制或二进制表示,前面可以加上可选的符号( - 或者 + )。
二进制表达的 Integer 自 PHP 5.4.0 起可用。
要使用八进制表达,数字前必须加上 0(零)。要使用十六进制表达,数字前必须加上 0x。要使用二进制表达,数字前必须加上 0b。
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83)
$a = 0x1A; // 十六进制数 (等于十进制 26)
$a = 0b11111111; // 二进制数字 (等于十进制 255)
(3)Float 浮点型
浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
(4)String 字符串
字符串是由连续的字母、数字或字符组成的字符序列。
分别为单引号、双引号、定界符三种语法结构。
1. 单引号
定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ' )。
要表达一个单引号自身,需在它的前面加个反斜线( \ )来转义。要表达一个反斜线自身,则用两个反斜线 ( \\ )。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。
在单引号字符串中的变量和特殊字符的转义序列将不会被替换。 单引号括起来的字符串被原样输出。
2. 双引号
双引号字符串中的变量被PHP解析为变量值,即字符串中的变量在输出时输出变量的值而不是变量名称。
3. 定界符
3.1 Heredoc 结构
heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。
结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。
Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义,但是上文中列出的转义序列还可以使用。变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
3.2 Nowdoc 结构
就像 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。
一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
(5)Array 数组
要点 | 说明 |
---|---|
数组构成 | 数组是由一个或多个数组元素组成的 |
数组元素 | 每个数组元素由键(Key)和值(Value)构成 |
键 | 元素的识别名称,也被称为数组下标 |
值 | 元素的内容 |
映射 | 键 和 值 之间存在一种对应关系,称之为映射 |
类型划分 | 根据键的数据类型,可以将数组划分为索引数组和关联数组 |
更多内容 请见 PHP笔记——Array 数组
(6)Object 对象
详见面向对象编程
(7)检测数据类型
PHP提供了一组 is_*() 的内置函数,括号里的参数为待要检测的值。如果检测的值符合检测的数据类型,则返回 true,否则返回 false。
函数名称 | 功能描述 |
---|---|
is_bool() | 检测是否属于布尔类型 |
is_string() | 检测是否属于字符串类型 |
is_float() | 检测是否属于浮点类型 |
is_int() | 检测是否属于整型 |
is_null() | 检测是否属于空值 |
is_array() | 检测是否属于数组 |
is_resource() | 检测是否属于资源 |
is_object() | 检测是否属于对象类型 |
is_numeric() | 检测是否属于数字或数字组成的字符串 |
(8)数据类型转换
1. 自动转换
- 布尔型
类型转换 | 说明 |
---|---|
布尔型->数值型 | true->整数1 false->整数0 |
布尔型->字符串型 | true->字符串"1" false和NULL->空字符串"" |
- 数值型
类型转换 | 说明 |
---|---|
数值型->字符串型 | 整数、浮点数->对应的字符串型数据 |
数值型->布尔型 | 整数0、浮点数0.0、NULL以及空数组->false 其他->true |
- 字符串型
类型转换 | 说明 |
---|---|
字符串型->数值型 | 字符串以合法的数值开始,则会截取字符串头部的数字部分 字符串不是以合法的数值开始,其值为 0(零) |
字符串型->布尔型 | 空字符串""、字符串"0"、NULL以及空数组->false 其他->true |
2. 强制转换
- 使用类型名
- 使用类型取值函数
- 特殊点
<?php
var_dump(0.9 == (1-0.1));
var_dump(0.1 == (1-0.9));
?>
运行结果:
bool(true)
bool(false)
原因:计算机运算用的是 二进制, 用二进制表示浮点数(有小数),也带来了运算中的精度问题。
四、运算符
(1)算数运算符
例子 | 名称 | 操作符 |
---|---|---|
-$a | 取反 | - |
$a + $b | 加法 | + |
$a - $b | 减法 | $a 和 $b 的差。 |
$a * $b | 乘法 | * |
$a / $b | 除法 | / |
$a % $b | 取模 | % |
$a ** $b | 幂运算 | ** |
除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
(2)字符串运算符
1. 拼接 "."
字符串运算符只有一个,即英文的句号“.”。它将两个或多个字符串连接起来,结合到一起形成一个新的字符串。PHP中的“+”号只做赋值运算符使用,而不能做字符串运算符。
2. “.”连接和“+”连接结果的区分
- 使用“.”时,变量$m和$n两个字符串组成一个新的字符串
- 使用“+”时,PHP会认为这是一次算术运算
“+”号的两边有字符类型,则自动转换为整型。字符串的开始部分决定了它的值。
- 字符串以合法的数值开始,则会截取字符串头部的数字部分
- 字符串不是以合法的数值开始,其值为 0(零)
(3)逻辑运算符
1. 与
运算符 | 说明 |
---|---|
&& | $a和$b都为true,结果为true,否则为false |
and | 与&&相同,但优先级较低 |
2. 或
运算符 | 说明 |
---|---|
|| | $a和$b中至少有一个为true,则结果为true,否则为false |
or | 与||相同,但优先级较低 |
3. 非
运算符 | 说明 |
---|---|
! | 若$a为false,结果为true,否则相反 |
4. 异或
运算符 | 说明 |
---|---|
xor | $a和$b的值一个为true,一个为false时,结果为true,否则为false |
(4)比较运算符
运算符 | 说明 |
---|---|
== | 相等 |
!= | 不等 |
=== | 恒等 只有当两个变量的值和数据类型相同时,结果才为TRUE |
!== | 非恒等 |
(5)优先级
PHP 笔记——基础的更多相关文章
- jQuery学习笔记 - 基础知识扫盲入门篇
jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...
- 小猪猪C++笔记基础篇(五)表达式、语句
小猪猪C++笔记基础篇(五) 关键词:表达式.语句 本章的内容比较简单,基本上没有什么理解上的困难,都是知识上的问题.先开始想要不要写呢,本来是不准备写的,但是既然读了书就要做笔记,还是写一写,毕竟还 ...
- 小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助
小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧 ...
- 小猪猪C++笔记基础篇(四)数组、指针、vector、迭代器
小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)
注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...
- 《python基础教程(第二版)》学习笔记 基础部分(第1章)
<python基础教程(第二版)>学习笔记 基础部分(第1章)python常用的IDE:Windows: IDLE(gui), Eclipse+PyDev; Python(command ...
- flex笔记 - 基础
flex笔记 - 基础 文章中的所有图示代码都放在了github上: 阮一峰flex博客跟学代码 传统的布局解决方案,基于盒模型, 依赖 display, position, float属性来进行布局 ...
- PowerShell 笔记 - 基础篇
Powershell 笔记 基础 查看powershell版本 PS C:\Users\chino> $PSVersionTable Name Value ---- ----- PSVersio ...
- 《Java笔记——基础语法》
Java笔记--基础语法 一.字符串的拼接: 例如: System.out.println(""+""); 二.换行语句: 例如: Syst ...
随机推荐
- HTML DOM 节点介绍(nodeName,nodeValue,nodeType)
对于初学者来说,HTML DOM 里面的 nodeName.nodeValue 以及 nodeType 三个属性的作用和取值不是很清楚.下面整理的信息包含有关于节点的详细信息,供参考. 节点信息 每个 ...
- python 版本zabbix_sender
python版本的zabbix_sender: 使用方法: 1.导入 : from zbx_send import info 2.实例化: test=info() 3.支持 ...
- Linux内核多线程实现方法 —— kthread_create函数【转】
转自:http://blog.csdn.net/sharecode/article/details/40076951 Linux内核多线程实现方法 —— kthread_create函数 内核经常需要 ...
- linux系统cpu使用100%的命令
for i in `seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)`; do dd if=/dev/zero of=/d ...
- git中如何查看一个文件的修改(更新)历史
有些时候有些文件或文件夹被移除了, 或者更换了路径或被改名了, 想跟踪一下这个文件被修改(更新)的历史, 可以用如下命令: git log -p matser -- filename 格式是: git ...
- GitHub vs GitLab:它们有什么区别?
查看原文GitLab vs. GitHub: How Are They Different? 两者都是基于web的Git repositories(仓库),拥有流水线型的web开发流程,它们为开发团队 ...
- PHP--- JSON和数组的转换
一.json_encode() <?php $arr =array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_ ...
- Myeclipse编辑jsp文件很卡是什么原因?
可能是配置问题,配置的时候不要把myeclipse连接到网络.否则每次编辑的时候要在网上查找,所以照成很卡.window->perferences->java->Installed ...
- Linux时间结构体和获得时间函数
关于Linux下时间编程的问题: 1. Linux下与时间有关的结构体 struct timeval { int tv_sec; int tv_usec; }; 其中tv_sec是由凌晨开始算起的秒数 ...
- Windows内核读书笔记——SEH结构化异常处理
SEH是对windows系统中的异常分发和处理机制的总称,其实现分布在很多不同的模块中. SEH提供了终结处理和异常处理两种功能. 终结处理保证终结处理块中的程序一定会被执行 __try { //要保 ...