IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP基础2 -> 正文阅读

[PHP知识库]PHP基础2

PHP基本操作和基本语句及语法

遍历二维数组

$stu=[
    [1,2,3,4],
    [40,50,60,70]
];
for($i=0;$i<count($stu);$i++){
    for ($j=0;$j<count($stu[$i]);$j++){
        echo $stu[$i][$j].'&nbsp';
    }
    echo '<br>';
}

作用域

变量作用域

/*
 * 1.全局变量:在函数外面
 * 2.局部变量:在函数里面,默认情况下,函数内部是不会去访问函数外部的变量的
 * 3.超全局变量:可以在函数内部和函数外部访问
 */
 # 超全局变量
 /*
 * $_COOKIE
 * $_GET
 * $_POST
 * $_SESSION
 */
 $num = 10;
function fun(){
    echo $num; // Undefined variable '$num'
}
fun();
--------------------------------------------
# 函数内部默认不能访问函数外部的值
$_POST['num']=10; //将值赋值给超全局变量
function fun(){
    echo $_POST['num'].'<br>'; //获取超全局变量的值 10
}
fun();
--------------------------------------------
function fun(){
    $_GET['num']=10; # 将值赋值给超全局白变量
}
fun();
echo $_GET['num']; //打印超全局变量的值

全局变量

$num=10; //全局变量
function fun(){
    echo $GLOBALS['num'];
}
fun(); //输出全局的num
--------------------------------------------
$num=10; //全局变量
function fun(){
    global $num;
    echo $num;
}
fun(); //输出全局的num
// 这里注意,global $num也是在函数里面定义的一个变量,名字必须要和外面一样
//但是它是把函数外面的变量名的地址取到放进函数块里面的,它与GLOBALS不一样,
//当你修改num的值时,全局变量的值也改变了。

常量没有作用域

define('PI','3.14');
function fun(){
    echo PI;
}
fun(); //输出3.14
--------------------------------------------
function fun(){
    define('PI','3.14');
}
fun();
echo PI;

静态变量

# 静态变量一般指的是静态局部变量
function fun(){
    $num=10; # 普通变量没调用一次初始化一次
    $num++;
    echo $num.'<br>';
}
fun(); //11
fun(); //11
function func(){
    static $nums=10;
    $nums++;
    echo $nums.'<br>';
}
func(); //11
func(); //12
常量和静态变量的区别:
1.常量和静态变量都只初始化一次
2.常量不能改变值,静态变量可以改变值
3.常量没有作用域,静态变量有作用域

匿名函数use()

# 默认情况下,函数内部不能访问函数外部的变量,但在匿名函数中,可以通过use将外部变量引入匿名函数中
$num=10;
$fun=function () use ($num){
    echo $num;
};
$fun(); //10
在函数内部访问函数外部变量
1. 使用超全局变量
2. $GLOBALS
3. global
4. use将函数外部变量引入到匿名函数内部

包含文件

包含文件的格式

1. require:可以包含多次
2. include:包含多次
3. require_once:只包含一次
4. include_once:只包含一次
5. HTML类型的包含页面中存在PHP代码,如果包含在PHP中是可以执行的
6. 包含文件相当于把包含文件中的代码拷贝到主文件中执行,魔术常量除外,魔术常量获取的是所在文件的信息
7. 包含编译时不执行,运行时加载到内存,独立编译包含文件
require遇到错误抛出error类别的错误,并且停止执行
include遇到错误抛出warning类型的错误,并继续执行

在这里插入图片描述

./和不写./的区别

require './11.html'; //在当前目录下查找
require '11.html'; //受php配置文件中include_path配置的影响
# 可以使用set_include_path('c:\\');phpinfo();
# 使用set_include_path()函数可以设置多个路径,路径之间用分号分割
# 并且如果包含文件的目录结构比较复杂,比如:在c:\\aa\\dd\\cc\\bb中有多个文件需要包含
# 可以将包含的路径设置成include_path,这样包含就只要写文件名就可以了

错误处理

错误的级别

1. notice:提示
2. warning:警告
3. error:致命错误

错误的提示方法

方法一:显示在浏览器上
方法二:记录在日志中

与错误有关的配置

1. error_reporting=E_ALL:报告所有的错误
2. display_errors=on:将错误显示在浏览器上
3. log_errors=on:将错误记录在日志中
4. error_log=‘地址’:错误日志保存的地址
$debug=true; // 开发模式
ini_set('error_reporting',E_ALL); //所有的错误都报告
if($debug){
    ini_set('display_errors','on');//错误显示在浏览器上
    ini_set('log_errors','off'); //错误不显示在日志中
}else{
    ini_set('display_errors','on');
    ini_set('log_errors','off');
    ini_set('error_log','./err.log');
}
# 测试一:
//function fun(){
//    echo $num;
//}
//fun();
# 测试二:$debug=false;
function fun(){
    echo $num;
}
fun();

在项目开发过程中有两个模式,开发模式,运行模式
开发模式:错误显示在浏览器上,不要记录在日志中
运行模式:错误不显示在浏览器上,记录在日志中

自定义错误处理

通过trigger_error产生一个用户级别的error/warning/notice信息

$age=100;
if ($age>80):
    //trigger_error('年龄不能超过80岁'); //默认触发了notice级别的错误
    //trigger_error('年龄不能超过80岁',E_USER_NOTICE);//触发notice级别的错误
    //trigger_error('年龄不能超过80岁',E_USER_WARNING);
    trigger_error('年龄不能超过80岁',E_USER_ERROR);//错误用户error错误
endif;

定义错误处理函数

function error(){
    echo '这是一个错误处理函数';
}
set_error_handler('error');//注册错误处理函数
echo $num;
--------------------------------------------
/*
 * @parama $errno int 错误类别
 * @parma $errstr string 错误消息
 * @parma $errfile string 文件地址
 * @parma $errline int 错误行号
 */
function error($errno,$errstr,$errfile,$errline){
    switch ($errno){
        case E_NOTICE:
        case E_USER_NOTICE:
            echo '记录在日志中'.'<br>';
            break;
        case E_WARNING:
        case E_USER_WARNING:
            echo '给管理员发邮件'.'<br>';
            break;
        case E_ERROR:
        case E_USER_ERROR:
            echo '给管理员打电话'.'<br>';
            break;
    }
    echo "错误信息:{$errstr}<br>";
    echo "错误文件:{$errfile}<br>";
    echo "错误行号:{$errline}<br>";
}
set_error_handler('error');
echo $num;

文件操作

创建文件夹

# 创建文件夹【mkdir(路径,权限,是否递归创建)】
# 1.创建目录
mkdir('./aa');//创建aa文件夹
mkdir('./aa/bb');//在aa目录下创建bb文件夹,如果没有aa文件夹则会报错
mkdir('./aa/bb/cc',0777,true);//递归创建

删除文件夹

# 删除文件【rmdir()】
rmdir('./aa/bb/cc/dd');//删除dd文件夹
# 删除的文件夹必须是空的
# php没有提供递归删除

重命名文件夹

# 重命名文件夹【rename(旧名字,新名字)】
rename('./aa',';./aaa');

是否是文件夹

# 是否是文件夹
is_dir('./aa')?'是文件夹':'不是文件夹';

打开文件夹、读取文件夹、关闭文件夹

# 打开文件夹,读取文件夹,关闭文件夹
$floder=opendir('./');//打开目录
var_dump($floder);//5:resource(3, stream)
while ($f=readdir($floder)){
    if ($f=='.'||$f=='..'):
        continue;
    endif;
    echo iconv('gbk','utf-8',$f),'<br>';//将gbk编码转换为utf-8编码
}
closedir($floder);//关闭文件夹
总结:
1. opendir():返回资源类型
2. 每个文件夹都有.和..
3. iconv():用来做字符编码转换

总结:我认为这里面最重要的是错误处理,因为一旦错误处理不好,会造成很严重的后果,比如:数据库的错误信息,这些信息一旦显示在浏览器上,将有可能实现自己的所有数据库信息被盗取。还有学知识真的应该举一反三,比如知道了判断一个文件夹是否是文件夹,那同样也应该想一下判断是否是一个文件是什么函数。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:17:36  更:2021-10-20 12:18:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:32:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码