PHP基础
来源:互联网 发布:知乎 济南血液病医院 编辑:程序博客网 时间:2024/05/17 03:20
1. 变量赋值
变量赋值:分为传值赋值( $a=123; )和引用赋值($b=&$a;)。传值赋值互不影响,各用一块空间;引用赋值共同用一个空间,一个值改变另一个值也改变。
变量作用域,local(局部),global(全局),static(静态)
Note:$this是一个特殊的变量,它不能被赋值。
2. 预定义全局变量
预定义全局变量: $_GET、$_POST、$_REQUEST、$_SERVER、$_ENV、$_FILE、$_COOKIE、$_SESSION、 $GLOBALS。
1) 超全局变量无需用关键字global或者local等定义,直接在全局可用。
2) PHP接受通过HTML表单提交的信息时,会将提交的数据保存在超全局数组中,可以通过使用这些超全局变量来获取表单信息。form表单method缺省情况下,默认是get。input提交,name是提交过去的键名,value是提交过去的键值。提交过去的表单以数组形式储存在全局变量里。属性为checkbox时,name值可以是数组,如:name[]。如果get和post共同存在的时候,并且键(键名)相同,则以post提交的值为准,若是request也是获取的post的值。
3) 与HTML表单相关的超全局变量有$_GET,$_POST,$_REQUEST。与HTML表单相关的表单提交有$_GET,$_POST。
4) $_SERVER是服务器和执行环境信息,包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。
5) cookie是服务器留在用户计算机中的一小段文本信息。每当相同的计算机通过浏览器请求页面时,服务器会设置cookie并在响应时发送cookie到客户端,客户端进行保存,在下次请求访问时带上这个cookie。
① cookie常用于识别用户,PHP能够创建并获取cookie的值。
② 和其他 HTTP 头一样,必须在脚本产生任意输出之前发送Cookie(由于协议的限制)。
③ 一旦设置 Cookie 后,下次打开页面时可以使用$_COOKIE 读取。 Cookie值同样也存在于$_REQUEST。
④ $_COOKIE['value'] ='newvalue'; 无法修改cookie值。Cookie 只能通过setcookie 设置过期时间。
⑤ cookie的生命周期可以通过cookie.setMaxAge(2000);来设置,如果没有设置setMaxAge,则cookie的生命周期当浏览器关闭的时候,就消亡了,setcookie('name','null'); 设置false或 ''或setcookie("TestCookie", "", time() -600); 过期的时间,表已经删除了该cookie值;
⑥ http://php.net/manual/zh/features.cookies.php
⑦ http://php.net/manual/zh/book.network.php
6) $_SESSION访问者访问web网站时分配唯一id(会话id ),储存在cookie中或URL进行传递。 session保存方式可以是文件(默认)或数 据库(是扩展,需要定义)。sessionId是 键名,sessionname是键值。
session会话请求:1.服务器端生成 session id保存给客服端 2.cookie存储; 3.生成session文件保存在服务器端
$_SESSION['value'] = 'newvalue';可以修改或设置SESSION的值。
$_SESSION = array(); 等同于session_unset();
destroy删除会话文件,不会删除内存中的会话变量。
http://php.net/manual/zh/book.session.php
7) $_FILES全局变量
Post 文件上传:enctype="multipart/form-data"
http://php.net/manual/zh/features.file-upload.post-method.php
resource文件系统及目录操作:
http://php.net/manual/zh/book.filesystem.php
使用 'b' 来强制使用二进制模式,这样就不会转换数据。要使用fopen() 中 mode
标记,要么用'b' 或者用't' 作为 mode
参数的最后一个字符。在操作二进制文件时如果没有指定 'b'标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于\r\n 字符的奇怪问题。为移植性考虑,强烈建议在用fopen() 打开文件时总是使用'b' 标记。
远程文件(HTTP)不能以写入的方式打开,只能是只读方式。
3. 自定义常量
自定义常量,define("常量名必须全部大写","常量值");
constant返回一个常量值,格式为:constant (name )
PHP_version系统常量,输出PHP版本号。
PS: 预定义常量(又称魔术常量,一般包括当前地址,行数,文件名等)和预定义变量(当前服务器版本,系统等)
4. var_dump
var_dump:打印类型和数值,显示结构信息。
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
5. print
print 实际上不是函数(而是语言结构) 只能打印出简单类型变量的值(如int,string) :
print"This spans\nmultiple lines. The newlineswill be\noutput as well."; //print输出,反斜杠转义。输出结果为:Thisspans multiple lines. The newlines will be output as well.
// 可以在打印语句中使用变量
$foo = "foobar";
$bar = "barbaz";
print "foo is $foo"; // foo is foobar
// 也可以使用数组
$bar = array("value" => "foo");
print "this is {$bar['value']} !"; // this is foo !
// 使用单引号将打印变量名,而不是变量的值
print 'foo is $foo'; // foo is $foo
6. print_r
print_r是函数,函数可以有返回值(即便没有用) 。print_r可以打印出复杂类型变量的值(如数组,对象),如果给出的是 string、integer 或float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。
如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为 TRUE,print_r() 将不打印结果(此为默认动作),而是返回其输出。
Example #1 return 参数示例
<?php
$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r ($b, true); //$results 包含了 print_r 的输出结果
?>
7. PHP数据类型
PHP数据类型分为三大类,标量数据类型(整型,浮点,布尔,字符串),复合数据类型(数组,对象),特殊数据类型(空值,资源)
u 浮点型,第十四位后的十五为要进行四舍五入(浮点型一般可以判断大于,小于,但由于精度问题,不能直接判断等于。)
u 如果给PHP变量赋值的整型大于PHP默认最大值,将自动转换为浮点型
u 强制转换类型,(类型)变量。
u 布尔值以下都是为假,false自身,整型0,浮点型0.0,空字符串以及字符串"0",不包括任何元素的数组,不包括任何成员变量的对象,特殊类型null包括尚未设置的变量。
u 字符串有单引号和双引号,一个英文字符占一个字节空间,单引号内再输出单引号会报错,可以使用\反斜杠转译,防止报错,但可以直接输出双引号不用转译符。双引号内输出双引号也需要转译,但可以输出单引号。
① 字符串
Ø 双引号定义的字符串会对PHP变量和特殊字符进行解析。单引号定义的字符串不会解析变量和特殊字符。
用花括符定界变量的边界,如果没有花括符,会往后执行,直到找到空白结束,才会结束PHP变量的搜索定界。花括号明确变量名,只有$紧挨着 { 时才会被识别,例 ${ } or { $ }。PHP遇到$符号,会尽可能往后找更多的字符来组成PHP变量。要输出花括符或者变量符进行转义即可。
变量定界说明:在花括号中,只要抓住花括号不被解析的条件,把$符号转义则不会被解析。
Ø Heredoc结构就像是没有使用双引号的双引号字符串(<<<EOT EOT;);Nowdoc 结构是类似于单引号字符串,nowdoc 中不进行解析操作(<<<'EOT' EOT;)。这里的EOT可以自定义。
Ø 字符串函数:
1) 字符串常用操作函数
2) int strlen ( string $string ) 返回字符串所占的字节长度;有一个参数是string类型,返回值的类型是整型。(编码类型 GBK一个中文一般情况占两个字节;编码类型 utf-8 一个中文正常情况下占三个字节,那么三个字节才会被计为一个字符);字符串http://php.net/manual/zh/book.strings.php
3) mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding()] ) php中括号内的参数表示可选参数,一般可选参数都会有默认值。
mb_strlen 一般用来查询中文、非字符串、英文字符串、查看的是在指定编码下的获取。返回的是在某个编码下,字符串所占的字符数。
$encoding 表示字符编码,如果省略则使用内部的字符编码(默认是与strlen一样的)。返回的是具有某编码的字符串所包含的字符数。
mixed 在不同情况下,有不同的返回值。是混合类型,或者不确定类型。
PS:如果文件编码是utf-8,在utf-8内部设置编码格式为GBK的话,默认是用utf-8的字节/2,这里的2是每2个字节为一个GBK字符。(因为转码的字符和当前页面的字符不一致);多字节字符串http://php.net/manual/zh/book.mbstring.php
4) strpos ( string $haystack , mixed $needle [, int$offset = 0 ] );
$offset 默认从0开始,如果$offset=3,则是第二个字符;
PS:不能用返回值 == false 来判断是否查找到字符,因为有的值恰好返回的是0,所以0只能用 === false来判断是否查找到字符串,
5) string strstr ( string $haystack , mixed $needle [,bool $before_needle = false ] )
bool $before_needle= false 表示从查找的字符串往后截取,如果为true则向前截取
② 数组
1) PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到keys 的类型。值可以是PHP支持的任何类型,包括另一种数组。
2) 根据数组键名和数据类型的不同进行分类:索引数组(以数字作为键名的数组)、关联数组(以字符串或数字和字符串混合为键名的数组)。
3) 根据数组维数的不同进行分类:一维数组(只能保存一列数据内容)、多维数组(可以保存较复杂的数据内容)。
4) 数组的遍历:foreach遍历数组、for循环遍历数组、list操作配合each函数遍历数组、数组的游标操作遍历数组。
5) for循环遍历只能打印索引数组。
6) List each
list把数组中的值赋给一些变量;
each返回数组中当前的键/值对并将数组指针向前移一步。
键值对被返回为四个单元的数组,键名为0,1,key和value。单元0和key包含有数组单元的键名,1和value包含有数据。如:$foo = array("bob", "fred"); 输出结果为: Array
(
[1] => bob
[value] => bob
[0] => 0
[key] => 0
)
While(list ($key,$value)=each($arr)){echo$key.’=>’.$value . “<br/>”;}
7) 数组函数:http://php.net/manual/zh/book.array.php
PS:游标操作来遍历数组:while($value = currebt($arr)){....;next($arr);}//改变指针指向,让指针向后移,也就是指向下一个元素,不然会死循环。
8. 运算符
u 算术运算符(数学运算)
遵循数学运算规则(从左到右,先乘除后加减,有括号先算括号内)。
分为加减乘除,取反取模,自加和自减。
取模是被除数除以除数取余的意思(如果除数<被除数,则取模的余数为除数。取模余数的符号跟除数一致,跟被除数没有任何关系)。取模运算符的操作数运算前都会被转换成整数,除去小数部分(10.2%4.7)。取模结果为零说明能整除,在很多时候可以当条件。
自加自减($a++[先返回,再自加],--$a[先自减,再返回])
$a=1;$b=++$a; (此时$a已经为2) $c=$a++;此时$c为2,操作完成后为3。
简化的算术运算符:
$a+= $b; 左加 $a = $a + $b;
$a-= $b; 左减 $a = $a - $b;
$a*= $b; 左乘 $a = $a * $b;
$a/= $b; 左除 $a = $a / $b;
$a%= $b; 做取模 $a = $a % $b;
PS:除法运算符总是返回浮点数(10/3),只有两个数都是整数,并且能整除(10/2),才能返回整数。
u 赋值运算符(变量间赋值‘=’,它不是‘等于’,表示把右边表达式的值赋给左边的运算数)
u 比较运算符(比较两个变量是否相等)
$a== $b 等于 如果类型转换后 $a 等于 $b , 则返回true
$a=== $b 全等 如果 $a 等于 $b ,并且他们的类型(数据类型)也相同,则返回true
$a!= $b 不等 如果类型转换后 $a 不等于 $b , 则返回true
$a<> $b 不等 如果类型转换后 $a 不等于 $b , 则返回true
$a!== $b 不全等 如果 $a 不等于 $b , 或者它们类型不同,则返回true
$a< $b 小于 如果 $a 严格小于 $b , 则返回true
$a> $b 大于 如果 $a 严格大于 $b ,则返回true
$a<= $b 小于等于 如果 $a 小于或者等于 $b,则返回true
$a>= $b 大于等于 如果 $a 大于或者等于 $b,则返回true
u 逻辑运算符(返回布尔真假值)
$a and $b
And(逻辑与)
TRUE,如果 $a 和 $b 都为 TRUE。
$a or $b
Or(逻辑或)
TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $b
Xor(逻辑异或)
TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a
Not(逻辑非)
TRUE,如果 $a 不为 TRUE。
$a && $b
And(逻辑与)
TRUE,如果 $a 和 $b 都为 TRUE。
$a || $b
Or(逻辑或)
TRUE,如果 $a 或 $b 任一为 TRUE。
u 字符串运算符
字符串运算符分为连接运算符(.) , 连接赋值运算符(.=),连接赋值运算符将右边的参数附到左边参数之后。
u 三元运算符(简化的分之语句)
格式 : 表达式(值一)?值二:值三; //当表达式为true时,输出值二,为false输出值三。
u 运算符优先级。
"||" 比 "or" 的优先级高 "&&" 比 "and" 的优先级高 = 的优先级高于or
$f = false or true; //false
$h = true and false; //true
$e = false || true; //因为后者优先级高,所以可以吧后者看为一个整体,如:$e =(false || true);
$f = false or true; //因为前者优先级高,所以可以看作($f= false) or true;
如果用 and 或者or 字母,在没有其他符号的情况下,没有优先级区分。如:if(true and false){echo“123”;} //输出结果是false,因为and是两个值同时为true才为真
“与”和“或”有两种不同形式运算符的原因是它们运算的优先级不同
9. 顺序控制和分之控制
顺序控制(从上到下,从左到右,当然排除特殊情况,比如有括号)
分之控制 (单分之,双分之,多分之)
多分支 [ifelse 和 switch case break default],switch可以使用整数,小数,字符串,布尔值,null,直到遇到break才停止往下执行。default位置不重要,它只会在所有条件不存在的时候执行,但如果不是放在最后,要加break。条件语句内的内容会自动转换成布尔值。分之只能选一个,当多个条件语句同时满足,则只会执行最上面的一个条件语句。
10. 循环控制:for、while、do while、break、continue、goto
循环四要素,循环初始值,循环条件,循环体代码,步长。
PS:只要是循环语句,都必须有步长或者在循环体内添加步长改变循环条件,否则都会死循环。初始值除for循环,尽量都写在循环外面。
Ø For循环包括初始值(1)、条件(2)、步长(3)和循环体(4)。for循环从左到右,从上到下,执行顺序为1243,步常最后一个执行(也可以放在步骤3中)。for循环没有条件或步长(没有步常将一直执行初始值)都会出现死循环。
PS:步长的作用是:改变循环条件;
for循环可以有多个不同的初始值,多个不同的条件,多个不同的步长。
for ($i = 1; ; $i++) {if ($i > 10) {break;}echo $i;} //当第二个值写在循环体内的时候,第二值必须留着位置,并且分号表示结束。
for循环也可以写成for (;;) { }(必须打两个分号,内容为空),前提是要四个步骤在之外必须定义。
Ø while (条件) {
循环体
}
endwhile;
Ø do{循环体}while(条件); //无论怎样,先执行一次循环体,再判断。
Ø break结束当前for循环,while循环,do while循环或者switch结构语句。break可以接受可选参数来决定跳出几重循环。
Ø continue在循环结构中用来跳过本次循环,继续执行下一次循环。可以接受可选参数跳出几重循环到循环结尾。continue要放在输出之前才有效果。continue后面没有业务代码就没有任何意义。
Ø goto跳出循环或者switch,可以代替多层break。
11. 函数
函数(具有特定功能的代码段,分为系统内置函数和自定义函数。)
函数无需在调用之前被定义,除非当一个函数是有条件被定义时,必须在调用函数之前定义。调用函数:函数名()。函数返回值只能有一个,可以是任何PHP支持的数据类型,也可以用一个变量来接收该值如:$res=t()。 函数遇到return即可终止函数。(一个函数的函数名即是该函数的代表,也是一个变量。由于函数名变量通常用来把函数的处理结果数据带回给调用函数,即递归调用,所以一般把函数名变量称为返回值。有返回值的函数必须有对应的return来返回。)
if ($makefoo) {
function foo()
{
echo "I don't exist until programexecution reaches me.\n";
}
}
u 函数参数传值分为按值传参和引用传参。
按值传参并不会改变外部变量;
引用传参会改变外部变量的值;引用传参的值是指向内存的,函数的值调用的是全局中的值(也就是指向内存的值)。当使用引用传参的时候,内存的值直接变换。这里的内存也就是全局变量;
参数可以有默认值,默认值的参数必须写在非默认值参数的右边,并且默认值必须是常量表达式(4种数据类型),不能是变量,类成员或者函数调用等。
u PHP函数支持可变数量(可变函数跟可变变量($$a;)性质几乎相同)的参数列表(函数不带参数的时候,通过系统内置函数获取调用函数的参数情况):
Ø func_num_args( void ) 函数调用时,参数的数量,返回一个整型数字。
Ø func_get_args();函数调用时,获取参数的列表,返回的是一个数组。
Ø func_get_arg();函数调用时,获取参数的某一项,从0开始计算参数位置。
u 函数内的变量有两种,分为局部变量(local)和静态变量(static)。
局部变量(local):函数内部声明的变量。
函数内部使用关键字static声明的变量值不能是表达式的值,只能是标量值(4种数据类型);
PS:普通局部变量,在函数调用时都会进行初始化。静态局部变量,在函数首次调用时,会进行初始化,之后不会再进行初始化,而是在原来的基础上继续执行。它可以用做静态计数器。
u 全局变量(global):全局申明的变量,全局有效。
global 表示外部全局变量,在函数内部不能直接访问,必须加global $a 在当前函数才能访问。这里的$a指的是全部变量$a;
12. 引入文件
include如果引入文件有错误,代码尽可能往下执行;而require如果引入文件有错误,立即终止执行。include 和require相当于复制引入文件的代码,写几个include则执行几次复制。
include_once和require_once会检测当前是否已包含这个文件,如果包含,则不会执行后面的include_once和require_once。
13. 链接
变量与类型相关扩展:http://php.net/manual/zh/book.var.php
杂项函数:http://php.net/manual/zh/ref.misc.php
Math 函数:http://php.net/manual/zh/ref.math.php
serialize:http://php.net/manual/zh/language.oop5.serialization.php
- PHP基础
- php基础
- php基础
- php基础
- php基础
- php 基础
- php基础
- php基础
- PHP基础
- php基础
- php基础
- PHP基础
- php基础
- Php基础
- php基础
- PHP基础
- php基础
- PHP--->基础
- 链表复制
- Xcode、Cocoa、Objective-C 和Swift的关系
- SSL_1203 书的复制(动规练习题)
- Kotlin(2.7)密封类
- 数据结构实验之排序二:交换排序
- PHP基础
- ubuntu安装hadoop
- 性能测试模式之RBI模式
- 出现The valid characters are defined in RFC 7230 and RFC 3986的原因及解决方式
- MyCAT 源码分析 —— SQL ON MongoDB
- 移动端如何让页面强制横屏
- SQL多表查询
- HTML 4.01 快速参考
- 1_0_10_Orcale_数据库服务启用