PHP基础语法

时间:2020-01-09
本文章向大家介绍PHP基础语法,主要包括PHP基础语法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

对于字符串中的指定字符做增删改查操作

    $string='abcdef';
    //查找
    echo $string{0};
    echo '<br/>';
    //注意,修改的时候只能一个字符替换一个字符
    $string{1}='z';
    echo $string;//azcdef
    echo '<br/>';
    $string{4}='!';
    echo $string;//azcd!f
    echo '<hr/>';
    $string='abc';
    $string{0}='hello';
    echo $string;//hbc
    echo '<hr/>';
    //不要对于中文字符做操作
    $string='你好';
    var_dump($string);//'你好' (length=6)
    echo '<hr/>';
    //删除 不知道为啥这部分我做了没效果,还是输出原来的字符串;
    如果把''改成' ',原来的字符位置又会多出一个空格,不明白不明白??
    $string='abcdef';
    $string{2}='';
    echo $string; //abcdef
    echo '<br/>';
    $string{0}=''; //abcdef
    echo $string;
    //添加字符
    echo '<br/>';
    $string='abc';
    $string{3}='d';//abcd
    echo $string;
    echo '<br/>';
    $string='abc';//abc00e
    $string{5}='e';
    echo $string;//abc e

不存在的变量返回null
销毁变量使用unset()

    $a=$b=$c='king';
    //一次销毁3个变量
    unset($a,$b,$c);
    var_dump($a,$b,$c);

php换行符
1.\n是使源代码换行,而浏览器显示的内容不换行(用双引号包裹);
2.<br />是使浏览器显示的内容换行,而源代码不换行


 

临时转换

    $var=true;
    //临时转换成整型
    var_dump((int)$var,(integer)$var);//1 1
    //临时转换成浮点类型
    var_dump((float)$var,(double)$var,(real)$var);
    //临时转换成字符串型
    $var=true;
    var_dump((string)$var);
    //临时转换成布尔类型
    $var='3king';
    var_dump((bool)$var,(boolean)$var);
    //临时转换成空
    $var='hello';
    var_dump((unset)$var);
    //临时转换成数组
    $var=123;
    var_dump((array)$var);
    //临时转换成对象
    $var=12.3;
    var_dump((object)$var);

通过系统函数完成临时转换

    $var='3king';
    $res=intval($var);
    var_dump($res);//3
    var_dump(floatval($var),doubleval($var));
    var_dump(boolval($var));
    $var=true;
    var_dump(strval($var));

得到变量的类型 gettype()
type可能的值为:
“boolean” (或为“bool”,从 PHP 4.2.0 起)
“integer” (或为“int”,从 PHP 4.2.0 起)
“float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用)
"string"
"array"
"object"
“null”


 

永久转换的例子

    $var=123;
    echo gettype($var);//integer
    echo '<br/>';
    //永久转换settype($var,$type)
    settype($var,'bool');
    var_dump($var);

通过变量函数库检测变量的类型,is_*

    //检测是否为整型
    $var=0;
    var_dump(
      is_int($var),
      is_integer($var),
      is_long($var)
    );
    //是否为字符串型
    $var='3king';
    var_dump(
      is_string($var)
    );
    //是否是布尔类型
    $var=false;
    var_dump(is_bool($var));
    //是否为标量类型
    $var=123;
    $var=null;
    var_dump(is_scalar($var));
    //是否为null
    $var=null;
    var_dump(is_null($var));
    //是否为数组
    $var=array();
    var_dump(is_array($var));
    //是否是对象
    $var=new StdClass();
    var_dump(is_object($var));
    //是否是资源
    $var=fopen('./test.html','r');
    var_dump(is_resource($var));
    //检测是否为数值型或者是字符串形式的数值
    //123 23.4 '123.34' '23'
    $var=123;
    var_dump(is_numeric($var));

系统常量

    echo PHP_VERSION;//7.3.4
    echo PHP_OS;//WINNT
    echo PHP_INT_MAX;//...很长

define(NAME,VALUE):定义常量
常量一经定义不能改变
常量默认区分大小写,使用的时候按照定义时的大小写来使用

    define('TEST','this is a test');
    echo TEST;

    define('TEST_ARRAY',array('a','b','c'));
    var_dump(TEST_ARRAY);

const关键字定义常量
    const TEST='this is a test';
    echo TEST;

    //通过constant来获取常量的值
    echo constant('TEST');

    //通过defined()检测常量是否存在
    var_dump(defined('TEST'));

    //get_defined_constants():返回的是数组,得到所有已定义的常量,包含系统常量和自定义常量
    print_r(get_defined_constants());

魔术常量

    echo __LINE__;
    echo __FILE__;
    echo __DIR__;

$_REQUEST 能接收 get,post 方式传值,它包含$_GET,$_POST,$_COOKIE 三个预定
义变量的内容,为什么在页面上给$_GET 和$_POST 赋值以后打印$_REQUEST,里面却为
空?


原因:$_REQUEST 包含$_GET 和$_POST 的值,必须是通过 get,post 两种方式传过来的
数据,单独在页面给$_GET 和$_POST 赋值时,没有给$_REQUEST 赋,它代替不了$_GET
和$_POST


 

define 定义数组常量时报错


原因:数组常量定义是 PHP7 新加的特性,在 7 之前的版本,常量的值仅允许标量和 null。
标量的类型是 integer, float,string 或者 boolean。所以数组是不允许的,需要将版
本升级到 7 才能定义数组常量。


 

整数支持递增递减运算符
浮点类型支持递增递减运算符
布尔类型不支持递增递减运算符
null只支持递增运算符,不支持递减运算符
字符串只支持递增运算符,根据ascii码来计算

    $str='a';
    echo ++$str;//b

    $str='a1';
    echo ++$str;//a2

    $str='a9';
    echo ++$str;//b0

    $str='B';
    echo ++$str;// C

ord($character):得到指定字符的ASCII码值

    $str='a';
    echo ord($str);
    echo '<br/>';//98

chr($ascii):根据指定ASCII得到对应的字符

    echo chr(98);//b

字符连接符

    echo 'a'.'b'.'c';//abc
    echo 'a','b','c';//abc

    $str1=' hello ';
    $str2=' world ';
    $newStr=$str1,$str2;//报错
    $newStr=$str1.$str2;// hello  world 
    echo $newStr;

mt_rand($min,$max):产生随机数

    echo mt_rand(1,9);
    echo mt_rand(1000,9999);

生成四位数的多色验证码

    $code='<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>';
    $code.='<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>';
    $code.='<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>';
    $code.='<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>';
    echo $code;

比较结合运算符(太空船运算符)
前面>后面 1
前面<后面 -1
前面=后面 0

    var_dump(
        1.5<=>1.5,
        1.5<=>1.2,
        1.5<=>4.6
    );

    var_dump(
      'a'<=>'a',
      'c'<=>'a',
      'c'<=>'e'
    );

NULL合并操作符
从左到右第一个存在且不为null的操作
如果全部都是null,就返回null
php7之后开始有

    var_dump(
      true??'king'??123,
      0??false??null??'hello world',
      $abcdef??'hello world'
    );

字符串搜索相关
strpos($string,$search):返回字符串首次出现的位置,位置从0开始;如果没找到返回false
stripos($string,$search):忽略大小的去搜索
strrpos($string,$search):返回字符串最后一次出现的位置;如果没找到返回false
strripos($string,$search):忽略大小写的去搜索最后一次出现的位置

    $str='abcadebf';
    var_dump(strpos($str,'bc')); //1
    var_dump(stripos($str,'B'));//1
    var_dump(strrpos($str,'a'));//3
    var_dump(strripos($str,'A'));//3

错误抑制符@

    $var=123;
    @settype($var,'king');

三元运算符相当于缩写的if...else
exp1?:exp3

    $res=0?:'this is a test';
    var_dump($res);

max()  min()

    echo max(123,234,35234234);//得到最大值
    echo min(-123,23,5346);//得到最小值

date($format,$time):格式化日期时间
Y:4位的年份
m:2位月份
d:2位的日
H:2位的小时
i:2位的分钟
s:2位秒数
w:返回一周内的第几天,0~6(0代表星期日)

date_default_timezone_set($timezone):设置时区
date_default_timezone_get():得到当前默认的时区
time():得到当前的时间戳

    date_default_timezone_set('PRC');//Asia/Shanghai
    echo date("Y年m月d日 H:i:s");//2020年01月09日 15:29:18
    echo date("Y-m-d H:i:s",time());//2020-01-09 15:29:18
    echo date("Y/m/d",time());//2020/01/09
    echo date_default_timezone_get();//PRC

if语句的另外的形式

    if(true){
    }else{
    }

    if(true):
    else:
    endif;
-----------------------------
    if(true){
    }else if($username=='queen'){
    }else {
    }

    if(true):
    elseif(true):
    else:
    endif;

exit($msg)|die($msg)程序终止执行

    exit;
    die;
    exit("<h1>Game Over ...</h1>");

for循环

    for($i=1;$i<=3;++$i){
      echo $i;
      echo "\n";
    }
    echo $i,"\n";//4

    for($j=4;$j<=0;$j++){
      echo 'this is a test<br/>';
    }
    echo $j,"\n";//没有循环,初始值4

    //生成四位数多色验证码
    for($i=0;$i<4;$i++){
      echo '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(0,9).'</span>';
    }

goto跳转

    echo 'starting...';
    goto TEST;
    echo 'this is a test';//不显示,被跳过

    TEST://TEST标识符
    echo '跳入TEST';

    //goto 不能跳入循环、switch...case 函数和类
    //goto TEST1;//报错
    for($i=1;$i<=5;$i++){
      TEST1:
      echo '跳入循环TEST1';
    }

    for($i=1;$i<=5;$i++){
      if($i==3){
        goto TEST2;
      }
    }

    TEST2:
    echo '跳出循环TEST2';

$flag 上一页 下一页