0
点赞
收藏
分享

微信扫一扫

PHP快速入门

橙子好吃吗 2021-09-27 阅读 110
日记本PHP

变量

//注释
<?php
echo "Hello";
$var1;//定义变量
$var2=2;//定义并赋值
echo $var2;//如果输出未赋值的变量,会报Notice: Undefined variable(报的错是:未定义的变量)
//删除变量,其实就是置为NULL
unset($var1);

变量命名规则

    1. 必须以$开头
    1. 字母数字下划线组成,但是不能以数字开头

预定义变量

  • $_GET:获取所有表单以get方式提交的数据
  • $_POST:post方式提交的数据
  • $_REQUSET:get和post方式提交的数据
  • $GLOBALS:php中的所有全局变量
  • $_SERVER:服务器信息
  • $_SESSION:session会话数据
  • $_COOKIE:cookie会话数据
  • $_ENV:环境信息
  • $_FILES:用户上传的文件信息

可变变量

<?php
$a='b';
$b='bb';
echo $$a;//bb

引用传递

$a=1;
$b=&$a;
$b=2;
echo $a,$b;//22

常量

定义常量

<?php
/**
 * 定义常量两种方式
 */
define('a',1);
//5.3之后支持
const b=1;
echo a,b;//11

常量命名规则

  1. 常量不需要$符号,一旦使用,系统会认为为变量
  2. 字母数字下划线,数字不能开头
  3. 常量通过大写字母为主
  4. 常量命名规则比较松散,可以使用特殊字符,但是该方式只能使用define定义

常量两种定义方式区别

  1. 权限区别
  2. 常量通过不分区大小写,但是可以区分,可以参照define函数自三个参数,默认是false
<?php
define('a',2);
define('A',1);
echo a,A;//21
define('b',2);
define('B',1,true);
echo b,B;
/**
 * 输出结果:
 *  21
    Notice: Constant b already defined in E:\WorkSpace\PHPStorm\day01\index.php on line 8
    2
    Notice: Use of undefined constant B - assumed 'B' in E:\WorkSpace\PHPStorm\day01\index.php on line 9
    B
 */

特殊符号定义常量

<?php
define('--',3);
echo constant('--');//3

系统常量

  • PHP_BERSION:PHP版本号
  • PHP_INT_SIZE:整形大小(字节数)
  • PHP_INT_MAX:整形能表示的最大值
  • DIR:当前被执行的脚本所在电脑的绝对路径
  • FILE:当前被执行的脚本所在电脑的绝对路径带自己文件的名字
  • LINE:当前所属的行数
  • NAMESPACE: 当前所属命名空间
  • CLASS:当前所属的类
  • METHOD:当前所属的方法

数据类型

基本数据类型

  • 整形:int/interger 系统分配4个字节存储,表示整数类型.(默认是有符号类型)
  • 浮点型:float(4字节)/double 分配8个字节,表示小数或整形存不下的数据
  • 字符串: string 系统根据实际长度分配
  • 布尔型:bool/boolean true/false

复合数据类型

  • 对象类型:object 存放对象
  • 数组类型:array 存储多个数据

特殊数据类型

  • 资源类型:resource 存放资源数据(PHP外部数据,如数据库,文件)
  • 空类型:NULL 只有一个值NULL

其他类型转布尔值的说明

字符串=》数值

  • 以字母开头的字符串,永远为0
  • 以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
<?php
$a='1.2.3a';
echo (float)$a,(int)$a;//1.2 1

类型判断

<?php
$a='1.2.3a';
var_dump(is_string($a));//bool(true)

gettype

<?php
$a='1.2.3a';
echo gettype($a);//string

settype

<?php
$a='1.2.3a';
$b=settype($a,'int');
$c='32a';
$d=(int)$c;
echo $a,$b,$c,$d;//1132a32

settype和强制类型转换的不同

  1. 强转,是对数据值的赋值的内容进行处理,不会处理实际存储的内容
  2. settype会直接改变数据本身

整数类型转化

  • Decbin():十进制转二级制
  • Decoct():十进制转八进制
  • Dechex():十进制转十六进制
  • Bindec():二级制转十进制
<?php
var_dump(decbin(107));# string(7) "1101011"

浮点数

<?php
$f1=1.23;
$f2=1.23e10;
$f3=PHP_INT_MAX+1;
var_dump($f1,$f2,$f3);
#float(1.23)
#float(12300000000)
#float(2147483648)

为什么同样字节,浮点数表示范围大


Empty()和Isset()

  • Empty(): 判断数据的值是否为空,不是null,如果为空返回true否则false(针对真实存储的数据)
  • Isset(): 判断数据存储的变量本身是否存在,不管里面存储的是空字符串还是0等,变量存在就返回true(针对变量)

运算符

!==和===

连接字符串

  • .: 将两个字符串连接到一起
  • .=:将左边的内容和右边内容连接起来,并赋值给左边变量

错误抑制符

  • @:在可能出错的表达式前面使用@
<?php
$f1=1.23;
@($f1/0);

遍历数组

<?php
$a=[1,2,3];
$b=array(1,2,3);
foreach ($a as $vlaue) {
    echo $vlaue;
}
for ($i =0; $i < sizeof($a);$i++) {
    echo $a[$i];
}
foreach($b as $k=>$v){
    echo $k."=>".$v;
}

continue和break

  • continue:结束本次循环进入下次循环
  • break:结束循环
  • continue 2:结束当前自己循环,同时外部循环如果还有循环体也一起结束,进入下次
  • break 2:结束自己循环,同时外部也结束,如果还有外部不受影响

流程控制替代语法

if: if(): endif;
switch: switch(): endswitch();

文件包含

  • 向上包含,类似java里面的import(先导入再使用)
  • 向下包含,先定义再传递


include和require

include_once:只会导入一次
include:出现一次导入一次
require:和include区别只是在文件不存在的时候,
报错形式不一样(include只是警告,后面代码正常执行,require警告一次报错一次,后续代码不执行)
require_once:类似include_once

函数

<?php
//此时下面的&$name证明是引用传递,但是1是常量,会报错,可以定义$a=1然后传递$a即可
haha(1,20);
//默认值一般放在最后面
function haha(&$name,$num=1)
{
    echo $num.' hello  world'.$name;
}

作用域

<?php
//全局空间:最终会被系统纳入超全局空间(系统定义的全局变量的位置)变量中:$GLOBALS['global']=global area
$global='global area';
var_dump($GLOBALS['global']); //string(11) "global area"
function haha()
{
    global $a;
    $a='innner';
//    echo $GLOBALS['global'];//通过这种方式使用,也可以通过传参
    //echo $global;//报错
    //或者使用下面方式,通过global定义变量都会放在$GLOBALS内部,如果全局存在则是使用,不存在则是定义,这样可以
    //实现局部使用全局,全局使用局部,同理,都可以修改,但是实际上都是$GLOBALS的作用,但是一般不这么使用
    global $global;
    echo $global; 
    //但是这些作用域只针对变量,如果内部使用外部常量,则可以正常使用,前提是define定义的
}
haha();
echo $a; //inner

静态变量

<?php
function haha()
{
    static $local='local';
    $local.=$local;
    echo $local,'<br/>';
}
haha();#locallocal
haha();#locallocallocallocal

可变函数

<?php
function haha()
{
    echo  'a','<br/>';
}
$a='haha';//注意是字符串
$a();

匿名函数

<?php
$fun= function () {
    echo "匿名函数";
};
$fun();
<?php
function test()
{
    $name=__FUNCTION__;
    $fun= function ()use ($name) {//use就是将外部变量(局部)保留给内部使用
        echo $name; //test
    };
    $fun();
}
test();

伪类型

  • Mixed:混合的,可以是多种php中的数据类型(例如手册上的传参类型很多种可以使用该类型)
  • Number:数值的,可以是任意数值类型(整形和浮点型)

常用函数

输出函数

  • print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号
  • print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)
<?php
echo print('hello world<br/>');
print 'hello world<br/>';
$a='hello world<br/>';
print_r($a);

时间函数

  • date():按照时间戳或者格式时间,如果没有参数是当作当前时间使用
  • time():当前时间对应的时间戳(秒级别)
  • microtime():获取微秒级别的时间
<?php
echo date('Y年m月d日H:i:s<br/>',12345678);
echo time(),'<br/>';
echo microtime();

数学函数

  • max():参数最大值
  • min():参数最小值
  • rand():得到随机数,都是闭区间,需要参数
  • mt_rand():与rand一样,只是底层结构不一样,效率更高
  • round():四舍五入
  • ceil():向上取整
  • floor():向下取整
  • pow():幂运算
  • abs():绝对值
  • sqrt():平方根

有关函数的函数

  • function_exists():判断指定的函数名字是否在内存中存在
  • func_get_arg():在自定义函数中获取指定数值对应的参数
  • func_get_args():在自定义函数中获取所有的参数(数组)
  • func_num_args():获取当前自定义函数的参数数量
<?php
function test($a, $b)
{
    var_dump(func_get_arg((1)));
    var_dump(func_get_args());
    var_dump(func_num_args());
}
test(1,2,3);
/***
 * int(2)
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
int(3)
 */

字符串

单引号

在单引号中,任何特殊字符都会按原样输出【除\、\‘将会被转义输出】


从上面例子中我们可以明显看到,变量是没有被解析的;同时带反斜杠的转义字符仅仅只有单引号、反斜杠被转义输出了,其他的是直接输出。

双引号

在双引号中,遇到$将会解析该变量;
双引号中会转义反斜杠的转义字符;

?
<?php
$var = 'this is a var!'; 
echo "666$var 666、\'、\"、\\、\n、\r、\t、\$";

注意:变量和后面字符之间必须有空格,不然无法确定变量名称,或者使用{$var}666这样也行


由上面例子我们可以知道,双引号中的变量被解析了,替换成字符串;其他带反斜杠的转义字符都进行了相应的转义。

单双引号之间的区别

  • 双引号会替换变量的值,而单引号会把它当做字符串输出。
  • 对于转义的支持
  • 性能速度问题,由于双引号中的字符串需要检测是否含有$符号修饰的变量,因此从理论上讲,单引号是比较快的。

heredoc与nowdoc

heredoc

heredoc可以理解为不使用双引号来定义字符串,但效果与使用双引号一致。【此时双引号相当于普通字符】

  • 开始标记和结束标记使用相同的字符串,通常以大写字母来写。
  • 开始标记后不能出现空格或多余的字符。
  • 结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
  • 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。
<?php
$var = 'this is zq';
echo <<<EOD
    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
      <title>"随风"</title>
    </head>
    <body>
    66666666666<br/>
    "666666666"<br/>
    $var<br/>
    \$var<br/>
    \n666<br>
    </body>
    </html>
EOD;

此时双引号仅仅只是一个普通字符;其他的效果和双引号的字符串效果一致。

nowdoc

同理,nowdoc是不使用单引号来定义,但效果相当于使用单引号来定义的字符串。【此时单引号相当于普通字符】

<?php 
$var = 'this is zq'; 
echo <<<EOD
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
  <title>"随风"</title>
</head>
<body>
'02020'<br/>
\'<br/>
66666666666<br/>
"666666666"<br/>
$var<br/>
\$var<br/>
\n666<br>
</body>
</html>
EOD;

注意:
定界符之后必须不能有任何字符【特别是空格字符有时会没注意到】,否则将会出错。
如上例中的EOT后面有空格就会报这个错误:【 Parse error : syntax error, unexpected '<<' (T_SL)】

字符串长度问题

  • strlen():得到字符串的长度(字节为单位)


多字节字符串的长度问题:包含中文的长度(使用mbstring扩展)

注意首先打开php的mbstring扩展

<?php
$var = '中国abc';
echo mb_strlen($var,'utf-8'); #5
echo strlen($var); #9

字符串相关函数

数组

<?php
$arr1=array(1,2,'3',true);
$arr2=[1,2,'3',true];
//隐形数组,字符串等也可以做下标
$arr3[]=1;
//var_dump($arr3); #array(1) { [0]=> int(1) }

<?php
//特殊下标
$a1[false]=false;
$a2[true]=true;
$a3[NULL]=NULL;
var_dump($a1,$a2,$a3);
#array(1) { [0]=> bool(false) } array(1) { [1]=> bool(true) } array(1) { [""]=> NULL }

for遍历数组

<?php
//多维数组
$arr = array(
    0=>array('name' => 'Jim', 'age' => 30),
    1=>array('name' => 'Tom', 'age' => 20),
    2=>array('name' => 'Jret', 'age' => 10)
);
//print_r($arr);
# Array ( [0] => Array ( [name] => Jim [age] => 30 ) [1] => Array ( [name] => Tom [age] => 20 ) [2] => Array ( [name] => Jret [age] => 10 ) )


foreach ($arr as $value) {
    print_r($value);
    echo $value['name'],$value['age'];
}

$arr1=[1,2,3,4,5,6,7,8];
//注意此处$i后是,这样提前把len定义出来,性能优化
for ($i = 0,$len=count($arr1);$i < $len; $i++) {
    echo $arr1[$i];
}

while配个each和list遍历数组


0下标-》 取得元素的下标值
1下标-》 取得元素的值
key下标-》 取得元素的下标值
value下标-》 取得元素的值


<?php
$arr2=array(1,'name'=>'Tom',3,'age'=>30);
echo '<pre>';
print_r(each($arr2));

#List(变量1,变量2)=each(数组);是一种赋值运算,但是可以得到fasle(each取不到正确结果的时候),整个表达式为false

while ((list($key,$value)=each($arr2))){
    echo $value;
}
输出:
Array
(
    [1] => 1
    [value] => 1
    [0] => 0
    [key] => 0
)
Tom330

数组相关函数

注意:next和prev会移动指针,有可能导致指针移动到最前或者最后(离开数组),导致next和prev不能 回到准确的指针位置


举报

相关推荐

php 快速入门(五)

0 条评论