在PHP中如何定义字符串
/**
*提示 'undefined constant still' 没有定义的常量still,说明不加定界符会当成常量解析
*字符串需要书写到定界符中
*定界符 1.单引号 2.双引号 3.heredoc语法结构 4.nowdoc语法结构
*/
echo still;
不同定界符的区别
/**
* 单引号和双引号的区别
* 1.双引号解析变量,单引号不解析变量(因此效率更高)
* 2.双引号解析所有转义符,单引号只解析两个转义符:\\ \'
*/
//当内容和定界符冲突的时候需要使用转义符
$name = 'hanystill';
echo '我的名字是$name','
';//我的名字是$name
echo "我的名字是$name",'
';//我的名字是hanystill
$str = 'He said "I\'m fine."';//He said "I'm fine."
echo $str,'
';
$str = "He said \"I'm fine.\"";//He said "I'm fine."
echo $str,'
';
花括号的作用
/**
* 花括号{}的作用1:
* 当PHP解析器遇到一个美元符号($)时,它会和很多其它解析器一样,去组合尽量多的标识以形成一个合法的变量名
* 可以用花括号来明确变量名的界限,将变量扩成一个整体来解析
*/
//两种写法,推荐{$name},花括号中不要有空格,否则花括号会被当做普通字符
echo "我的名字为{$name}sss",'
';
echo "我的名字为${name}sss",'
';
/**
* 花括号{}的作用2:
* 对字符串中的字符做增删查改操作,字符串下标从0开始,可以使用[]实现相同的操作
* 编辑器报警告,说明不推荐这种写法
* Array or string offset access with curly braces deprecated in PHP 7.4.
* PHP 7.4中使用花括号的数组或字符串偏移访问已弃用。
*/
$str = 'abcdef';
echo $str{0},'
';//a 查找操作
$str{2} = 't';//修改操作,只能用一个字符修改一个字符
echo $str,'
';//abtdef
$str{3} = 'hello';//只会用h替换d
echo $str,'
';//abthef0
$str = '你好';//utf-8编码下,一个中文字符占三个字节
echo $str{0},$str{1},$str{2},'
';//输出“你”,这种操作没啥意义
$str = 'dest';
//删除操作,用空字符串/null替换,提示删除操作未生效 Warning: Cannot assign an empty string to a string offset
$str{2} = '';
$str{2} = null;
$str{5} = 'r';
echo $str,'
';//dest r
var_dump($str);//string(6) "dest r" 字符串长度会变为6
heredoc和nowdoc
编号
名字
内容
1
{$name}
He said "I'm fine."
EOF;
echo $table;
echo '
';
echo <<<"TEST"
Hello world
TEST;
{$name}
EOD;
echo $string;//{$name}没有被解析
数据类型转换
数值本身
* true -> 1
* false -> 空字符串
* null -> 空字符串
* 数组 -> Array
* 资源 -> Resource id #数字
* 对象不能直接转换成字符串
*/
echo 12.3;
echo '
';
echo true, false, null;
echo '
';
$arr = array(1,11,22);
echo $arr;//Array
echo '
';
$handle = fopen('intro.php', 'r');//资源
echo $handle;//Resource id #3
// echo '
';
$obj = new stdClass;//对象
// echo $obj;//报错:Object of class stdClass could not be converted to string
/**
* 其它数据类型转换为字符串类型 ———— 强制转换
* 1.临时转换 (string)$var | strval($var) 不改变原数据类型
* 2.永久转换 settype(var, type) 改变原数据类型
* 改变结果和自动类型转换相似
*/
$var = 123;
$res = (string)$var;
var_dump($res, $var);//string(3) "123" int(123)
echo '
';
$var = true;
var_dump(strval($var), $var);//string(1) "1" bool(true)
echo '
';
$var = 12.34;
echo gettype($var),'
';//double
settype($var, 'string');
echo gettype($var);//string
/**
* 字符串转换成其它类型
* 1.字符串转数字 取合法数字,如果不是以合法数字开头,转换为0
* 2.字符串转布尔 空字符串/'0'转为false,其它为true
*/
echo 1+'2白','
';//字符串转换为2
echo 3+'3e2','
';//识别为科学计数法,转换成3x10^3
echo 4+'true','
';//字符串转换为0,报警告
$res = '';//false
$res = '0';//false
$res = '0.0';//true
$res = 'false';//true
//其它数据类型转布尔,以下3种为false
$res = 0.0;
$res = null;
$res = array();
if($res){
echo '我是真的
';
}else{
echo '我是假的
';
}
常用函数罗列
/**
* 字符串函数库
* 总共有一百个左右字符串函数
* 1.大小写转换 2.截取 3.比较 4.查找 5.过滤 6.连接 7.加密
*/
$str = 'heLLo pHP wOLd';
//is_string() 检测变量是否是字符串
var_dump(is_string($str));//bool(true)
//strlen() 得到字符串的长度
echo '
字符串的长度为:'.strlen($str);
//strtolower() 将字符串转换为小写
//strtoupper() 将字符串转换为大写
//ucfirst() 将字符串的首字母转换为大小
//ucwords() 将字符串中每个单词的首字母转换为大写
echo '
',strtolower($str);//hello php wold
echo '
',strtoupper($str);//HELLO PHP WOLD
echo '
',ucfirst($str);//HeLLo pHP wOLd
echo '
',ucwords($str);//HeLLo PHP WOLd
//substr(string, start[, length]) 截取字符串,省略length取到末位
//start为负数表示位置,length为负数表示位置
echo '
',substr($str, -3, 2);//OL(从-3位置取2位)
echo '
',substr($str, 1, -2);//eLLo pHP wO(从1位置取到-2位置)
//strcmp(str1, str2) 比较字符串大小,区分大小写
//strcasecmp(str1, str2) 比较字符串大小,不区分大小写
//str1>str2返回值>0 str1 ',strcmp('adccf', 'afu');//-1
echo '
',strcasecmp('a', 'A');//0
//strpos(string, search) 查找字符串首次出现的位置,没有返回false,区分大小写
//stripos(string,search) 查找字符串首次出现的位置,不区分大小写(i —— ignore)
//strrpos(string,search) 查找字符串最后一次出现的位置
//strripos(string,search)查找字符串最后一次出现的位置,不区分大小写
echo '
';
var_dump(strpos($str, 'php'));//bool(false)
echo '
';
var_dump(stripos($str, 'l'));//int(2)
echo '
';
var_dump(strrpos($str, 'O'));//int(11)
echo '
';
var_dump(strripos($str, 'W'));//int(10)
//strstr(string, search, before=false)查找字符串,返回字符串
//stristr(string, search, before) 查找并返回字符串,不区分大小写
echo '
',strstr('[email protected]', '@');//@163.com
echo '
',stristr('[email protected]', '@', true);//334423
//strip_tags($string, $allow) 过滤字符串中的HTML标记和PHP标记
//trim(string[,char=' \t\n\r\0\x0b']) 过滤字符串首尾处的空白字符/指定字符
//ltrim(string) 过滤字符串开头处的空白字符
//rtrim(string) 过滤字符串结尾处的空白字符
$string = '字符串过滤
hyperlink';
echo '
',strip_tags($string);//字符串过滤hyperlink
echo '
',strip_tags($string, '');//过滤了h1,保留了a标签
echo '
','X',trim(' milk '),'X';//XmilkX
//implode(glue, array) 以分隔符glue连接array的值,别名join
echo '
',implode(',', array(1,2,4));//1,2,4
//md5() sha1() 字符串加密
echo '
',md5('hanystill');
echo '
',sha1('hanystill');
//str_split(string[,length]) 将字符串转换为数组,length是每一段的长度
$str = "Hello PHP";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1);//Array([0]=>H [1]=>e [2]=>l [3]=>l [4]=>o [5]=> [6]=>P [7]=>H [8]=>P)
echo '
';
print_r($arr2);//Array([0]=>Hel [1]=>lo [2]=>PHP)
注册页面
'.$string[mt_rand(0, strlen($string))].'';
}
?>
注册页面
注册页面
对注册表单进行校验
重新注册';
/**
* 检测用户名的合法性,要求以字母开头,长度6~10
*/
//substr(string, start[, length]);//截取字符串
$char = substr($username, 0, 1);
//ord(char)返回字符的ASCII码值
$ascii = ord($char);
//在ASCII码表中,65~90为A~Z,97~122为a~z
if(!(($ascii>=65 && $ascii<=90)||($ascii>=97 && $ascii<=122))){
exit('用户名不是以字母开头
'.$redirectUrl);
}
$length = strlen($username);
if($length<6 || $length>10){
exit('用户名长度不符合规范
'.$redirectUrl);
}
/**
* 校验密码,要求密码不能为空,长度6~10
*/
$pwdLen = strlen($password);
if($pwdLen == 0){
exit('密码不能为空
'.$redirectUrl);
}
if($pwdLen<6 || $pwdLen>10){
die('长度不符合规范
'.$redirectUrl);
}
if(strcmp($password, $password2)){//比较结果不为0
exit('两次密码不一致
'.$redirectUrl);
}
/**
* 校验邮箱,要求包含@
*/
if(strpos($email, '@')==false){//如果返回0说明以@开头,也是不合法的
exit('邮箱格式不合法
'.$redirectUrl);
}
/**
* 校验验证码
*/
if($verify !== $verify2){
exit('验证码错误
'.$redirectUrl);
}
/**
* 判断用户是否选择了兴趣爱好
*/
if(!empty($hobby)){
$hobbys = join(',', $hobby);
}
$password = md5($password);//使用md5对密码进行加密
echo '恭喜您注册成功!用户信息如下:
';
$userInfo=<<
用户名
密码
邮箱
兴趣爱好
{$username}
{$password}
{$email}
{$hobbys}
ELO;
echo $userInfo;