php基础知识及基本语法(php闪电入门基础知识)
为什么用浮点数表示实数 PHP七天系列之基础知识
基础入门
PHP是什么?
PHP(PHP: Hypertext Preprocessor,超文本预处理器的缩写),是一种被广泛应用的开放源代码的、基于服务器端的用于产生动态网页的、可嵌入HTML中的脚本程序语言,尤其适合 WEB 开发。
当客户端向服务器的程序提出请求时,web服务器根据请求响应对应的页面,当页面中含有php脚本时,服务器会交给PHP解释器进行解释执行,将生成的html代码再回传给客户端,客户端的浏览器解释html代码,最终形成网页格式的页面。
执行方式
PHP 代码被包含在特殊的起始符和结束符中,使得网页的脚本可以进出“PHP 模式”。其它用 C 或 Perl 语言写的脚本,需要用大量的命令来编写程序以输出 HTML ,而用PHP 编写一个 HTML 脚本,只需嵌入了一些代码来完成操作(例如,在本例中输出了一些文本)。和客户端的 JavaScript 不同的是,PHP 代码是运行在服务端的。如果在服务器上建立了如上例类似的代码,则在运行该脚本后,客户端就能接收到其结果,但他们无法得知其背后的代码是如何运作的。甚至可以将 web 服务器设置成让 PHP 来处理所有的 HTML 文件,这么一来,用户就无法得知服务端到底做了什么。
PHP运行环境安装
大家在初始学习PHP时使用集成化开发环境是更好的选择,下面是常用的集成开发环境
集成开发软件可使用的操作系统说明WAMPWin推荐XAMPPWin/Mac
MMac推荐LLinux(CentOS/Fedora/Debian/Ubuntu)
PHP的特点
是开放源代码的,服务器端的脚本语言。独立于操作系统,可以运行在几乎所有系统中。支持大部分的服务器,如Apache,IIS。支持大量的数据库,主要是Access\MySQL\SQL Server这三种。可以创建图象。… …还有一些其他特色功能在后面的高级技术详细介绍。我们知道的网站如迅雷、新浪微博等大型网站都在使用PHP程序。C/S与B/S结构
C/S结构
C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构
B/S结构
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端(Server)实现。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。
集成开发环境
WAMP
Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
MAMP
苹果系统下MAMP PRO是专业级版本的经典本地服务器环境的os x软件。MAMP这几个首字母代表苹果的OSX系统上的Macintosh、Apache、MySQL和PHP,顾名思义,你应该知道MAMP的强大功能 啦!MAMP 内含 Apache 伺服器、PHP 安装套件以及MySQL安装套件。
PHP的标记风格
lt?php … … ?gt
这是PHP推荐使用的标记风格。服务器管理员不能禁用这种风格的标记。
分号
PHP用分号来分隔简单的语句。复合语句用大括号来标记代码块,如条件测试或循环,在大括号后面不要用分号。和其他语言不一样的是,在PHP中右括号(?gt)前的分号不是必选的。
空白和换行符
,空白符在PHP中无关紧要。可以将一个语句展开成任意行,或者将语句紧缩在一行。可以利用这个灵活的格式来使代码更具有可读性(通过排列分配、缩进等)。一些懒惰的程序员利用这种自由的格式创建根本无法阅读的代码,这是不提倡的。
程序的注释
PHP支持C、C++和Shell脚本风格的注释,如下
// 单行注释/ .../ 多行注释nbsp(注意不能嵌套)# 脚本注释
查看数据
echo
输出一个或多个变量,他不是函数,不需要使用括号,如果输出多个请用逗号分隔
echo 1,2,3,4
var_dump
打印变量的相关信息
var_dump(1234)
区别echo 是直接输出,var_dump输出和带有变量类型
变量知识
定义变量
PHP是弱类型语言,不像其他语言需要对变量进行类型声明。PHP中以 $ 作为前缀来定义变量,以a~z(大小写)或 _ 下划线定义变量名。
下面是合法的变量名
$pfnbsp= #39PFinalClub#39$_name = #39PFinal社区#39
下面是非法的变量声明
$999 = #39yahoo.com#39$ = #39sin .cn#39
弱类型
PHP是一种非常弱的类型语言。在大多数编程语言中,变量只能保持一种类型的数据,而且这个类型必须在使用变量前声明,例如C语言中。
而在PHP中,变量的类型通常不是由程序员设定的,确切地说,是根据该变量使用的上下文在运行时(即变量的值)决定的。
简单来说,var = 1就是数字,var2 = #391#39就是字符串,变量类型是由值决定的。
传值与引用
传值赋值
直接使用 = 将变量的值赋值给另一个变量。
$a = 1$b = $a$b = 2echo $a//结果是1
引用赋值
将一个变量的内存地址赋值给另一个变量的行为即传址赋值。需要在 = 等号前加上 引用符号,这样两个变量指向内存中的一个地址,任何一个变量的改变都影响到另一个变量,有点类似于快捷方式的概念。
$a = 1$b = $a$b = 2echo $a//结果是2
可变变量
可以变量即使用一个变量的值,作为另一个变量名。
$a = #39hello#39//普通变量$$a = #39world#39//可变变量 相当于$hello = ‘world’echo #34$a ${$a}#34//输出hello worldecho #34$a $hello#34//输出hello world
变量作用域
变量作用域指变量在代码中可以访问的位置。
超全局变量
可以代码的任何位置都可以访问的变量
变量说明$_GET地址栏GET提交$_POST表单POST提交$_FILES文件上传变量$_SESSION会话变量$_COOKIEcookie值变量$_GLOBALS全局变量$_REQUEST包含$GET、$POST、$_COOKIE$_SERVER服务器环境变量
全局变量
全局声明(函数外声明)的变量会保存在 $_GLOBALS 中,函数内默认不能访问到全局变量,在函数中访问需要使用 global 关键字。
$pf=#39PFinal#39function p() {//利? global 引入全局变量global $pfecho $pf}p()
也可以使用全局数组$GLOBALS调?用全局变量量。如$GLOBALS[#39pf#39]
检测变量
通过isset 函数可以检测变量是否定义。
var_dump(isset($name))# 结果是false
变量销毁
php在全部代码执行结束后会删除所有变量,也使用 unset 函数可以在程序运行中删除变量。
$name=#39pfinalClub.com#39unset($name)
全局变量不能在函数中删除
$name = #39pfinalClub.com#39function run(){nbsp global $namenbsp unset($name)}run()echo $name# 依然可以输出 pfinalClub.com
静态变量
PHP支持声明函数变量为静态的(static)。一个静态变量在所有对该函数的调用之间共享,并且仅在脚本的执行期间函数之一次被调?时被初始化。要声明函数变量为静态的?关键字static。通常静态变量的之一次使?用时赋予?个初始值。
function calculate(){nbsp static $a=1nbsp return ++$a}calculate()echo calculate()
数据类型
使用不同数据类型储存不同数据,就像我们家里面放衣服和放洗手液会使用用不同的容器一样。下面是常用PHP数据类型表
类型说明integer整型float浮点型string字符串boolean布尔型array数组object对象
整型
整型可以是十进制、八进制、十六进制。
01988 #十进制0xfff #十六进制
下面是 777 八进制数转成 10进制数,即逢8进1原则,PHP中使用 octdec() 函数可以将8进制转为10进制。
下面是十六进帛 FAF 转为10进制数,PHP中使用hexde()函数将16进制转为10进制
浮点数
浮点数表示实数,可理解为有限或无限小数。
0.12-10.98
布尔型
当转换为 boolean 时,以下值被认为是FALSE这个地方提示学生不用记,按照自己的感觉来就可以判定了,读完一遍之后把ppt关掉,提问true还是false,学生都会知道的
布尔值 FALSE整型值 0(零)浮点型值 0.0(零)空白字符串字符串 #340#34没有成员变量的数组没有单元的对象(仅适用于 PHP 4)特殊类型 NULL(包括尚未设定的变量)所有其它值都被认为是 TRUE
字符串
定义
引号
字符串可以用双引号#34#34 或 #39#39 号包含,区别是双引号中可以解析变量。
$url = #39pfinalClub.com#39$string = #34PFinal社区网址是 {$url}#34
在所有输出前使用下面的代码可以正确显示中文
header(#39Content-type:text/htmlcharset=utf-8#39)
定义符
定界符文本表现的就和双引号字符串一样,在定界符文本中不需要转义引号,适合输入大量文本。
结束符必须从之一列开始,并且后面除了分号以外不能包含任何其他字符,空格也不可以。
$string =ltltltstr这是使用定界符输入的内容strecho $string
连接符
多个字符串使用 . 符号连接
$name = #39PFinal社区#39$url = #39PFinalClub.com#39echo $name.$url
转义
转义是将有多种含义的字符进行转换,比如 $即是变量前缀也是美元符号,就需要转义在不同场景进行改变。
echo #34变量定义 \$name = #39pfinalCLub.com#39,学会了吗?#34
常用函数
strlen — 取得字符串长度传度的函数
echo strlen(#39pfinalClub.com#39)
mb_strlen — 根据字符编码获取长度
echo mb_strlen(#39PFinal社区#39,#39utf8#39)
trim — 截去字符串首尾的内容
$string = #39 pfinalClub.com #39echo strlen(trim($string,#39 moc#39))# 从前后删除 moc和空格字符
rtrim从右侧删除、ltrim从左侧删除
$string = #39 pfinalClub.com #39echo strlen(rtrim($string,#39 moc#39))
strtolower — 字母转为小写
$str = #34Mary Had A Little Lamb and She LOVED It So#34$str = strtolower($str)echo $str // Prints mary had a little lamb and she loved it so
strtoupper — 字母转大写
$str = #34Mary Had A Little Lamb and She LOVED It So#34$str = strtoupper($str)echo $str // Prints MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
ucfirst — 将字符串的首字母转换为大写
$foo = #39hello world!#39$foo = ucfirst($foo) // Hello world!
ucwords — 将字符串中每个单词的首字母转换为大写
$foo = #39hello world!#39$foo = ucwords($foo) nbsp nbsp nbsp nbsp nbsp nbsp // Hello World!$foo = #39hello|world!#39$baz = ucwords($foo, #34|#34) nbsp nbsp nbsp // Hello|World!
md5 — 计算字符串的 MD5 散列值,以 32 字符十六进制数字形式返回散列值
md5(#39pfinalClub.com#39) //962ff8546a001f8f6d0adecf08905d14
explode — 使用一个字符串分割另一个字符串
$pizza = #34piece1 piece2 piece3 piece4 piece5 piece6#34$pieces = explode(#34 #34, $pizza)echo $pieces[0] // piece1echo $pieces[1] // piece2
implode — 将一个一维数组的值转化为字符串
$array = array(#39lastname#39, #39email#39, #39phone#39)$comma_separated = implode(#34,#34, $array)echo $comma_separated // lastname,email,phone
substr — 返回字符串的子串
$rest = substr(#39abcdef#39, 1) nbsp nbsp // bcdef$rest = substr(#39abcdef#39, 1, 3) // bcd$rest = substr(#34abcdef#34, 0, -1) // 返回 #34abcde#34$rest = substr(#34abcdef#34, 2, -1) // 返回 #34cde#34$rest = substr(#34abcdef#34, 4, -4) // 返回 #34#34$rest = substr(#34abcdef#34, -3, -1) // 返回 #34de#34
mb_substr — 获取部分字符串
echo mb_substr(#39PFinal社区#39, 1, 1, #39utf-8#39)nbsp
strstr — 查找字符串的出现
$email = #39name@exle.com#39$domain = strstr($email, #39@#39)echo $domain // 打印 @exle.com
strrchr — 查找指定字符在字符串中的一次出现
echo strrchr(#39pfinal.jpg#39, #39.#39) // .jpg
strpos — 查找字符串出现的位置,如果没找到,将返回 FALSE
echo strpos(#39pfinal.com#39, #39o#39) // 返回1
strrpos — 计算指定字符串在目标字符串中一次出现的位置
echo strrpos(#39pfinal.com#39, #39o#39) // 返回11
str_replace — 子字符串替换
echo str_replace(#39pfinalClub#39, #39pfinal#39, #39Club.com#39)nbspecho str_replace([#39小猫#39,#39小狗#39], #39#39, #39我家有一只可爱的小猫和小狗#39)//我家有一只可爱的和echo str_replace([#39小猫#39,#39小狗#39], [#39猫猫#39,#39旺旺#39], #39我家有一只可爱的小猫和小狗#39) //我家有一只可爱的猫猫和旺旺
NULL
NULL数据类型只有一个值NULL。
变量未被赋予任何值变量被赋值为NULL被unset()函数处理后的变量\$a//变量 \$a未被赋予任何变量,值为NULL\$b = NULL//变量 \$b被赋值为NULL\$c = 10unset($c)//使用unset()函数处理后,\$c为NULL
相关函数
getType()
\$numnbsp=nbsp1234\$typenbsp=nbspgettype(\$num)var_dump(\$type)
检测是否为布尔型
\$var = true\$bool = is_bool(\$var)var_dump(\$bool)
检测是否为整型
$int = 1234$bool = is_int($int)var_dump($bool)
检测是否为浮点数
$num = 1.1234$bool = is_float($num)var_dump($bool)
检测是否为字符串
$string = #39pfinal#39$bool = is_string($string)var_dump($bool)
检测是否为NULL
$var = null$bool = is_null($var)var_dump($bool)
类型转换
自动转换
PHP类型根据值,自动转换
$num1 = #391#39$num2 = #392#39echo $num1 + $num2 # 字符串转为数字相加
强制转换
settype($var,#39type#39) # type类型为integer、double、string、array 与 object$var = #39123#39settype($var,’integer’)var_dump($var) 就会变成int类型intval() $var = #39123#39var_dump(intval($var))floatval() $var = #391.23#39var_dump(floatval($var))strval() $var = 123var_dump(strval($var))
常量使用
常量是一个简单值的标识符(名字)。常量默认为大小写敏感。按照惯例常量标识符总是大写的。
常量特性
常量前面没有美元符号($)常量只能用define() 函数定义,而不能通过赋值语句常量一旦定义就不能被重新定义或者取消定义常量的值用来定义 整型,浮点,字符串,布尔值,数组(PHP7新增)常量可以不用理会变量范围的可以在任何位置访问声明常量
常量可以使用 const 和 define 定义。
const 是语言结构,在编译时要比define快define 可以设置第三个参数为true,来定义不区分大小写的常量类文件中定义常量也使用const,所以const统一易读define(#39常量名#39,值)define(#39WEBNAME#39,#39pfinalClub#39)echo WEBNAME
常量检测
$bool = defined(#39WEBNAME#39)var_dump($bool) // 结果是false
系统常量
__DIR__文件所在目录__FILE__文件路径__LINE__程序代码行号PHP_VERSION 显示PHP版本PHP_OS nbspnbsp显示服务器的操作系统版本TRUEboolean值真(true)支持小写常量FALSEnbspboolean值假(false)支持小写常量__FUNCTION__函数名称__METHOD__ 名称__CLASS__类名称
使用函数 get_defined_constants(true) 可以获取当前可使用的所有常量。
运算符
算术运算符
运算符说明$a+$b加法 $a和$b的和$a-$b减法 $a和$b的差$a$b乘法 $a和$b的积$a/$b除法 $a除以$b的商$a%$b取模 $a除以$b后的余++$a前加 $a 的值先加一,然后进行操作$a++后加 $a 的值先进行操作,后加一--$a前减 $a 的值先减一,然后进行操作$a--后减 $a 的值先进行操作,后减一
赋值运算符
运算符说明=右边值赋值给左边变量+=左边值加上右边值赋值给左边变量-=左边值减掉右边值赋值给左边变量=左边值乘以右边值赋值给左边变量/=左边值除以右边值赋值给左边变量.=左边字符串连接到右边变量后面%=左边值对右边值取余数后赋值给左边变量
字符串运算符
运算符说明.它返回其左右参数连接后的字符串.=左边字符串连接到右边变量后面
比较运算符
运算符说明$a==$b等于 TRUE,如果$a等于$b$a===$b全等于 TRUE,如果$a等于$b,并且类型也相同$a!=$b不等 TRUE,如果$a不等于$b$altgt$b不等 TRUE,如果$a不等于$b$a!==$b非全等 TRUE,如果$a不等于$b,或者类型不同$alt$b小于 TRUE,如果$a严格小于$b$agt$b大于 TRUE,如果$a严格$b$alt=$b小于等于 TRUE,如果 $a 小于或者等于$b$agt=$b大于等于 TRUE,如果 $a 大于或者等于$b
逻辑运算符
运算符说明$a and $b逻辑与 TRUE,如果 $a 与 $b 都为 TRUE$a or $b逻辑或 TRUE,如果 $a 或 $b 任一为TRUE!$a逻辑非 TRUE,如果 $a 不为 TRUE$a $b逻辑与 TRUE,如果 $a 与 $b 都为TRUE$a || $b逻辑或 TRUE,如果 $a 或 $b 任一为TRUE
and与 、or与||是同一逻辑运算符的两种写法,但优先级不同。
这四个符号的优先允许从高到低是、||、AND、OR。
三元表达式
变量=(表达式)?值1:值2当表达式的返回值为true时,$变量被赋予值1,否则被赋予值2
echo true?#39PFinal#39:#39南丞#39nbsp
?? 与 ?:
$var=0echo $var?:#39大叔#39 #输出大叔$var=0echo $var??#39大叔#39#输出0
PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式。?: 只判断 true 或 false ,而 ?? 判断变量存在并且值不为null
屏蔽错误
@ 运算符用于屏蔽表达式警告错误
@(20/0)
php闪电入门基础知识 php项目入门基础知识