博客列表 >PHP作用域与字符串常用函数

PHP作用域与字符串常用函数

风车
风车原创
2022年08月14日 22:31:09550浏览

作用域

1.在PHP中,不支持块作用域
2.但是支持函数作用域
3.在JS中,函数内部可以访问全局变量,但是在PHP中,不能访问

  1. $name ='老李';
  2. function getName():string
  3. {
  4. return 'hallo'. $name;
  5. };
  6. //这样会报错,因为在函数内部无法访问外部name变量

有五种方式可以让函数内部可以使用外部变量方式

1.global

  1. $name ='老李';
  2. function getName():string
  3. {
  4. global $name;
  5. };

2.$GLOBALS[‘变量名’]

  1. $name ='老李';
  2. function getName():string
  3. {
  4. return $GLOBALS['name'];
  5. };
  6. echo getName();

3.通过闭包的方式(在PHP中,匿名函数就是闭包)
语法:function () use ($变量名):string {}

  1. $fangfa = function () use ($name):string {
  2. return $name;
  3. };
  4. echo $fangfa();

4.箭头函数
注意:与JS相比,在PHP的箭头函数中,参数列表前必须有fn
语法$fangfa2 = fn() => $name;

  1. $fangfa2 = fn() => $name;
  2. echo $fangfa2();

5.纯函数:将函数依赖的外部数据,通过参数的方式注入

  1. function getName1($name):string
  2. {
  3. return $name;
  4. };
  5. echo getName1($name);

在函数外部 访问函数内部变量

1.如果外部需要函数的私有变量,可以将他作为返回数据的赠品来返回
方法就是返回一个数组,在数组中加入需要的私有变量,一起返回到函数外部

注释:在函数中有一个我们需要的私有变量,我们需要在外部调用,然后我们通过返回数组的方式,给他随便加一个数值,然后跟着我们需要的变量,组成一个数组,一起返回,然后在函数外部 我们通过 list 对返回的数组进行解构 ,就可以得到对应的参数

  1. $my = function ()
  2. {
  3. $myname = '张老师';
  4. return['这是主要返回的数据',$myname];
  5. };
  6. list ($myname,$myname2)=$my();
  7. echo $myname,$myname2;

函数私有变量和外部变量同名

1.如果产生重名,函数的内部变量会覆盖外部同名变量

常量

常量的声明方式

1.define()
2.const
define和const的区别
1.define是函数,可以用在if中,但是不能用在类中
2.const 在编译阶段处理,在作用域顶部声明,可以 用在类中,但是不能用在if中
3.常量不受作用域显示,全局有效,可以直接调用
注意:
1.常量命名所有字母大写,多个单词之间用蛇形命名法
2.常量的前面不用加 $ 符

constant():显示一个常量

用const声明的常量不支持这个函数来打印

常量分为自定义常量和预定于常量,预定义常量不用定义,可以直接调用

预定义常量中有一个特殊的子集,叫魔术常量,它的值是变化的,但是它由系统自动赋值和维护更新,我们不能修改。

字符串

字符串的两种声明方法

1.单引号
单引号声明的是纯文本,不解析变量,转义特殊符号,常用在静态文本
单引号有一个语法糖 nowdoc
语法就是 一个常量 =<<< ‘xxx’ 需要包含的内容(可以是html文档) ‘xxx’;xxx相当于文档名,前后要一致

  1. $str = <<< 'TEXT'
  2. <header>
  3. <nav>
  4. <a href="">首页</a>
  5. <a href="">视频</a>
  6. <a href="">文章</a>
  7. </nav>
  8. </header>
  9. TEXT;

2.双引号
双引号声明的是模板字符串,特点就是解析变量,转义特殊符号,使用场景就是 包含插值变量和特殊字符的动态模板
语法糖 herddoc
适用于大段的,多行的动态的文本内容,内部有变量和大量的双引号
比如html模板

  1. $tpl = <<< PHPCN
  2. <ul style="display:inline-grid;border:1px solid">
  3. <li style="color: brown">php中文网</li>
  4. <li>$domain</li>
  5. </ul>
  6. PHPCN;
  7. echo $tpl;

字符串的常用函数

1.array=>string :implod(分隔符,数组名)这里的参数就是分隔符

  1. $a =['我的','你的','他的','他们的'];
  2. echo implode(',',$a);

2.string=>array :explode(分隔符,字符串)

  1. $link = 'mysql:dbname=phpedu;root;root';
  2. $db = explode(';', $link);
  3. $tpl = 'dsn = %s<br>username = %s<br>password = %s<br>';
  4. vprintf($tpl, $db);

3.查询,替换
//substr($str, start, size): 获取数组中的对应位置的值
三个值分别是, 数组名,起始索引,结束索引(结束索引可以不要,如果不写则拿到从起始索引后所有的值)

  1. echo substr($str, 4, 2) . '<br>';

4.strstr(三个参数) :获取字符首次出现位置之后的字符串
三个参数分别是 变量名 需要获取的字符 第三个值如果不写默认为获取后面,如果为true则获取这个字符之前的
```$img = ‘banner.png’;
// 扩展名 .png
echo strstr($img, ‘.’). ‘<br>‘;
// true: 点之前的
echo strstr($img, ‘.’, true). ‘<br>‘;

  1. 5.strpos(三个参数) :首次出现的索引
  2. 三个参数分别是 变量名 ,需要查询的字符 ,查询的起始位置(如果从第一个字符开始的话就不用写)

//获取p的首次出现索引
echo strpos($str, ‘p’) .’<br>‘;
echo strpos($str, ‘p’, 1) .’<br>‘;

  1. 6.str_replace:字符串的替换
  2. **defins 重定义:将一个字符定成另一个字符 相当于是起个别名 下方就是将比较长的名字直接定义成DS**

//这里有一个路径
$class = ‘\admin\controller\User’;
// ‘\’: 目录分隔符, windows, linux,macos都不相同,用系统常量来替换
// 将本来很长的目录分隔符英文,定义成缩写DS
define(‘DS’, DIRECTORY_SEPARATOR);
//然后通过替换函数 将上方路径中的 \ 替换成DS(会自动识别系统对应的分隔符)
echo str_replace(‘\‘, DS, $class) ;

  1. 比如游戏中的敏感词替换

$bad = [‘我草’,’尼玛’, ‘弱智’];
$goods = ‘**’;
$str = ‘我草,你打尼玛的游戏呢,跟尼玛个弱智一样’;
echo str_replace($bad, $goods, $str) . “<hr>“;

  1. ![](https://img.php.cn/upload/image/298/155/595/1660486234572400.png)
  2. 7.删除指定字符
  3. strlen:获取当前字符串长度
  4. trim(变量名):删除前后空格
  5. rtrim(变量名):从右往左删
  6. ltrim(变量名):从左往右删
  7. strip_tags:过滤html标签

$str = ‘ php.cn ‘;
echo strlen($str) . ‘<br>‘;
echo strlen(trim($str)) . ‘<br>‘;
$str = trim($str);
echo rtrim($str, ‘.cn’) . ‘<br>‘;
echo ltrim($str, ‘php.’) . ‘<br>‘;
echo strip_tags(‘<h1>php.cn</h1><?php echo \’Hello\’ ?>’);

  1. 8.字符串大小写转换
  2. strtoupper :将字符串转换成大写
  3. strtolower :将字符串转换成小写

echo strtoupper(“hello WORLD.”);
echo strtolower(“hell WORLD.”);

  1. 9.str_shuffle :随机打乱当前字符串

echo str_shuffle(“abcdefghijklmn”);

  1. 10.str_pad :将字符串填充到指定的长度
  2. 有三个参数:变量名 填充目标值 填充内容(用什么来填充)

$str = “Hello World”;
echo str_pad($str,30,”.”);

  1. 11.bin2hex :将字符串变成16进制

$str = bin2hex(“变成16进制”);
echo($str);
```

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议