对于字符串中的指定字符做增删改查操作
$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';
来源:https://www.cnblogs.com/chenyingying0/p/12172129.html