Blogger Information
Blog 17
fans 0
comment 0
visits 11803
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP基础知识(一)
指纹指恋的博客
Original
831 people have browsed it

变量类型

在PHP中,一共存在8种变量类型:整型,浮点型,字符串,布尔,数组,对象,null,资源

  • 如果一个变量为null,那么在它被声明后,该变量既不会有值,也不会被标注类型

变量检测

isset()函数可以检测变量是否存在,存在返回true,不存在或变量为null返回false

获取变量类型

  • gettype()函数可以用来获取变量类型

  • 判断是否是我们想要的类型用is_int(),is_float()等等

打印变量

  • echo:适合打印字符串和数字

  • print_r:适合打印数组

  • var_dump:所有类型都可以,既可以打印值同时也会打印变量类型

变量类型转换

PHP中变量的类型是可以随时转换的,非常灵活,最常见的是字符串与数字的转换,或是字符串/数字——>布尔值的转换

//字符串到数字的转换:从左到右截取,直到碰到不合法的数字,截取出来的部分转换成数字再参与运算
$a = "12hello";
$a = $a + 3;
var_dump($a);    //int 15


以下值都被当成布尔型的假,而其他值都被当成布尔型的真

  • "" (an empty string)

  • 0 (0 as an integer)

  • 0.0 (0 as a float)

  • "0" (0 as a string)

  • NULL

  • FALSE

  • array() (an empty array)

  • $var; (a variable declared, but without a value)

变量赋值

  • 传值赋值:变量各有自己的内存空间,传值后不影响原有变量的值【两个人看两台电视】

  • 引用赋值:两个变量指向公共的内存空间,一个变化,另一个也会变化【两个人看一台电视】

变量销毁

unset()函数可以用来销毁变量,但是当两个变量都指向同一个内存空间【即引用赋值】时,销魂其中一个变量,另一个依然存在,并不会被销毁。当所有指向这个内存空间的变量都被销毁时,该公共内存空间才会被回收。

动态变量

$liubei = "河北";
$laoda = "liubei";
$paihang = "laoda";
var_dump($paihang,$$paihang,$$$paihang);    //laoda  liubei  河北

算术运算符

  • 除数不能为0

  • 两个数相加的和如果超出了 integer 的范围,将会被解释为 float

  • 取模运算时,结果的正负仅取决于被除数

比较运算符

凡运算,必有运算结果:比较运算符的运算结果是布尔类型

$a = 5;
$b = "5";
var_dump($a == $b);    //true
var_dump($a === $b);   //false    全等于不仅要求值相等,类型也必须一致

三元运算符

//求两个数中较大的数
$a = 10;
$b = 15;
$c = $a>=$b ? $a : $b;
var_dump($c);    // 15

逻辑运算符

  • &&:都为真,值才为真

  • ||:只要有一个为真,就为真

递增递减运算符

$b = 5;
$a = $b++;    //先赋值,再自增
var_dump($a,$b);    // 5    6

$b = 5;
$a = ++$b;    ////先自增,再赋值
var_dump($a,$b);    // 6    6

字符串运算符

//字符串与字符串
$a = "Hello";
$b = "world";
$c = $a.$b;
var_dump($c);    //helloworld

//字符串与数字
$d = 112;
$c = $c.$d;
var_dump($c);    //helloworld112

//下面哪个语句运行速度快
$a = "Hello";
$b = "world";
echo $a,$b;    //更快
echo $a.$b;

赋值运算符

//一个赋值运算有两个作用:1是把3赋给$a;2是返回运算结果,即3
$a = 3;
$res = ($a = 3);
var_dump($res);     // 3

continue和break

  • continue:跳过本次循环

  • break:直接终止循环

函数概念

  • 一段封装好的代码,可以随时调用

  • 返回值是只得到这个值,并不会直接输出

函数定义格式

function 函数名(){
    //执行语句
    //return;
}

命名规范:命名规则和变量是一致的,但是函数不区分大小写

函数的调用过程与返回值

函数调用时,代码执行权进入函数,当函数所有语句执行完毕,函数结束,交回执行权,或者函数碰到return语句时,函数返回,教会执行权。

function test(){
    return "hello","world";    //错误,直返return返回一个值
}

函数传参方式

function t($a){
    $a += 1;
}
$a = 3;
t($a);
echo $a;    //3    传参外部$a,相当于将外部$a的值,赋给函数内部$a,而内部$a的值怎么变,和外界无关

//引用传值
function t2(&$a){
    $a += 1;
}
$b = 5;
t($b);
echo $b;    //6    $a和$b指向同一个地址
//不推荐这种传值方式,因为函数内部的语句影响到了函数外部的变量,破坏了函数的封装性

函数中变量的作用域

  • PHP页面中声明的变量叫“全局变量”,函数内部的变量叫“局部变量”

  • 全局变量无法与局部变量进行交互,只有传参时赋值可以

//如果想局部变量访问全局变量,就需要使用关键字global
$a = 22;
function t(){
    global $a;
    echo $a;
}
t();    // 22

//超全局变量,在页面的任何部分,包括函数,方法等,都可以直接访问
function t2(){
    print_r($_GET);
}
t2();

动态调用函数

可用用变量的值当做函数名,并调用函数

function wel(){
    echo "wlecome";
}

function beat(){
    echo "beat";
}

$heart = "wel";
$heart();    // welcome

字符串定义方式

//定义短字符串
$str1 = 'hello';
$str2 = "world";
//定义大段字符串

//heredoc
$str3 = >>>mark
    大段string本身;
mark;

//nowdoc
$str3 = >>>'mark'
    大段string本身;
mark;

单双引号的对比

  • 单引号只转义两个符号:' 和 \

  • 双引号可以解析变量

  • 单引号不需要解析字符串内有没有变量,需要转义的内容也少,速度比双引号要快,优先使用单引号

  • heredoc与nowdoc的区别就是单引号与双引号的区别

数组的声明方式

数组是一种复合数据,可以装下多个值,每个值用不同的键来区分

$arr = array('001'=>'春','002'=>'夏','003'=>'秋','004'=>'冬');
//索引数组:键不必有特殊意义,纯数字,这种叫“索引数组”
$arr = array(1=>'东',2=>'西',3=>'南',4=>'北',);
//关联数组:字符串做键,一般能体现该单元的内容
$stu = array('name'=>'小明','age'=>'20');
//多维数组:数组里面有数组
$arr = array(0=>'a',1=>array('stu'=>'li','bag'=>array('语文','数学')));

数组键的规则

  • 如果不声明键,会从0,1,2,3……递增来生成键

  • 如果已经存在1或几个数字键,则从最大的数字键,递增生成数字键

  • 如果键声明重复了,后面的值覆盖前面的值

  • 键可以是整数(浮点数会转化为整数)也可以是字符串,如果字符串的内容恰好是整数,也理解成整数

操作数组单元

$arr = array('a','b','c');
//增加一个单元
$arr[] = 'd';
$arr[99] = 'e';
//读取单元值
echo $arr[3];
//改一个单元的值
$arr[0] = 'A';
//删除某个单元
unset($arr[1]);

遍历数组

//对于0,1,2……递增的索引数组,使用for循环
$arr = array('a','b','c','d');
for($key=0; $key<count($arr); $key++){
    echo $arr[$key],"<br />";
}

//对于关联数组,使用foreach遍历
$arr = array('name'=>'lisi','age'=>'20','height'=>'180cm');
foreach($arr as $key => $value){
    echo $key,':',$value,'<br />';
}

foreach($arr as $v){
    echo $v,'<br />';
}

数组游标操作

//取当前游标指向的数组单元的值
$arr = array('a','b','c');
echo current($arr);    //a

//把数组的游标往后移
next($arr);
echo current($arr);    //b

//把数组的游标移到最后
end($arr);
echo current($arr);    //c

//把数组的游标往前移
prev($arr);
echo current($arr);    //b

//重置游标
reset($arr);
echo current($arr);    //a

超级全局变量

  • $_GET:地址栏上获取的值

  • $_POST:POST表单发送的数据

  • $_REQUEST:既有GET也有POST的内容,如果含有相同的数据,POST会覆盖GET,而这可以再php.ini配置文件中进行设置更改

  • $_ENV:操作系统的相关环境信息,容易暴露服务器信息,一般不允许打印,可通过修改php.ini实现

  • $_SERVER:端口,IP地址等环境信息

  • $_DLOBALS:是对全局变量花名册的一个别名,通过该变量,可以任意访问全局变量,简单说,就是将所有全局变量变成其数组里的一个单元

常量系统

define('PI',3.14);
echo PI;
  • 命名规范:与变量一样,不过习惯上全部大写

  • 声明后,值不能修改,也不能重新声明,也不能销毁这个变量

  • 常量名前不加$

  • 常量一旦定义后,在页面的任何位置都可以访问

//检测常量是否存在
defined('PI');

//动态常量名
define('PI',3.14);
$pai = 'PI';
echo constant('PI');    //3.14
echo constant($pai);    //3.14

文件包含

文件包含的作用在于代码的重用,我们可以把常用的代码写到一个文件里,当需要这些代码工作时,直接引入这些文件就可以了

  • include();    include_once();    require();    require_once();

  • _once的作用:只引用一次,如果之前已经引用过,就不再引用,但是不叫_once执行速度快一些

  • include和require的区别:如果引入的文件不存在,include尽量往下执行,报warning,require则直接报fatal error,脚本立即停止执行

浮点数不精确

if((0.3 - 0.2) == 0.1){
    echo "相等";
}else{
    echo "不相等";
}
//输出 不相等

某些小数在十进制下,是有限的,转成二进制要无限循环,因此,损失一些精度,导致浮点数计算和数学上结果不一致

逻辑运算的短路特性

$a = 3;
$b = 5;
if($a=5 || $b=7){
    $a++;
    $b++;
}
echo $a;    //1
echo $b;    //6

/*
    或运算的优先级比赋值运算的优先级高,经过或运算,得到布尔值true,再赋值给$a,但是布尔值的自增或自减
    并不影响自身,所以true值以数字1的形式输出,$b输出结果为6
*/

递归

//0-100求和
function sum($n){
    if($n == 1){
        return 1;
    }
    return $n + sum($n-1);
}
echo sum(100);    //5050

静态变量

static变量有一个特点,在第一次函数调用声明之后存在,且不随函数结束而结束,当函数再次调用时,可以直接利用上次结果

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post