批改状态:合格
老师批语:
自动类型转换是指,计算机或编程语言解释器,在计算两个或两个以上不同类型的变量时,会自动将两个变量转换为可计算的变量,来达到计算的结果。
PS:自动类型转换,不会改变原变量的变量类型。
常见类型可分为:
① 字符串和整形
② 字符串和浮点型
③null 参与混合运算时的结果
④ 布尔型true、false参与混合运算时的结果
// 变量类型的自动转换:$page = "1000pages";@$page += 50;var_dump($page);echo "<br>";@$page += 22.66;var_dump($page);echo "<br>";@$num = $page + null; //null = 0var_dump($num);echo "<br>";@$num = $page + true;//true = 1var_dump($num);echo "<br>";@$num = $page + false;var_dump($num);echo "<br>"; //false = 0
2. 强制类型转换
强制类型通常是程序员对数据强制进行转换的结果。
语法:$变量 = (想要转换的变量类型)$想要转换的变量
$price = 100;$goods = (string)$price;var_dump($goods);//输出结果为: string(3) "100"
变量的作用域:其实就是变量的生效范围,作用域就是查找变量的工具。这点类似于常量的空间。但是有有所不同。
变量的作用域通常可以分为: ① 全局变量 【外部变量】 ② 局部变量 【内部变量】
// 1.生成一个变量function name(){$username = "GGGG";$email = "12346789@qq.com";echo "用户名是:$username,他的邮箱是:$email";}// 调用一下变量以输出内部内容name();// 在函数外部调用函数内部变量:echo $username; // 非法访问,在函数外部不能访问到局部变量: Undefined variable: username

有没有什么方法能在函数外部调用函数内部的变量呢? ====> 将函数赋值给一个变量来输出,同时函数内部使用
return来返回内部函数的执行结果。
是直接定义在函数外部的变量,可供全局调用。但不能在函数内部调用。
$username = "gggg";$email = "4546548964563@163.com";$phone = "12315456464";$price = 1325456;$goods = "Iphone 12 pro";// 是定义在函数外部的变量function name();{.......};
如果想在函数内部引用全局变量,就需要使用到一个函数:GLOABALS
GLOBALS语法:$GLOBALS['新变量'] = $GLOBALS['全局变量']
这里是将全局变量赋值给一个新变量,最后通过引用函数,再输出这个新函数即可完成通过函数输出全局变量。
function user(){$GLOBALS['username'] = $GLOBALS['username'].$GLOBALS['email'];}user();echo $username;

PHP 常量:用于数据计算固定的值。
常量只能是:标量类型【整形、字符串、浮点型、布尔型】
常量 PS:
① 常量必须初始化(初始化:第一次赋值)
② 类常量只能使用const定义
③ 常量名推荐使用全部大写
④ 多个单词之间使用_连接
⑤ 常量不受作用域的限制
⑥ 常量不能重新被定义【重复声明定义】或取消定义【unset 弹出等】等
⑦ 常量定义推荐使用const来定义
const和define定义常量的区别:
const定义常量和define定义一个常量的区别:const是一个语言结构,而define是一个函数,可以通过第三个参数来设置是否大小写敏感的问题。define()语法:define('常量名', 常量值, true);true 表示大小写不敏感,默认为 false
它们的区别:
①const 是一个语言结构;而 define 是一个函数
②const 简单易读,编译时要比 define 快很多。
③const 可在类中使用,用于类成员常量定义,定义后不可修改;define 不能在类中使用,可用于全局变量
④const 是在编译时定义,因此必须处于最顶端的作用区域,不能在函数,循环及 if 条件中使用;而 define 是函数,也就是能调用函数的地方都可以使用
⑤const 只能用普通的常量名,define 常量名中可以有表达式
⑥const 定义的常量只能是静态常量,define 可以是任意表达式
// 定义一个常量:// 常量必须初始化:const APP_PATH = '/homework/demo3.php';// 定义一个常量的另外一种方式:使用define函数来定义// define(`常量名`,`常量值`)define('PATH','/demo3.php');// 常量的访问:echo APP_PATH;echo '<br>';// 通过赋值一个常量给一个变量,然后访问变量也可以$name = APP_PATH;echo $name;echo '<br>';// 在类常量之中,常量只能通过const来定义。class User{const USER_EMAIL = "1245456@163.com";}echo '<br>';// 常量不能被重复定义,或被取消定义// 重复定义:// const APP_PATH = "/WWW"; //Constant APP_PATH already defined// unset(APP_PATH); //syntax error, unexpected ')'// 常量不受作用域的限制:也就是说常量可以在任何地方使用或被调用function name(){return APP_PATH;}echo name();

echo 'PHP版本号:'.PHP_VERSION.'<br>';echo '您的操作系统是:'.PHP_OS_FAMILY.'<br>';echo '环境变量的目录列表的分隔符:'.PATH_SEPARATOR.'<br>';echo '目录分割符:'.DIRECTORY_SEPARATOR.'<br>';echo '最大整数:'.PHP_INT_MAX.'<br>';echo '最大浮点数:'.PHP_FLOAT_MAX.'<br>';
and so on…….
PS:根据位置的变化而变化
几个常见的魔术常量:
| 常量名 | 描述 |
|---|---|
__LINE__ |
文件中的当前行号 |
__FILE__ |
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名. |
__DIR__ |
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。 |
__FUNCTION__ |
当前函数的名称。匿名函数则为 {closure}。 |
__CLASS__ |
当前类的名称。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。 |
__TRAIT__ |
Trait 的名字。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。 |
__METHOD__ |
类的方法名。 |
__NAMESPACE__ |
当前命名空间的名称。 |
ClassName::class |
完整的类名,参见 ::class。 |
// 魔术常量echo '当前代码所在的行数为:'.__LINE__.'<br>';echo '当前文件的完整路径和文件名:'.__FILE__.'<br>';echo '文件所在的目录:'.__DIR__.'<br>';function demo(){echo '当前函数名为:'.__FUNCTION__;}demo();echo '<br>';

命名空间的作用是什么:是为了解决常量名复用的问题,常量是全局成员,最大的问题是命名冲突,引入命名空间 针对的是全局成员,在不同的命名空间内,可以重复命名一个常量。
如何创建一个命名空间?
使用namespace 空间名来创建
PS:
① 全局空间内的成员不允许重复定义
② 命名空间外不允许编写程序代码
那些可以使用命名空间,或被存放在命名空间内:
① 常量
② 函数
③ 类[借口]
// 创建一个命名空间namespace name{const APP_PATH = "/WWW";}// 创建第二个命名空间namespace user{const APP_PATH = "/blog/index.php";// 输出name命名空间内的APP_PATHecho \name\APP_PATH;echo'<br>';}// 命名空间外,不能编写代码// echo'<br>'; // No code may exist outside of namespace {}// 创建一个全局空间:namespace {// 全局空间内的成员不允许重复定义。// const APP_PATH;// const APP_PATH; //重复定义一个常量成员,会报错 syntax error, unexpected// 打印上述两个命名空间内的成员echo \name\APP_PATH;echo'<br>';echo \USER\APP_PATH;echo'<br>';}

过滤器函数:
filter_var()、filter_var_array()
filter_var():filter_var(var,filter,options[可选])
返回值: 返回过滤后的值,否则返回 false
filter_var_array():获取多个变量并过滤它们filter_var_array(array $data, filter)
返回值: 返回过滤后的值,否则返回 false过滤的同时会将字符转换成为我们制定的的过滤方法的类型
// 将过滤方法遍历出来:foreach (filter_list() as $filter){echo $filter . "=>" . filter_id($filter).'<br>';}

过滤外部变量:通过 http get/post 请求发送过来数据,过滤表单数据
同时验证多个外部变量filter_input_array(输入类型get/post,args规定了过滤器参数数组,键是变量名,值就是过滤器)>filter_input()
使用 get 参数来演示外部变量的获取与过滤filter_input(输入类型 get/post,变量名,filter)
<?php// 将年龄15-30岁的过滤出来,不符合的淘汰$age = '25';$min = 15;$max = 30;// 设置可选方法options$options = array("options"=>array("min_range"=>$min,"max_range"=>$max));$age = filter_var($age,257,$options); //257 对应的过滤方法是int,可在filter中查看var_dump($age);//输出结果 int(25);// 过滤的同时会将字符转换成为我们制定的的过滤方法的类型$email = '42454654@qq.com';VAR_DUMP(filter_var($email,FILTER_VALIDATE_EMAIL));echo"<hr>";if(!$age) //取反{echo 'your age is not up to our requirements';}else{echo '年龄符合要求';}ECHO '<hr>';// filter_var_array(array $data, filter)获取多个变量并过滤它们,返回值: 返回过滤后的值,否则返回falseECHO '<hr>';$a = 10;$b = '90';$arr = [$a,$b];VAR_DUMP(filter_var_array($arr,FILTER_VALIDATE_INT));/*** 过滤外部变量:通过http get/post请求发送过来数据,过滤表单数据*同时验证多个外部变量 filter_input_array(输入类型get/post,args规定了过滤器参数数组,键是变量名,值就是过滤器)* filter_input()*使用get参数来演示外部变量的获取与过滤*/// echo 'id = ' . $_GET['id'];$args = ["username" => FILTER_SANITIZE_STRING,"age" =>FILTER_VALIDATE_INT,"blog_url" =>FILTER_VALIDATE_URL,"ip"=>FILTER_VALIDATE_IP];echo '<hr>';// var_dump(filter_input_array(INPUT_GET,$args));// filter_input(输入类型get/post,变量名,filter)$options = ["options"=>["min_range"=>1]];var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));//bool(false)

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号