【PHP入门到精通】:Ch03:PHP语言基础
1, PHP风格
这里为了显示代码把"<"和">"和key值以空格分开了,实际书写时切记不要将其分开:
(1) < ?php ? >: 这是XML风格的标记, 这里我们推荐使用此风格!
(2) < script language="php" < /script>: 这是脚本风格的标记
(3) < ? ?>: 这是简短风格的标记
(4) < % %>: 这是ASP风格的标记
提示:简短风格 和 ASP风格的标记,需要配置php.ini文件,分别将short_open_tag和asp_tags的开关打开
2, 注释
支持3种 = C注释格式*2 + SHELL注释格式*1:
单行注释(//),多行注释(/* */), SHELL单行注释(#)。
注意:单行注释不能出现"?>",多行注释不能嵌套操作。
3, 数据类型
支持8种原始类型=标量类型*4 + 复合类型*2 + 特殊类型*2
boolean, integer, float/double, string; array, object; source, null
这些变量类型通常不由programmer设定, 是PHP根据变量使用上下文在运行时决定的。
变量标识符要以"$"开头,声明和调用时都要带上"$"符。
(3.1) boolean
不是只有false值才为假的,在一些特殊情况下,boolean值也会被认为是false。像:
0, 0.0, "0", 空白字符串(""), 只声明没有赋值的数组等
(3.2)string
定义方式有3种=单引号(') + 双引号(") + 界定符(<<<)
界定符<=>双引号,而单引号与双引号是有区别的:
(3.2.1)双引号所包含的变量会自动被替换成实际数值,而单引号中包含的变量则按普通字符串输出。
(3.2.2)单引号只要对内部的单引号进行转义即可;而双引号则需要对更多的特殊字符进行转义才能正确显示,有
: \r, \n, \t, \\, \$, \', ", \[0-7]{1,3}, \[0-9A-Fa-f]{1,2}
(3.2.3)定义简单的字串时,使用单引号比较合适,如果使用双引号,PHP将花一些时间来处理字串的转义和变量的解析。 因此没有特别的要求,应该尽量使用单引号。
$fir_str="first_string"
echo "$fir_str" = first_string; echo '$fir_str' = $fir_str
(3.3)integer
定义:只能包含整数
表示范围:32位机中,[-2147483648-2147473647]
表示方式:十进制表示法,八进制表示法(0开头),十六进制(0x开头)
注意:遇到非法数字时,非法数字后面的数字会被忽略
赋值的数值溢出或者运算结果溢出时,溢出值会被当做float型处理, Dec(1234567890)=1234567890
hex(1234567890)=78187493520
Oct(1234567890)=342391
Oct(1234567)=342391
(3.4)float
定义:用来存储数字,也可以存储小数
范围:存储精度远大于整数,32位机下有效范围[1.7E-308, 1.7E+308]
表示格式:标准格式,科学记数法格式
注意:浮点型数值只表示了一种近似值,所以尽量避免浮点型数值之间进行等值比较,因为最后的结果往往是不准确的
函数格式:pi()=3.1415926535898
标准格式:3.14159265359=3.14159265359
科学记数法格式:314159265359E-11=3.14159265359
(3.5)array
定义:一组数据的集合,集合中的每个数据称为一个元素,元素包括索引(键名)和值两部分。
索引可以是数字,也可以是字串;
值可以是多种数据类型。
表示格式:$array=('value1', 'value2',......)
$array[key] = 'value'
$array = array(key1=>value1, key2=>value2,......)
注意:声明数组后,它的元素个数可以自由更改,只要给数组赋值,数组就会自动增加长度。 示例:
$arr1 = array('This', 'is', 'a', 'example');
$arr2 = array(0=>'php', 1=>'is', 'the'=>'the', 'str'=>'best');
$arr3[0] = 'tmp_name'
(3.6)object
有两种方法:面对过程和面对对象
(3.7)resource
resource(资源)是一种特殊变量,又叫做句柄,保存到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
在使用资源时,系统会自动启用垃圾回收机制,释放不再使用的资源,避免内存消耗殆尽。因此资源很少需要手工释放。
(3.8) null
null(空值),特殊的值,顾名思义,表示没有为该变量设置任何值,唯一的值就是null。
null不区分大小写,null=NULL。其产生有3种情况:没有赋任何值,被赋值null,被unset()函数处理过的变量。
$str1= null; => str1 is null
$str2='str'; unset($str2); => str2 将不可用,或者即便使用它,也将为NULL值,且PHP会报NOTICE警告
(3.9), 类型转换
转换成boolean时,null, 0 和未赋值的变量或数组会被转换为false,其它的为真
转换成integer时,false转换为0,true转换为1,浮点型的小数部分会被舍去,字符型将截取到非数字位
,若不以数字开头将输出0
表示方式:1, (type)var
2,bool settype(mixed var, string type)
注意:两者区别是:使用类型操作符直接输出转换后的结果,原变量不会发生变化; 而使用settype()函数后,原变量会被修改
。 示例:
integer(314159265359E-11)=3
num=3.1415926r*r
(integer)num=3,now num=3.1415926r*r
settype($num, 'integer'): ohoh, $num is changed, but now num=3
4, 常量
获取方法:直接使用常量名;使用constant()函数;判断变量是否定义使用defined()函数,
使用方法:使用常量时,常量前面不带"$"符号,且不能放在""内,而使用defined判断常量是否存在时,需要加上""号
注意:
(1)常量VS变量区别
1.1),常量只能用define()函数定义,而不能通过赋值语句;建议不要以__开头,以便与预定义常量冲突引发结果异常。
1.2),常量可以定义大小写敏感还是不敏感,而变量永远是大小写敏感;
1.3),常量一旦定义就不能被重新定义或者取消定义,且常量的值只能是标量类型;变量不受此类限制;
1.4), 使用常量时,常量前面不带"$"符号,还有很多注意点,总之使用不方便,还容易混淆,效率也低
因为PHP处理常量的时候要进行多次查找;而使用变量时是要带"$"符号的;
1.4),常量可以不用理会变量的作用域,可以在任何地方定义和访问。
(2)常量有自身的特点,能少用就少用
2.1) PHP处理常量的方法过于宽松,所以会产生常量使用上的混淆,如果能够严格一些的话,是会避免很多问题的。 实际过程中,能使用变量就不要用常量。
2.2) 常量 (3)重赋值问题
虽然说不能重新定义,但再次赋值PHP也只会产生NOTICE错误,如果你定义之前,其它人也定义了同名常量,这将会产生无法预知的结果。
补救方法:使用常量之前要使用defined()来确认一下常量是否已经定义过。
示例:
define("MESG", "This is a msg");
MESG = This is a msg(OK).
$MESG = (NG).
defined("MESG") => 1(OK).
defined('MESG') => 1(OK).
defined($MESG) => (NG).
defined(MESG) => (NG).
isset(MESG) =>(NG).
当前文件名=D:\PHP\www\myTest\ch03.php,当前行数=150,PHP版本信息=5.4.22,当前操作系统=WINNT
6, 变量
定义:PHP4之前需要在使用前声明变量,PHP4之后只要在需要为变量赋值即可,使用前可以不用声明。
变量名称 = "$" + 标识符;
变量名大小写敏感;标识符以字母,数字,下划线组成;但不能以数字打头。
赋值:3种方式: 以"="号赋值;变量间赋值;引用赋值;
变量间赋值:赋值后两个变量使用各自的内存,互不干扰。
引用赋值:赋值后,两个变量名访问同一个变量内容,当改变其中一个变量的值时,另一个也跟着发生变化。用&符号来表示引用。
注意:PHP不需要声明变量,但使用时要给初始化值,否则会出现程序逻辑错误。变量声明和变量初始化是两码事。 6.1) 变量作用域
有3种情况:局部变量;全局变量;静态变量。
局部变量:在函数内部定义,作用域是所在函数;
全局变量:在函数外部定义,作用域是整个PHP文件,但在函数内部不可用,除非使用global关键字声明。
静态变量:使用static定义,能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。
提示:在函数变量,其作用域为所在函数;如果在函数外赋值,将被认为是完全不同的另一个变量。
6.2) 可变变量
定义:用一个变量的值作为另一个变量的名称。
$var1="var2",
$$var1="var3";
echo $var1. $var2;
第1个语句声明了变量var1,其内容为var2.
第2个语句声明了可变变量var2,其内容为var3. 这里$$var1可以理解成$($var1); 因此第3个语句就可以直接把var1的内容var2当成变量来使用了。
6.3)预定义变量(略)
PHP提供了很多非常实用的预定义变量,通过这些预定义变量可以获取到用户会话、用户操作系统的环境和本地操作系统的环境等信息,具体预定义变量可参照相关文档。
7,运算符
算法运算符:+ - * / % ++ -- ;
字串运算符:.(英文的句号);
赋值运算符:= += -= *= /= .= %= ;
位运算符: &(位与) |(位或) ~(位非) ^(位异或) <<(左移) >>(右移) ;
逻辑运算符:&&[and](逻辑与) ||[or](逻辑或) !(逻辑非) xor(逻辑异或) ;
比较运算符:>(大于) <(小于) ==(等于) !=(不等于) <=(大于等于) >=(小于等于) ===(恒等) !==(非恒等) ;
错误控制运算符:@ ;
三元运算符:?= ;
注意: 1)字串类:如果字串间使用"+"号,PHP会先把字串转换成数字,然后再做算术运算。
2)逻辑类:&&与and ||与or 有着不同的优先级
3)比较类:===表示不只是数值上相等,而且两者类型也一样。
7.2,运算符优先级和结合规则
不同优先级先高后低,相同优先级从左到右。也可以使用小括号,括号内运算最先进行。
pi = 3.1415926r*r; num = 1;
$pi.$num = 3.1415926r*r1; $pi+$num = 4.1415926
8, 函数
注意:
8.1) 参数传递
函数间参数传递有3种:按值传递,按引用传递,和默认参数。
按值传递:
将实参的值复制到形参中,函数内部针对形参进行操作,操作结果不会影响到实参。即函数返回后,实参的值不会改变。
按引用传递:形参前标注"&"表明是按引用传递,
就是将实参的内存地址传递到形参中,函数内部的所有操作都会影响到实参的值。函数返回后,实参的值会发生变化。
默认参数:
可以将某个参数设为可选参数,将可选参数放在参数列表末尾,并且指定默认值为空。
使用默认参数时,默认参数必须放在非默认参数的右侧,否则函数可能出错。从PHP5开始,默认值也可以通过引用传递。
8.2) 变量函数
8.3)对函数的引用
函数参数传递中有按引用传递的方式,可以修改实参的内容。引用可用于普通变量,函数参数,也可用于函数本身。对函数的引用,就是对函数返回结果的引用。
和参数传递不同,这里必须在两个地方使用"&"符号,用来说明返回的是一个引用。
8.4)取消引用
不再需要引用时,可以取消引用。取消引用使用unset()函数,它只是断开了变量名和变量值之间的绑定,而不是销毁变量值。
普通函数测试:
10 * 10 = 100
变量函数测试:
hello, I'm comming.
TOM has gone
I'm back, Lily
对函数的引用测试:
看到了
取消引用测试:
$num = 1234, $ref_num = 1234
unset($ref_num) => $num = 1234, $ref_num is unusable.
(unset)($ref_num) => $num = 1234,$ref_num = 1234
【PHP入门到精通】:Ch03:PHP语言基础的更多相关文章
- 数据库SQL语言从入门到精通--Part 3--SQL语言基础知识
数据库从入门到精通合集(超详细,学习数据库必看) 一.关系 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二维表 从用户角度,关系模型中数据的逻辑结构是 ...
- 零基础入门非常好的C语言基础资料
C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { in ...
- 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图
数据库从入门到精通合集(超详细,学习数据库必看) 前言: 使用SQL语言时,要注意SQL语言对大小写并不敏感,一般使用大写.所有符号一定是西文标点符号(虽然是常识,但我还是提一嘴) 1.模式的定义与删 ...
- 数据库SQL语言从入门到精通--Part 1--SQL语言概述
数据库从入门到精通合集(超详细,学习数据库必看) 一.SQL概述 关系数据库标准语言SQL(结构化查询语言). 结构化查询语言(Structured Query Language)简称SQL,是一种特 ...
- shell从入门到精通进阶之一:Shell基础知识
1.1 简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户. 下面是处 ...
- Matlab--从入门到精通(chapter2 matlab 基础知识)
Chapter2 Matlab 基础知识 1.基本数学运算符号 注:矩阵的右除是一般意义的除法,但是左除具有对称意义,即A./B=B.\A 2. 命令行中的常用标点 3.常见的操作命令 4.输出数据显 ...
- Matlab---从入门到精通 Chapter 4 编程基础
---恢复内容开始--- 4-1 M文件编辑器 在命令窗口输入edit命令,可以打开M文件编辑器,创建新的M文件 在命令行中输入edit filename,那么可以打开在当前目录环境下的M文件 4-2 ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- 《java从入门到精通》学习记录
目录 <Java从入门到精通>学习记录 3 基础的基础部分: 3 一. 常量与变量 3 1. 掌握: 3 (1) .常量与变量的声明方式: 3 (2) .变量的命名规则: 3 (3) .变 ...
- vuejs2从入门到精通与项目开发实战
vuejs2从入门到精通:一.基础部分0.课件1.介绍2.vue实例3.模板语法4.计算属性和观察者5.Class与Style绑定6.条件渲染7.列表渲染8.事件处理9.表单输入绑定10.1.组件(1 ...
随机推荐
- Eclipse配置Flex开发环境(转)
Eclipse配置Flex开发环境 开发环境:Eclipse3.2.Flex Builder31.下载安装Flex Builder3,下载地址:http://subject.csdn.net/adob ...
- Redis通用操作(适用于String,Hash,链表等)
keys pattern 查询相应的key 在redis里,允许模糊查询key 有3个通配符 *, ? ,[] *: 通配任意多个字符 ?: 通配单个字符 []: 通配括号内的某1个字符 redis ...
- 设置 Firewalld 防火墙控制对系统的访问
1.检查 server101 的网卡,记住第二个网卡的名称 [root@server101 ~]# nmcli device DEVICE TYPE STATE CONNECTION br0 brid ...
- C# 字符流打印类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml
来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...
- Oracle INV - SO line backorder API
--Sales Order Lines to backorder API--===================================--SET serveroutput on size ...
- [每天一道A+B]签到检测程序
签到检测程序,解析github提供的api内的json,解决了服务器和本地时间不同步的问题(时差+8H),实现按日期更新当前签到表.下一步是从api获取organization的信息,求出未签到的成员 ...
- android 开发如何做内存优化
不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露.其实如果我 们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造 ...
- [置顶] Android Provision (Setup Wizard)
Android中很多框架性的设计都已经存在了,但在市场上的发布版本里却因为没有很好的理解Android的设计意图而进行自己的定制,或者自己又做一 个冗余的实现.Android中的Provision其实 ...
- QQ邮箱附件发送
一.先造一个邮件发送的窗体 二.编辑邮件发送的代码(包括附件) ①附件添加对话框 string file; private void button6_Click(object sender, Even ...