PHP零基础入门笔记

表达式:任何有值的东西就是表达式

php可以解析双引号,不可以解析单引号,双引号中引用变量可以输出引用变量的值,但是单引号不可以

1.变量和变量的销毁

unset(变量名)   //销毁变量  

变量是严格区分大小写的,在php中使用$符来定义变量
$变量名=变量值
$name $NAME $Name是不同的变量

字母或下划线开头
    后面接任何数量的字母下划线
    不可以使用数字开头
    中间不可用空格空白符

unset():
<?php
$a='abcde';
unset($a);  //销毁变量,这样就会echo为空或者报错变量不存在
echo $a;  
?>

2.双变量解释

<?php
$abc='test';  //定义了一个变量$abc里面存了值test
$$abc='小白';  //分开看,$abc被赋值给test,然后$$abc也就是$test了
echo $abc.'<br>';  
echo $$abc.'<br>';
echo $test;

?>

结果:
test
小白
小白

3.变量链接

<?php
$a=1000;
$b=&$a;   //相当于链接起来$a和$b这样,操作其中任何一个,另一个都会被重新赋值
$b=20;
echo $a;
echo $b;

?>

结果为:
20
20

4.变量类型

<?php
$a=true;
var_dump($a);
echo $a.'<br>';
print($a);

var_dump显示类型用于调试

类型有true和false是bool类型(布尔)

//var_dump用于调试,会输出详细信息,和变量类型
//echo和print用于输出变量的值,不显示类型

?>

具体类型有:
字符型(string),数字型(int),浮点数(float),布尔型(bool)

########################################################

字符型使用单引号,双引号或者定界符来包裹的
$a='zifuchuan1';
$b="zifuchuan2";
$c=<<<aaa
zifuchuan3
aaa;
其中定界符是用3个小于号然后aaa或者其他任意字符中间包裹的内容
<<<aaaxxxxxaaa 定界符+标识符开始+字符+标识符结束

#################################################################

定界符例子:
<?php
$a=1000;
$b=<<<aaa
woshizifuchuanya
aaa;
var_dump($b)

?>

结果:
string(16) "woshizifuchuanya"

#############################################################

定界符中包裹变量:

<?php
$a=1000;
$b=<<<aaa
woshizifuc{$a}huanya
aaa;
var_dump($b)

?>

结果为;
string(20) "woshizifuc1000huanya"



定义空变量
<?php
$a=null;  //大小写都可以

var_dump($a);
var_dump($b);
?>
结果:
NULL NULL
不定义变量值和等于null都会显示空

###################################################################
类型转换
$a='zifuchuan';
$b=(int)$a;    //这个类型转换和py不一样,要注意以下
var_dump($b);
echo $b

5.常量

常量是一个简单值的标示符,如其名称所暗示的,在我们php脚本中执行期间,一个常量一旦被定义,就不能改变或者取消定义,常量的作用域是全局,常量只能包含bool,int,float,string类型的数据

常量用于临时存储的容器,变量也是

定义和使用

自定义常量:

自定义常量区分大小写

define('常量名称',常量值)   //常量名称需要用单引号双引号等来包裹起来,常量的值要是字符串也要用单引号双引号包裹起来

define()函数来检查是否定义了某个变量

示例:
<?php
define('my_name','我的名字');
echo my_name;  //调用常量,看my_name的值

?>
结果为:
我的名字

规则:和变量一样,只能包含数字字母下划线,且要字母和下划线开头,不可以用数字开头
常量的名称通常是大写的,可以不大写,标准是大写的

常量和变量区别:
    常量不需要用$符,只可以用define定义

     一旦定义不可以重新定义
    <?php
    define('my_name','我的名字');
    define('my_name','新的名字');
    echo my_name;  //调用常量,看my_name的值

    ?>

    结果
    我的名字
    
    常量的值只可以是bool,int,float,string类型

预定义常量:

预定义常量就是php内核预先给我们定义好的,其中有的预定义常量是两个下划线开头的,我们又叫它为魔术常量,例如:FILE

查看php所有的预定义常量
<?php
print_r(get_defined_constants());
//个人感觉print_r和var_dump差不多,官方说var_dump用于调试,print_r显示人类可读的变量信息

?>
结果:  //太多了,所以就只复制了这些

array(1666) {
  ["E_ERROR"]=>
  int(1)
  ["E_RECOVERABLE_ERROR"]=>
  int(4096)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_STRICT"]=>
  int(2048)
  ["E_DEPRECATED"]=>
  int(8192)
  ["E_CORE_ERROR"]=>
  int(16)
  ["E_CORE_WARNING"]=>
  int(32)
  ["E_COMPILE_ERROR"]=>
  int(64)
  ["E_COMPILE_WARNING"]=>
  int(128)
  ["E_USER_ERROR"]=>
  int(256)
  ["E_USER_WARNING"]=>
  int(512)
  ["E_USER_NOTICE"]=>
  int(1024)
  ["E_USER_DEPRECATED"]=>
  int(16384)
  ["E_ALL"]=>
  int(32767)

常用的预定义常量

都定义常量不区分大小写的

__FILE__:       //输出当前文件的位置
<?php
echo __FILE__;
print_r(__FILE__);
var_dump(__FILE__);
print(__FILE__);

?>

##################################################

__LINE__:  //当前文件中的行号
<?php
echo __LINE__;   //输出当前__LINE__所在的行
?>

####################################################

运算符

说白了就是一些符号,认识 php常用的一些符号,这些符号可以将变量或者数据,指定某种运算

运算符对一个或者多个操作数(变量或者数值)执行某种运算的符号,也称为操作符
举例:
    !true
        !是运算符,true是操作数
    $a+$b
        +是运算符,$a和$b是操作数
    true ? 1:0
        ?和:是运算符,true,1,0是操作数
根据操作的个数分为:一元运算符,二元运算符,三元运算符

一些情况下,两边加上空格会更美观
算数运算符
Matlab 复制代码
+-*/%都是算数运算符
+的例子:
     <?php
    $a=1;
    $b=2;
    $c=$a+$b;
    print($c);

    ?>
结果为:
3
######################################、
-的例子:
<?php
$a=1;
$b=2;
$c=$a-$b;
print($c);

?>
结果:
-1
########################################
取反:
<?php
$a=9;
echo -$a;
echo '<br>';
echo $a;
?>

结果:
-9
9
注意:说明取反的并没有影响到它本身
#########################################
*的例子:
<?php
$a=9;
$b=3;
$c=$a*$b;
echo $c;
?>
结果为:
27
###########################################
/的例子:
<?php
$a=9;
$b=3;
$c=$a/$b;
echo $c;
?>
结果为:
3
###########################################
%的例子:
<?php
$a=9;
$b=3;
$c=$a%$b;
$d=$b%2;
echo $c;
echo '<br>';
echo $d;
?>
结果为:
0
1
可以计算是奇数还是偶数
###########################################
++的例子:
<?php
$a=10;
++$a;
echo $a;
?>
结果
11
前++和后++的区别

前++   前自增,不返回变量的值,直接自增 
<?php
$a=10;
echo ++$a;  //先返回$a,再a++,如同echo $a;echo $a++
echo '<br>';
echo $a;
?>
结果为:
11
11

后++  后自增,先返回变量的值,再自增
<?php
$a=10;
echo $a++;  //先返回$a,再a++,如同echo $a;echo $a++
echo '<br>';
echo $a;
?>
结果为
10
11
#################################################
--的例子
<?php
$a=10;
$a--;//$a=$a-1
--$a;//$a=$a-1
echo $a; 
?>

前--   前自减,直接自减
<?php
$a=10;
echo --$a;  //先返回变量的值,然后自减,如同:echo $a; echo $a--
echo '<br>';
echo $a;
?>
结果为:
9
9

后--    后自减,先返回变量的值,然后再执行自减
<?php
$a=10;
echo $a--;  //先返回变量的值,然后自减,如同:echo $a; echo $a--
echo '<br>';
echo $a;
?>
结果为:
10
9

注意:不管是前++前--还是后++后--前后值都要是变量,不可以是4--或者4++或--4或++4
自增和自减是对于变量而言的
字符串运算符

字符串运算符只有一个就是.连接运算符

Matlab 复制代码
连接运算符为.

<?php
$a='字符串1';
$b='测试连接';
echo $a.$b;

?>
结果为;
字符串1测试连接
##########################
赋值运算符;
把右边的值,赋值给左边的变量
赋值运算符
Matlab 复制代码
二元运算符
    左边的操作数必须是变量,右边可以是一个表达式,也可以是一个值,一个变量等等

作用:将右边表达式的值赋给左边变量

=
+=
-=
*=
/+
%=
.=
###########################
示例1-
<?php
$a=1;
$b=2;
$a+=$b;//就是$a=$a=$b
echo $a;

?>
结果为;
3
###########################
示例2-
<?php
$a=1;
$b=2;
$a-=$b;//就是$a=$a=$b
echo $a;

?>
结果为;
-1
###########################
往后的上同
比较运算符

对操作数(按照比较 运算符的要求,规则)进行比较

如果比较出的结果满足比较运算符的要求那么结果就是true(真,成立,满足),否则就是false(假,不成立,不满足)

php的若比较:运算符==

运算符为==,比较值是否相等,相等为true,否则为false
这里使用echo x,x为真,为true的话就返回1了,否则返回为空
使用var_dump可以看到详细信息,用于调试
<?php
$a=1;
$b=1;
echo $a==$b;  //输出1
echo '<br>';
print_r($a==$b);//这里也输出1
echo '<br>';
var_dump($a==$b);//这里输出类型

?>
结果为:
1
1
bool(true)

使用var_dump来输出bool更详细

两个==是若比较
<?php
$a=1;
$b='1';
var_dump($a==$b);
?>
结果为:
bool(true)
这里一个是字符串一个是整数,比较结果为真,说明是弱比较,不比较类型

若比较会将另一个类型转换为相同的类型,比较
var_dump((int)$b);//使用int转换来看一下,这个就是转换后的
结果为:
int(1)   若比较就是这么转换的

php的强比较:运算符===

===是强比较,值要想等,类型也要相等
<?php
$a=1;
$b='1';
$c=1;
var_dump($a===$b);  //因为是强类型,所以返回为false。类型不等
echo '<br>';
var_dump($a=$c);//类型和值都相等,返回为true
?>

结果为:
bool(false)
int(1)

不相等运算符:!=

如果两两边的操作数的值不相等那么就是true,相等为false
<?php
$a=1;
$b='1';
$c=2;
var_dump($a!=$b); 
echo '<br>';
var_dump($a!=$c);

?>
结果为:
bool(false)
bool(true)
也不比较类型

不等运算符:运算符<>

这个同上,一模一样

强比较不等于:!==

这个属于强类型比较不相等
<?php
$a=1;
$b='1';
$c=2;
var_dump($a!==$b);   //强比较,类型不同, 返回为 true
echo '<br>';
var_dump($a!==$c);

?>
结果为
bool(true)
bool(true)

其他运算符:<、>、<=、>=

这些比较简单,不做演示了
逻辑运算符

逻辑运算符用于执行布尔逻辑操作,它们在编程和数学中被用来组合或修改条件表达式的真假值。逻辑运算符通常用于构建更复杂的条件语句,以控制程序的流程。以下是三种基本的逻辑运算符

php中有值的都是表达式,对表达式尽心逻辑运算,运算结果无非就是true,false

要求:

参与运算符的表达式的值必须是bool类型的值,如果不是bool类型的值,会被转换为ibool类的值

逻辑与:&&或and

<?php
$a=true;
$b=true;
var_dump($a and $b);
echo '<br>';
var_dump($a && $b);
$c=false;
echo '<br>';
var_dump($a and $c);
?>

结果为;
bool(true)
bool(true)
bool(false)

逻辑与需要左右两边的表达式的值都为true的时候,运算结果就是true,否则只要其中任意一个为false,运算的结果为:false

变量类型简介:

以下类型为false,其他的值都是被认为是true
1.布尔值false
2.0
3.浮点型0.0
4.空白字符串和字符串0
5.没有成员的数组
6.NULL

逻辑或:or或者||

左右两边表达式的值有一个值为true,结果就是true

<?php
$a=false;
$b=true;
var_dump($a || $b);

?>

结果为:
bool(true)

逻辑异或:xor

左右两边的表达式的值不一样的时候,结果就是true, 否则为false

<?php
$a=false;
$b=true;
var_dump($a xor $b);
?>
结果为:
bool(true)



<?php
$a='asdgasdfgasd';   //它的布尔类型为true
$b='tasdgasgar5213e';  //它的布尔类型为true
var_dump($a xor $b);
?>
结果为:
bool(false)

两个值得布尔类型都是true,所以结果为false

逻辑非:!

将原来表达式得值否定掉,原来是true,转换为false

原来表达式为false,转换为true

<?php
$a=null; //这个为false
$b=false;  //这个也是false
var_dump(!$a);  //转换为了true
echo '<br>';
var_dump(!$b);  //转换为了true
?>
结果为;
bool(true) 
bool(true)
其他运算符

.三元运算符:

格式:表达式1 ? 表达式2 : 表达式3;

<?php
$a=true ? 10:20;  //表达式1得值是true,所以返回表达式2,返回10,
echo $a;
?>
结果为:
10

<?php
$a=false ? 10:20; //表达式1为false,所以表达式2的值为20
echo $a;
?>
结果为:
20

反引号:··

可以把系统的命令放在里面执行,

<?php
$a=`dir`;   //执行了windows的命令,执行linux命令也可以
echo $a;

?>

结果如下:

 ������ D �еľ��� ������
 ��������� D8CC-AA56

 D:\phpstudy_pro\WWW ��Ŀ¼

2024/12/31  20:23    <DIR>          .
2024/11/04  16:40    <DIR>          ..
2024/12/01  19:58            24,614 hacker1.png
2024/12/31  20:10    <DIR>          heart-1
2024/12/31  20:11    <DIR>          heart-2
2024/12/31  14:35               246 index.html
2025/01/02  14:57                38 index.php
2024/12/31  20:22            13,072 ruyi.html
2024/12/18  18:30    <DIR>          upload
2024/12/31  19:40    <DIR>          xy
               4 ���ļ�         37,970 �ֽ�
               6 ��Ŀ¼ 223,594,254,336 �����ֽ�

屏蔽错误符号:@

抑制错误信息提示

<?php
echo @$a;

?>


结果为:
空白

运算符的优先级:

概念:通过优先级来定义先算哪个运算

左代表从左往右算,右代表从右往左算

1.[无]递增递减
2.[右]逻辑非
3.[左]乘,除,取余
4.[左]加,减,字符串
5.[无]包含大于号小于号的运算符
6.[无]不包含大于号或小于号的

平方根和上下取整

<?php
$var=48;
echo sqrt($var);  //求算数平方根
echo '<br>';
$var1=floor(6.52);  //向下取整
$var2=ceil(6.52);  //向上取整
echo $var1;
echo '<br>';
echo $var2;
?>

结果为:
6.9282032302755
6
7
数字格式化:
函数number_format()
number_format(number,decimals,'decimalsep','thousandsep')
函数名        格式化数 小数位数  小数分隔符     千分位分隔符


<?php
$var=52012.5555;
$num=number_format($var,4,'*','#');
echo $num;
?>
结果为:

52#012*5555

字符串操作:

对字符串进行反转
<?php
$var=123456;
echo strrev($var);
?>

结果为:
654321

字符串大小写:
<?php
$a='windsor';
$b='duck of cambridge';
$c='prince';
$d='WWWWLSADFSDF';
echo ucfirst($a),' ',ucwords($b),' ',strtoupper($c),' ',strtolower($d);
     //首字母大写    每个单词首字母大写   全部大写            全部小写
?>

ucrfirst()  //首字母大写
ucwords()  //每个单词首字母大写
strtoupper()  //全部大写
strtolower()  //全部小写
结果如下:
Windsor Duck Of Cambridge PRINCE wwwwlsadfsdf
字符串截取:
<?php
$var='hello, welcome to the world of php!';
echo substr($var,0,5),' ',substr($var,22,5),substr($var,-1);
//截取索引0-5,然后空格22往后推迟5,然后拼接-1,-1就是最后一个索引
?>

结果为:
hello world!
文本格式化:

文本格式化函数之printf()

使用printf进行格式化操作
<?php
$nboys=3;
$ngirls=5;
printf("%s boys and %s girls",$nboys,$ngirls);
//占位符占$nboys和$ngirls
?>

结果为:
3 boys and 5 girls

使用echo进行调用变量操作;
<?php
$nboys=3;
$ngirls=5;
printf("%s boys and %s girls",$nboys,$ngirls);
//占位符占$nboys和$ngirls
echo '<br>',"$nboys boys and $ngirls girls";  //这里要用双引号,否则php不解析
?>
结果为:
3 boys and 5 girls
文本格式化之sprintf():
sprintf('format',$firstvar,$secondvar,$lastvar)
函数名    格式     替换变量  替换变量2   替换变量n


用于把格式化字符写入到一个变量中

示例:
<?php
$a='字符串';
$b=5;
$c=sprintf("%s boys and %u girls",$a,$b);  //这里是把变量a和b替换占位然后赋值到变量c
//占位符占$nboys和$ngirls
echo $c;
?>

结果为:
字符串 boys and 5 girls
抱团效应-数组:

数字索引数组

数值数组:

<?php
$user[1]='jim Green';
$user[2]='18';
$user[3]='male';
echo "<pre>";var_dump($user);echo '</pre>';  //pre标签定义被格式化的文本
?>

结果为:
array(3) {
  [1]=>
  string(9) "jim Green"
  [2]=>
  string(2) "18"
  [3]=>
  string(4) "male"
}

普通数组
<?php
$user=array("Volvo",'bwm','toyota');
echo $user[0];  //输出$user的索引0的值
?>

结果为:
Volvo
字符索引数组:
<?php
$name['name']='zhangsan';
$name['age']='18';
$name['zhushi']='注释';
echo '<pre>';var_dump($name);echo "</pre>";

?>

结果为:
array(3) {
  ["name"]=>
  string(8) "zhangsan"
  ["age"]=>
  string(2) "18"
  ["zhushi"]=>
  string(6) "注释"
}

只提取name的索引值
<?php
$name['name']='zhangsan';
$name['age']='18';
$name['zhushi']='注释';
echo '<pre>';var_dump($name['name']);echo "</pre>";

?>

结果为:
string(8) "zhangsan"
使用数组直接赋值,字符串索引:
<?php
$name=array('suoyin'=>'suoyinzhi',
            'age'=>'18',
            'name'=>'mingzi'
);
echo '<pre>';var_dump($name);echo '</pre>';

?>

结果为:
array(3) {
  ["suoyin"]=>
  string(9) "suoyinzhi"
  ["age"]=>
  string(2) "18"
  ["name"]=>
  string(6) "mingzi"
}
连续元素数组:
<?php
$range=range(2001,2012);
echo '<pre>';var_dump($range);echo '</pre>';

?>

定义起始值和结束值得所有索引
例如2001-2012生成了12个元素
结果为:
array(12) {
  [0]=>
  int(2001)
  [1]=>
  int(2002)
  [2]=>
  int(2003)
  [3]=>
  int(2004)
  [4]=>
  int(2005)
  [5]=>
  int(2006)
  [6]=>
  int(2007)
  [7]=>
  int(2008)
  [8]=>
  int(2009)
  [9]=>
  int(2010)
  [10]=>
  int(2011)
  [11]=>
  int(2012)
}
从a-z得所有数组
<?php
$range=range('a','z');
echo '<pre>';var_dump($range);echo '</pre>';

?>

结果为:
array(26) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
  [4]=>
  string(1) "e"
  [5]=>
  string(1) "f"
  [6]=>
  string(1) "g"
  [7]=>
  string(1) "h"
  [8]=>
  string(1) "i"
  [9]=>
  string(1) "j"
  [10]=>
  string(1) "k"
  [11]=>
  string(1) "l"
  [12]=>
  string(1) "m"
  [13]=>
  string(1) "n"
  [14]=>
  string(1) "o"
  [15]=>
  string(1) "p"
  [16]=>
  string(1) "q"
  [17]=>
  string(1) "r"
  [18]=>
  string(1) "s"
  [19]=>
  string(1) "t"
  [20]=>
  string(1) "u"
  [21]=>
  string(1) "v"
  [22]=>
  string(1) "w"
  [23]=>
  string(1) "x"
  [24]=>
  string(1) "y"
  [25]=>
  string(1) "z"
}
删除和修改数组的元素:

示例代码如下:

<?php
$userinfo['name']='Jim Green';
$userinfo['age']=18;
$userinfo['Gender']='Male';
echo '<pre>';var_dump($userinfo);echo '</pre>';
$userinfo['name']='xin yuansu';  //这里修改了元素的值
echo '<pre>';var_dump($userinfo);echo '</pre>'; 
unset($userinfo['name']);  //这里销毁了索引name和它的值
echo '<pre>';var_dump($userinfo);echo '</pre>';
unset($userinfo);  //这里销毁了变量userinfo
echo '<pre>';var_dump($userinfo);  //编辑器里这里已经发红了
?>

结果为:
array(3) {
  ["name"]=>
  string(9) "Jim Green"
  ["age"]=>
  int(18)
  ["Gender"]=>
  string(4) "Male"
}
array(3) {
  ["name"]=>
  string(10) "xin yuansu"
  ["age"]=>
  int(18)
  ["Gender"]=>
  string(4) "Male"
}
array(2) {
  ["age"]=>
  int(18)
  ["Gender"]=>
  string(4) "Male"
}
NULL

条件与循环:

常用的判断函数:
isset()  //判断指定对象是否已定义,若含有多个对象,则其中一个对象未定义,系统也会返回false,也就是判断对象是否存在并且非null

is_int()  //判断指定对象是否为整形变量

is_array()  //判断指定对象是否为数组

is_float()  //判断指定对象是否为浮点型变量

is_string()  //判断指定对象是否为字符串型变量

is_numeric()  //判断指定对象是否为数字或数字型字符串

is_numm()  //判断对象的值是否为0
正则表达式基础:
特殊字符            含义            例子            匹配字符            不匹配字符
^                 以....开始        ^e              eing                asdfasdg
$                 以....结束        m$              asdfm               llen
.                 任意字符          .              up.great             A.1
?                 前一位字符可选    ger?m            germ/gem            gm
()                必含字符         g(er)m           germ/ger            gem/gel
[^]               不可选字符       g[^er]m          fym/gum             geam/rml
[]               可选字符|只选一    g[er]m          gem/grm             germ/gel
-                前后所有字符      ^[A-F]123        A123/C123           H123/I123
+                前置项目多选      Shop[1-3]+    Shop1/Shop123/Shop321  Shop456
*               前置项目可重复     ge*m             gm/geeem            germ
{n}            前置项目必重复次数   ge{3}a           geeea               gea/geea
{n1,n2}      前置项目重复次数范围   ge{2,3}a        geea/geeea          gea
\         后置项目不含特殊含义(转义)   g\*              g*m                 ggm,gem
(|)          可选字符              nishi(nan|nv)    nishi(nan)          nishi1234
                                                    nishi(nv)        
简单条件句if...else...
<?php
$a='asdf';
$value1=1;
$value2='asdf';
switch($a){   //判断$a=value1还是value2,等于value1则返回(你好),等于value2返回(第二个)
    case $value1:
        echo "你好";
        break;
    case $value2:
        printf('第二个');
    default:
        printf('都不满足');
}
?>

结果为:
第二个

判断时间:

<?php
$hour=date('H'); //date是获取时间,H是小时,我现在是16点,所以H是16,$hour=16
if ($hour>12){
    echo "12点已经过去了,现在是$hour";
}else{
    echo "现在还不到12点呢";
}
?>

结果为:
12点已经过去了,现在是17

检查是否为整形和是否为数字字符型:

数字型
<?php
$var=10;
if(is_int($var)){
    echo '是一个整数';
}else{
    echo '不是一个整数';
}
?>

结果为:
是一个整数

判断数字字符型
<?php
$var='10';
if(is_numeric($var)){
    echo '是一个整数';
}else{
    echo '不是一个整数';
}
?>

结果为:
是一个整数

条件判断和正则表达;

<?php
$reg="^e";
$str='ehello';
if(preg_match($reg,$str)){
    echo '匹配到了';
}else{
    echo '没有匹配到';
}
?>

结果为:
Warning: preg_match(): No ending delimiter '^' found in D:\phpstudy_pro\WWW\index.php on line 4
没有匹配到

这里第4行语法错误,改为如下使用//来表示匹配的开始和结束
<?php
$reg="/^e/";
$str='ehello';
if(preg_match($reg,$str)){
    echo '匹配到了';
}else{
    echo '没有匹配到';
}
?>
结果为:
匹配到了


另一个
<?php
$reg="/m$/";
$str='ehelm';  //如果这里不是m结尾是ehelmh就不会执行if语句了
if(preg_match($reg,$str)){
    echo '以m结尾了,';
}else{
    echo '没有匹配到';
}
?>

结果为:
以m结尾了,

总结:

<?php
$name='shanghai';
switch($name){
    case 'beijing';
        echo '北京';
        break;
    case 'tianjing':
        echo '天津';
        break;
    case 'shanghai':
        echo '上海';
        break;
    case 'chongqing':
        echo '重庆';
        break;
    default:
        echo '错误不存在';
    break;
}
?>
结果为:
上海

自定义函数:

文字加粗函数:
<?php
    function bold($string){
        echo '<b>',$string,'</b>';   //函数中<b>作用就是加粗
    }
    bold('hello word');
?>

结果为:
hello word  //这里复制过来看不出来了,实际是加粗了的
函数与返回值:
<?php
    function bold($a,$b){
        return $a/$b;
    }
$c=bold(6,2);
var_dump($c);
?>

结果为:
int(3)
静态变量:
<?php
function x(){
    static $a=5;  //第一次调用返回15,第二次返回45,因为第一次调用后$a的值就是15了
    $a=$a*3;
    return $a;
}
$result1=x();   
$result2=x();
var_dump($result1);
var_dump($result2);

?>
结果为:
int(15) int(45)
函数中引用全局变量:
<?php
function double($var){
    $var=$var*2;
    return $var;
}
var_dump(double(6));
?>
结果为:
int(12)


<?php
function double(&$var){   //&的作用是声明为全局变量,不再是局部变量了
    $var=$var*4;
}
$var=10;  //函数中的参数是全局变量了,这里给他值为10
double($var);  //调用函数,使得$var*4
var_dump($var)  //查看调用函数后$var的值
?>

结果为:
int(40)

php的web编程基础:

cookies技术:用于在用户浏览网页的时候,把用户需要的某些信息缓存到用户的浏览器上,提高用户的体验,

session技术:使用php编写网站的时候,可以通过session来将相关会话信息存放在服务器上

GET方法:在URL中以明文的形式呈现,是不加密的

POST方法:在URL中以密文的形式,是加密的

form提交表单交互:
#####################index.html#################
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>from表单提交数据
    </title>
</head>
<body>  
    <!-- action=index.php是表单内容提交到index.php处理 -->
    <form action="index.php" method="get" name="search-from">
    <div class="ui action input">
        <!-- 定义一个input输入框,里面有一个值为查询 -->
        <input type="text" name="keyword">
       <input type="submit" name="提交">
    </div>
    </form>
</body>
</html>

############################index.php#####################
<?php
$keyword=$_GET['keyword'];
if(preg_match('/^[a-e]/',$keyword)){
    echo '你好呀';
}else{
    echo '错误输入,请重试';
}
?>

验证结果:

提交后:

输入ming提交后

使用cookie缓存数据:

cookie数据不可靠,容易被用户删除

定义cookie的源码,然后超链接到cookie.php,cookie.php是存储cookie数据的
<?php
setcookie('name','cookie_value');
echo '<a href="./cookie.php">点击查看cookie</a>';
?>  //这个文件是index.php

定义cookie来接收index.php的数据,然后存放在cookie.php中,访问cookie.php后会输出接收到的数据
<?php
echo $_COOKIE['name'];
?> //这个文件是cookie.php文件

**注销本地用户cookie文件:**在显示cookie的php文件中重定义一个setcookie就可以清cookie了

index.php

<?php
setcookie('name','cookieshiwo');
echo '<a href="./cookie.php">请点击</a>'
?>
结果为:
请点击

cookie.php
<?php
echo $_COOKIE['name'];
setcookie('name');
echo '<a href="./cookie2.php">请点击</a>'

?>
结果为:
点击后如下:
cookieshiwo请点击

出现了cookie,然后再次点击跳转到了cookie2.php,cookie被清空了

cookie2.php的源代码
<?php
echo $_COOKIE['name'];

?>
使用session保障数据安全:
index.php如下
<?php
session_start();  //只有在使用了session_start才可以只用$_SESSION变量
$_SESSION['Name']='john';
echo "<a href='session.php'>submit</a>"
?>
结果为:
submit

点击后如下
john

sessioin.php的源码如下:
<?php
session_start();
echo $_SESSION['Name'];
?>

销毁session:

index.php
<?php
session_start();  //只有在使用了session_start才可以只用$_SESSION变量
$_SESSION['Name']='john';
echo "<a href='session.php'>submit</a>"
?>
结果为:
submit

session.php
<?php
session_start();
echo $_SESSION['Name'];
session_destroy();  //销毁session链接
echo '<br><a href="./session2.php">点击</a>';
?>
结果为:
john
点击

session2.php
<?php
session_start();
echo $_SESSION['Name'];
?>
结果为:
空啥也没有

获取会话的ID:

数据安全性是通过sessionid来保护的,上面的代码 插入session_id来测试

使用表单上传文件:

index.html的 前端代码如下:

index.html的前端页面代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>php的文件上传</title>
</head>
<body>
    <!-- enctype是用来定义内容如何编码的,这个属性也只可以用在post方法中 -->
    <form action="index.php" method="post" enctype="multipart/form-data">  
        <input type="file" name="uploaded_file">
        <!-- buuton是定义可点击按钮,里面可以放置标签,是input做不到的 -->
        <button type="submit">上传</button>  
    </form>
</body>
</html>

运行后如下:

创建一个index.php来处理index.html提交过来的请求数据

以下代码是获取一些信息,当提交上传的内容,会指定index.php的代码,获取文件的基本信息和保存的路径
<?php
echo "File name:",$_FILES['uploaded_file']['name'];  //获取文件名字
echo "File size:",$_FILES['uploaded_file']['size'];  //获取文件大小
echo "File type:",$_FILES['uploaded_file']['type'];  //获取文件类型
echo "File tmp_name:",$_FILES['uploaded_file']['tmp_name'];   //获取缓存路径

?>
结果为:
File name:HTML.png
File size:27634
File type:image/png
File tmp_name:C:\Windows\phpD40D.tmp

27634是字节大小

判断类型,存储到指定文件夹

我们通过$FILE['uploaded_file']['type']看到了图片的文件类型,是image,那么我们可以使用if语句来判断上传的是否是图片
代码如下:
<?php
echo "File name:",$_FILES['uploaded_file']['name'],'<br>';  //获取文件名字
echo "File size:",$_FILES['uploaded_file']['size'],'<br>';  //获取文件大小
echo "File type:",$_FILES['uploaded_file']['type'],'<br>';  //获取文件类型
echo "File tmp_name:",$_FILES['uploaded_file']['tmp_name'],'<br>';   //获取缓存路径
if(preg_match('/image/',$_FILES['uploaded_file']['type'])){
    echo '这是一个图片';
}else{
    echo '这不是一个图片';
}
?>
结果如下:
File name:hacker2.png
File size:108699
File type:image/png
File tmp_name:C:\Windows\php6C7C.tmp
这是一个图片

如果不是图片结果如下:
File name:2.py
File size:0
File type:text/plain
File tmp_name:C:\Windows\php20BA.tmp
这不是一个图片

临时文件移动:

index.html和上一个一样,php文件为:

<?php
echo "File name:",$_FILES['uploaded_file']['name'],'<br>';  //获取文件名字
echo "File size:",$_FILES['uploaded_file']['size'],'<br>';  //获取文件大小
echo "File type:",$_FILES['uploaded_file']['type'],'<br>';  //获取文件类型
echo "File tmp_name:",$_FILES['uploaded_file']['tmp_name'],'<br>';   //获取缓存路径

$destination=dirname(__FILE__).'\upload\\'.$_FILES['uploaded_file']['name'];  //定义要保存的路径,$_FILES...是文件名字

if(preg_match('/image/',$_FILES['uploaded_file']['type'])){
    echo '这是一个图片';
    move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$destination);  //移动上传到缓存目录下的文件到指定目录下
}else{
    echo '这不是一个图片';
}
echo $destination;
?>

第七行用了两个反斜杠,因为用一个反斜杠是转义的意思,所以要用两个

这来报错了,是因为忘记创建upload文件夹了,需要在同index.php文件下,创建一个upload文件夹

正常回显为:

upload目录下为:

数据的存取:

使用文本文件存取数据
fopen()函数支持的文本文件打开方式:
模式        打开方式        说明
r            只读           如果指定的文件不存在, 系统会返回一条错误提示
r+           读写           如果指定文件不存在,系统会返回一条错误提示
w            只写           如果指定文件不存在,系统会尝试创建该文件,
                            如果文件存在,系统会尝试覆盖该文件
w+           读写           如果指定的文件不存在,系统会尝试创建该文件
                            如果文件存在,系统会尝试覆盖该文件
a            追加           如果指定的文件不存在,系统会尝试创建该文件
                            如果指定的文件存在,系统会尝试在此文件末尾追加数据
a+           读并追加       如果指定的文件不存在,系统会尝试创建该文件
                           如果指定的文件存在,系统会尝试再次文件末尾追加数据 

例如使用w来写入内容,创建文件

<?php
$fh=fopen('file.php','w');  //创建文件
?>

查看目录是否创建成功

条件判断编辑文件-判断文件是否存在:

file_exists()函数用来检查文件或目录是否存在,确保在尝试读取写入或处理文件之前,该文件确实存在于服务器上

<?php
// $fh=fopen('file.php','w');  //创建文件
if(file_exists('file.php')){
    fopen('file.php','r');
    echo '文件存在!';
}else{
    echo '文件不存在';
}
?>

结果:
文件存在!
判断目录是否存在:
<?php
if(is_dir('wenjianjia')){      //判断'wenjianjia'这个文件是否存在,存在返回false,否则true
    echo '文件夹目录存在于当前目录';
}else{
    echo '文件夹不存在当前目录';
}
?>

结果为:
文件夹不存在当前目录
写入文件内容:
<?php
$fwjj='upload';
$fwj='file.txt';
$path=$fwjj.'/'.$fwj;

$append='我是新写入的内容';

if(is_dir($fwjj)){  //判断文件夹是否存在
    if(file_exists($path)){  //判断文件是否存在
        $a=fopen($path,'a');
        fwrite($a,$append);  //写入数据
        fclose($a);
    }else{
        echo '文件不存在';
    }
}else{
    echo '文件夹不存在';
}
?>

浏览器不会输出内容,但是会执行操作,写入内容到file.txt中

结果如下:

文件的读取:
<?php
$fwjj='upload';
$fwj='file.txt';
$path=$fwjj.'/'.$fwj;

$append='我是新写入的内容';

if(is_dir($fwjj)){
    if(file_exists($path)){
        $a=fopen($path,'r');
        while (!feof($a)){  //!feof()检查文件指针是否到达文件末尾,文件没有到达末尾则返回true,因为有一个!字符
                echo fgets($a),'<br>';  //fget()函数用于从文件指针中读取数据
        }
    }else{
        echo '文件不存在';
    }
}else{
    echo '文件夹不存在';
}
?>

结果如下:

读取CSV文件:
<?php
$i=0;
if(file_exists('upload/text.csv')){
    $fh=fopen('upload/text.csv','r');
    while(!feof($fh)){  //文件指针指到不到末尾就继续循环读取
        //返回是一个数组,所以要用索引来分离出来
        $rline=fgetcsv($fh,1000,'\t');  //\t是分隔符   
        $fluser=$rline[0];
        $fldata=$rline[1];
        $flpinglun=$rline[2];
        $i++; //判断有多少记录,有多少行
    } 
}
?>

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] )
$handle:必需。这是由 fopen() 打开的文件指针资源。
$length:可选。指定最长的行长度。如果省略,则默认没有限制。
$delimiter:可选。设置字段之间的分隔符,默认是逗号 ,。
$enclosure:可选。设置字段的包裹字符,默认是双引号 "。
$escape:可选。设置转义字符,默认是反斜杠 \。

php与操作系统

管理文件:

使用文件夹来管理文件是一件很有逻辑的事情

常见的文件管理函数:

ls_file('stuff.txt'):判断指定的对象是否为一个文件,而不是文件夹或其它特殊格式的文件 true|false

ls_dir('stuff.txt'):判断指定对象是否为一个文件夹,true|false

ls_executable('stuff.txt'):判断指定对象是否为一个可执行文件 true|false

ls_writable('stuff.txt'):判断指定对象是否可写,true|false

ls_readable('stuff.txt'):判断指定对象是否可读,true|false

fileatime('stuff.txt'):返回最近一次访问指定文件的时间,UNIX时间戳|false

filectime('stuff.txt'):返回创建该文件的时间,    UNIX时间戳|false

filemtime('stuff.txt'):返回最近一次修改文件的时间,UNIX时间戳|false

filegroup('stuff.txt'):返回指定文件所属组的ID,代表文件组ID的整数|false

fileowner('stuff.txt'):返回指定文件的所有者ID   代表文件所有者ID的整数|false

filesize('stuff.txt'):返回指定文件的大小,单位为字节 代表文件大小的整数|false

filetype('stuff.txt'):返回指定文件的类型,代表文件类型的字符串|false

basename('/dir/stuff.txt'):返回指定路径中的文件名   输出:stuff.txt

dirname('/dir/stuff.txt'):返回指定路径中的路径,输出:/dir
基于对象的编程:

对象是基于一个类的实例化,基于对象和基于过程的编程例子如下

基于过程的编程例子;
<?php
$a=4;
$b=5;
echo "a+b=",$a+$b,'<br>';
echo "a-b=",$a-$b,'<br>';
echo "a*b=",$a*$b,'<br>';
echo "a/b=",$a/$b,'<br>';
?>

结果为:
a+b=9
a-b=-1
a*b=20
a/b=0.8

基于对象的编程
其实就是用类和方法来做的
index.php代码如下
<?php
class calc{
    private $a;
    private $b;
    
    function init($a,$b){
        $this->a=$a;  //this->a中的a是类中的私有属性a
        $this->b=$b;
    }
    function arr(){
        return array($this->a,$this->b);
    }
    function jia(){
        return $this->a+$this->b;
    }
    function jian(){
        return $this->a-$this->b;
    }
    function cheng(){
        return $this->a*$this->b;
    }
    function chu(){
        return $this->a/$this->b;

    }
        
    }


?>

调用函数代码xxx.php如下:
<?php
require_once('index.php');  //包含index.php文件,只包含一次
$a=new calc();
// echo $a->jia(4,5);  //错误示例,jia这个函数方法没有定义接收参数,我们要从入口init来传参,然后调用要用的函数
//入口函数init中的this->是接收a和b放入到init的参数中
$a->init(4,5);
echo "a+b=",$a->jia(),'<br>';
echo "a-b=",$a->jian(),'<br>';
echo "a*b=",$a->cheng(),'<br>';
echo "a/b=",$a->chu(),'<br>';

?>
结果为:
a+b=9
a-b=-1
a*b=20
a/b=0.8

关于面向对象的编程,会涉及到一些术语:

如下也是概念

        属性:在类中定义的,是用来存放一些信息的变量。

        方法:在类中定义的,用来执行某些操作的函数。

        封装:将某脚本方法或使用该脚本的方法操纵的数据绑定在一起,相当于属性和方法封装成一个类

        多态:对象的状态十多变的,一个对象相对于基于同一类的另一个对象来说,方法是相同的,但是状态时不同的

        子类:子类可以有用父类的所有方法,同时也可以用于不同于父类的方法

        继承:子类继承父类

       实例:就是一个类的实例化

对象编程的例子:

<?php
class lei{
    private $a=array();
    function __get($b){   
        return $this->a[$b];   //可以看出是通过传入的$b的值来找数组中索引的值

    }   
    function __set($b,$value){
        $this->a[$b]=$value;  //传入函数的参数存在于数组a,就给重新赋值,赋值为传入函数的第2个参数
    }
    function __isset($b){
        return isset($this->a[$b]);  //通过isset函数来检查是否存在并且非null

    }

}
$instance=new lei();
//下两行代码触发了set方法,对数组进行了赋值操作
$instance->firstname='john'; //给私有属性的数组a放入key和value,key为firstname,value为john
$instance->lastname='tom';   // 调用 __set('firstname', 'John')
//这个echo语句中的?和:是三元运算符,如果22行返回true,运行23行的表达式返回值,如果22行为false,运行24行的表达式,返回值
echo $instance->__isset('lastname') ?   //判断firstname这个key是否存在于类中的a数组中,存在执行23行的表达式,返回值
            $instance->__get('lastname')   //这个函数是获取firstname的值
            :'找不到这个数组key';


?>
__get:在访问不存在或不可访问的属性时自动调用
__set:设置属性值时,自动调用,写入一个未定义或不可以访问的属性,自动调用
__isset:对未定义或不可以访问的属性使用isset或empty时调用


结果为:
john

判断是否是基于某个类和类是否存在实例,结合上一个实例使用看效果

if(class_exists('lei')){   //判断是否是一个类
    echo is_a($instance,'lei')?  //三元运算,判断对象是不是基于lei这个类的
        '是基于这个类的'   //这个相当于if
        :'不是基于这个类的';  //这个相当于else
}

结果为:
tom是基于这个类的

常见开源php应用程序

wordpress是当今最受欢迎的基于php的博客系统,也是一种内容管理系统,用于组织促进共同内容创造的系统

Drupal是php语言编写的开源内容管理框架,全球最强大的CMS系统,开源系统,安全性搞

相关推荐
吾当每日三饮五升1 小时前
C++单例模式跨DLL调用问题梳理
开发语言·c++·单例模式
猫武士水星2 小时前
C++ scanf
开发语言·c++
BinaryBardC2 小时前
Bash语言的数据类型
开发语言·后端·golang
Lang_xi_2 小时前
Bash Shell的操作环境
linux·开发语言·bash
Pandaconda2 小时前
【Golang 面试题】每日 3 题(二十一)
开发语言·笔记·后端·面试·职场和发展·golang·go
捕鲸叉3 小时前
QT自定义工具条渐变背景颜色一例
开发语言·前端·c++·qt
想要入门的程序猿3 小时前
Qt菜单栏、工具栏、状态栏(右键)
开发语言·数据库·qt
Elena_Lucky_baby3 小时前
在Vue3项目中使用svg-sprite-loader
开发语言·前端·javascript
土豆凌凌七3 小时前
GO随想:GO的并发等待
开发语言·后端·golang
AI向前看4 小时前
C语言的数据结构
开发语言·后端·golang