欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP基础语法

程序员文章站 2023-10-31 11:47:58
对于字符串中的指定字符做增删改查操作 $string='abcdef'; //查找 echo $string{0}; echo '
'; //注意,修改的时候只能一个字符替换一个字符 $string{1}='z'; echo $string;//azcdef echo '
'; $s ......

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

    $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';