PHP从零开始——学习笔记(一)

PHP介绍

PHP的强大功能:
1、运行在服务器端:学会了PHP,就可以指挥服务器给你干活,甚至是搞破坏_(千万不能真这么做咯),WEB网站的大部分数据都是存储在服务器端的,PHP就是用来处理这些存储在服务器的数据的(功能强大吧)。

2、跨平台:服务器可以是多种平台的服务器,比如Linux、Windows、Unix,你都可以指挥(不用怕只能指挥一种服务器啦吧)。

3、脚本语言:它是通过编写脚本,也就是一行行的计算机指令(也可以理解为特定的英文单词),来指挥服务器来工作的,因此,在编写PHP的过程其实就是与老外(服务器成老外啦)交流的过程,交流的语言就是PHP。

4、免费:免费使用(天下还真有免费的午餐)。

开始学习

编写PHP代码,写PHP代码很简单,就是一行简单的代码。例如下面这个样子:

<?php
    echo"大家一起来学习PHP!";
?>

还可以写成一行代码。注:单引号和双引号都可以。

<?php echo "大家一起来学习PHP!";?>
<?php echo '大家一起来学习PHP!';?>

效果一样
PHP代码可以像JavaScript一样插在HTML里

<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>php语法</title>
    </head>
    <body>
        <p>
      <?php echo php代码;?>
        </p>
    </body>
</html>

但注意后面的?>是可以省略的。
字符串:在PHP中可以直接通过echo输出字符串。

<?php echo "Hi php!";?>
//还可以这么连接两个字符串
<?php echo "Hi" . "php";?>

PHP里可以用.(英文输入法里的句号也就是——点)来连接两个字符串。还有上面的代码里应该看到了我的注释了,对就是双斜扛//这个是PHP里的注释符。
基础了解后就正式开始知识点

变量

变量是用于存储值的,我们命令服务器去干活的时候,往往需要产生一些数据,需要临时性存放起来,方便取用。我们也可以理解为,变量就像一个购物袋,我们可以用来装苹果、榴莲(当然也可以用来装玫瑰),需要注意的是,一般情况下一个变量只能装一个(不要太贪心)值。然后用一个代码来看看怎么定义变量的:

<?php
   $var = "欢迎来到我的博客:";
   echo $var;
   $var = "https://zxcv0221.github.io";
   echo $var;
?>

可以看出变量名需要用"美金"来标识,变量命名也是有规则的:
摘自慕课网:自学的好地方

可变变量

普通可变变量

一个可变变量获取了一个普通变量的值作为这个可变变量的变量名,就是可以使用两个美元符号,使一个变量成为一个可变变量。比如

<?php
$a= 'hello';
$$a= 'world';
echo "$a ${$a}";
echo "$a $hello";
?>

代码跑出来,打印出两个hello world

可变变量用于数组

讲可变变量用于数组要解决一个问题,就是当写下代码$$a[1]的时候,解析器需要知道我们是想让$a[1]作为一个变量呢还是让$$a作为一个变量并且取出该变量中索引为[1]的值。
解决办法:对于第一种情况写成${$a[1]}即可。第二种情况写成${$a}[1]

数据类型

PHP的数据类型也分为:整型、浮点型、字符串类型、布尔类型等等不同的数据类型所占的“地盘”也不一样。可以通过这样一个函数来查看数据所占空间的大小。

<?php 
echo $m1 = memory_get_usage(); 
echo "<br />";//这是换行符
$var_string="123";
echo $m2 = memory_get_usage()-$m1; 
echo "<br />";
$n=123;
echo $m3 = memory_get_usage()-$m1-$m2; 
echo "<br />";
$f=123.00;
echo $m4 = memory_get_usage()-$m1-$m2-$m3; 
echo "<br />";
?>

在这里插入图片描述
然后第一行是初始化所消耗的内存,下面的话,就是要减去初始化所占的内存就能看出来这个数据所占的内存了。
输出数据类型:

<?php $string = "就是就是";
      var_dump($string);
      echo "<br />";
      $string = 9494;
      var_dump($string);
      echo "<br />"
?>

在这里插入图片描述
布尔类型就是

<?php 
    $man = "男";
	$flag = $man == "男";
	echo $flag;
	echo "<br />";
	var_dump($flag);
?>

在这里插入图片描述
判断是否满足条件的时候,是用“true”表示满足,用“false”表示不满足。注意,当用”echo”指令输出布尔类型时,如果是“true”则输出的是“1”,“false”则什么也不输出。
浮点型

  1. 正常格式输入就可以,
    2.输入小写e或者大写E就可以用科学计数法来
    表示;而+ - 号也不是加减
    在这里插入图片描述
    整型:可以用八进制、十进制、十六进制指定;
    字符串:
    如果需要输出双引号或者单引号怎么办?有两种方法:
    1.单引号里嵌套双引号或者双引号里嵌套单引号。
    2.使用转义字符\
    在这里插入图片描述
    当输出时,引号遇到了美元
<?php 
$love = "I love you!"; 
$string1 = "PHP,$love";
$string2 = 'PHP,$love';
echo $string1;
echo "<br />";
echo $string2;
?>

在这里插入图片描述
总结:
当双引号中包含变量时,变量会与双引号中的内容连接在一起;

当单引号中包含变量时,变量会被当做字符串输出。
输出长字符串比如一首歌或者诗。
首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串。

<?php 
$string1=<<<GOD
我有一只小毛驴,我从来也不骑。
有一天我心血来潮,骑着去赶集。
我手里拿着小皮鞭,我心里正得意。
不知怎么哗啦啦啦啦,我摔了一身泥.
GOD;

echo $string1;
?>

标识符可以随便用,随便一个单词或者字母都可以,保证前后保持一致就OK。结尾的一行除了标识符和;不能有其他的符号,空格也不行。
特殊类型:
NULL(NULL):NULL是空类型,对大小写不敏感,NULL类型只有一个取值,表示一个变量没有值,当被赋值为NULL,或者尚未被赋值,或者被unset(),这三种情况下变量被认为为NULL。

<?php 
 error_reporting(0); //禁止显示PHP警告提示
 $var;
 var_dump($var);
 $var1=null;
 var_dump($var1);
 $var2=NULL;
 var_dump( $var2);
 $var3 = "节日快乐!";
 unset($var3);
 var_dump($var3);
?>

unset()函数可以释放被赋值后的变量。释放后变量就跟没赋值一样。类型就会变成NULL。

常量

常量的定义

什么是常量?常量可以理解为值不变的量(如圆周率);或者是常量值被定义后,在脚本的其他任何地方都不可以被改变。PHP中的常量分为自定义常量和系统常量。
自定义常量:
自定义常量是根据我们开发的需要,而定义的常量,它通过使用PHP中的函数define()定义。

bool define(string $constant_name, mixed $value[, $case_sensitive = true])

它有三个参数,第一个参数“constant_name”为必选参数,常量名称,即标志符,常量的命名规则与变量的一致,但是要注意哦,它可不带美元符号
第二个参数“value”为必选参数,它是常量的值。
第三个参数“case_sensitive”为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。如define("PI",3.14);

常量的作用:

常量主要功效是可以避免重复定义,篡改变量值。在我们进行团队开发时,或者代码量很大的时候,对于一些第一次定义后不改变的量,如果我们使用变量,在不知情的情况下,使用同一变量名时,变量值就会被替换掉,从而会引发服务器执行错误的任务。

<?php
define("PI",3.14);
$r=3;
echo "面积为:".(PI*$r*$r)."<br />";
echo "周长为:".(2*PI*$r)."<br />";
?>

可以重复使用。

特殊的常量——系统常量

系统常量是PHP已经定义好的常量,我们可以直接拿来使用
(1)FILE :php程序文件名。它可以帮助我们获取当前文件在服务器的物理位置。

(2)LINE :PHP程序文件行数。它可以告诉我们,当前代码在第几行。

(3)PHP_VERSION:当前解析器的版本号。它可以告诉我们当前PHP解析器的版本号,我们可以提前知道我们的PHP代码是否可被该PHP解析器解析。

(4)PHP_OS:执行当前PHP版本的操作系统名称。它可以告诉我们服务器所用的操作系统名称,我们可以根据该操作系统优化我们的代码。

1 |<?php
2 |echo __FILE__;
3 |echo "<br />";
4 |echo __LINE__;
5 |echo "<br />";
6 |echo PHP_VERSION;
7 |echo "<br />";
8 |echo PHP_OS;
9 |echo "<br />";
10|?>

Augenstern

常量取值

获取常量值的有两种方法取值。第一种是使用常量名直接获取值

<?php
define("PI",3.14);
$r=1;
$area = PI*$r*$r; 
?>

计算圆的面积。
第二种是使用constant()函数。它和直接使用常量名输出的效果是一样的,但函数可以动态的输出不同的常量,

mixed constant(string constant_name)

(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)
同样是计算圆的面积:

<?php
define("PI",3.14);
$r=1;
$area = constant("PI")*$r*$r;
?>

如何判断一个常量是否被定义

如果常量被重复定义以后,PHP解析器会发出“Constant XXX already defined”的警告,提醒我们该常量已经被定义过。
defined()函数可以帮助我们判断一个常量是否已经定义,其语法格式为:bool defined(string constants_name)
它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型

<?php 
define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1);
var_dump($is2);
?>

运行结果如下:
Augenstern

运算符

PHP运算符一般分为算术运算符、赋值运算符、比较运算符、三元运算符、逻辑运算符、字符串连接运算符、错误控制运算符。
算术运算符:
Augenstern

赋值运算符

PHP的赋值运算符有两种,分别是:

(1)“=”:把右边表达式的值赋给左边的运算数。它将右边表达式值复制一份,交给左边的运算数。换而言之,首先给左边的运算数申请了一块内存,然后把复制的值放到这个内存中。

(2)“&”:引用赋值,意味着两个变量都指向同一个数据。它将使两个变量共享一块内存,如果这个内存存储的数据变了,那么两个变量的值都会发生变化。

<?php 
    $a = "我的博客";
	$b = $a;
	$c = &$a;
	$a = "https://zxcv0221.github.io";
	echo $b."<br />";
	echo $c."<br />";
?>

Augenstern

比较运算符:

Augenstern
示例如下:

<?php  
    $a = 1;
	$b = "1";
	var_dump($a == $b);
	echo "<br />";
	var_dump($a === $b);
	echo "<br />";
	var_dump($a != $b);
	echo "<br />";
	var_dump($a <> $b);
	echo "<br />";
	var_dump($a !== $b);
	echo "<br />";
	var_dump($a < $b);
	echo "<br />";

	$c = 5;
	var_dump($a < $c);
	echo "<br />";
	var_dump($a > $c);
	echo "<br />";
	var_dump($a <= $c);
	echo "<br />";
	var_dump($a >= $c);
	echo "<br />";
	var_dump($a >= $b);
	echo "<br />";
?>

运行结果如下:
Augenstern

三元运算符:

(“?:”)三元运算符也是一个比较运算符,对于表达式(expr1)?(expr2):(expr3),如果expr1的值为true,则此表达式的值为expr2,否则为expr3。看代码就更清楚了:

<?php 
    $a = 78;//成绩
	$b = $a >= 60?"及格":"不及格";
	echo $b;
?>

运行结果当然是及格
逻辑运算符:
逻辑运算符主用是进行逻辑运算的,例如:逻辑与、逻辑或、逻辑异或、逻辑非等,在PHP中常用的逻辑运算符如下表:
Augenstern
我们可以从投票的角度来理解逻辑运算:

1、逻辑与:要求所有人都投票同意,才会通过某协议;

2、逻辑或:只要求一个人投票同意就行;

3、逻辑异或:只能有且只能有一个人投票同意;

4、逻辑非:某个人要反对,但是通过逻辑非,使其反对无效;

“与”和“或”有两种不同形式运算符的原因是它们运算的优先级(就是运算的有限顺序,比如我们小学的时候学习四则运算,加减乘除混合在一起啦,优先计算乘除,再计算加减)不同。

示例:

<?php 
    $a = TRUE; //A同意
	$b = TRUE; //B同意
	$c = FALSE; //C反对
	$d = FALSE; //D反对
	//顺便复习下三元运算符
	echo ($a and $b)?"通过":"不通过";
	echo "<br />";
	echo ($a or $c)?"通过":"不通过";
	echo "<br />";
	echo ($a xor $c xor $d)?"通过":"不通过";
	echo "<br />";
	echo !$c?"通过":"不通过";
	echo "<br />";
	echo ($a && $d)?"通过":"不通过";
	echo "<br />";
	echo $b || $c || $d?"通过":"不通过";
?>

Augenstern

连接运算符

字符串连接运算符是为了将两个字符串进行连接,PHP中提供的字符串连接运算符有:
(1)连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串。
(2)连接赋值运算符(“.=”):它将右边参数附加到左边的参数后。

示例:

<?php 
    $a = "这位大佬";
	$tip = $a.",欢迎您指点我的博客!";
    $b = "我自横刀向天笑";	
    $b .="去留肝胆两昆仑";
	$c = "将进酒";	
    $c = $c."杯莫停!";
	echo  $tip."<br />";
	echo  $b."<br />";
	echo  $c."<br />";
?>

Augenstern

取模运算符

直接看代码:

<?php 
     $maxLine = 4; //每排人数
	 $no = 17;//学生编号
     $line = ceil($no / $maxLine);
	 $row = $no % $maxLine ? $no % $maxLine : $maxLine;
	 echo "编号<b>".$no."</b>的座位在第<b>".$line."</b>排第<b>".$row."</b>个位置";
?>

运行结果:
Augenstern

foreach语句

在PHP中foreach循环语句,常用于遍历数组(下面介绍,这里主要看这个语句的用法),一般有两种使用方式:不取下标、取下标。
(1)只取值,不取下标

<?php
 foreach (数组 as){
//执行的任务
}
?>

(2)同时取下标和值

<?php
foreach (数组 as 下标 =>){
 //执行的任务
}
?>

写个示例:

<?php
$books = array(
'2010'=>'鬼谷子',
'2011'=>'人性的弱点',
'2012'=>'狼道',
'2013'=>'莫非定律',
'2014'=>'山海经',
'2015'=>'红楼梦',
'2016'=>'西游记',
'2017'=>'水浒传',
'2018'=>'三国演义',
'2019'=>'金瓶梅嘿嘿',
);//10本书的编号和书名,用数组存储

//使用循环结构遍历数组,获取编号和书名  
foreach($books as  $v)//foreach($students as $key => $v)只需在这里把代码改成这样即可
{ 
    echo $v;//输出(打印)书名
	echo "<br />";
}
?>

至于数组 ,后面介绍。先看最后几行代码。Augenstern
取下标的自行实现。


说明:我以前使用浏览器编译代码,现在换编译软件了,所以我从现在往后面所学的都会是源码运行,PHP里面浏览器编译和源码还是不一样的,举个栗子:浏览器里面编译,换行符是<br />,而源码里面的换行却是\n与C语言有点相似。

数组

数组就简单介绍一下:
定义一个数组:array()
可以用array()来新建一个数组,它接受任意数量的用逗号分隔的(key)=>(value)

array( key => value
……
)
//key可以是一个整数int,或字符串string
//value可以是任意类型的值。

最后一个数组单元的逗号可以省去
看个定义一个数组的例子:

<?php
$array = array(
    "lxj" => "lalala",
    "wkx" => "xixixi",
);
//两种方法
$array = [
    "lxj" => "lalala",
    "wkx" => "xixix",
];
?>

第二种方法我专门去查了一下,这个PHP官方手册解释的是自PHP 5.4 起可以用这种方法的,短数组定义方法。

关于key

1.包含有合法的整数型字符串会被转换为整型,如“8”,会被存储为8。但是“08”不会被强制转换。因为他不是一个合法的十进制数。
2.浮点数也会被转换成整型。小数点后面的会被舍去。注意是舍去,不是四舍五入,而是全部扔了不要(哈哈,真浪费)。
3.布尔类型的也会被转换成整型,true被存储为1,而false被存储为0.
4.NULL会被转换为空字符串,null实际上会被存储为“ ”。
接着说数组:
如果在定义一个数组时多个单元都使用了同一个key,那么就会只使用最后一个,之前的都会被覆盖,看个代码:

<?php//这个代码同时反映类型强制和覆盖
$array = array(
    1 => "mary",
    "1" => "jack",
    1.5 => "rose",
    true => "lxj"
);
var_dump($array);
?>

结果呢,只会有lxj
Augenstern
PHP数组还可以有混合key的,就是数组里的变量既有整型,也有字符串。代码就不写了。也没什么可举例子的。

数组的访问

通过语法:数组名[key]
没有什么是代码解释不清的。代码上:

<?php
$array = array(
    "lxj" => "Augenstern",
    0258 => 8520
);
var_dump($array["lxj"]);
var_dump($array[0258]);
?>

这个输出的就是
Augenstern
tip:方括号和花括号能在这里互换使用,达到同样的效果。赶紧试一下去。

增加、修改、删除数组里的值

这里用一个代码就能看出怎么玩了:

<?php
$arr = array(
    "lxj" => "Augenstern",
    0258 => 8520,
);
$arr["lxj"] = "zxcv0221";//修改数组值
$arr["wkx"] = "wangkaixin";//增加一个数组值
unset($arr["wkx"]);//删除wkx这个key和其对应的值
unset($arr);//删除整个数组
?>

清晰明了。数组学习暂时到这里。

函数

用户自定义函数

函数如何定义:要定义一个函数,在PHP里面要先加上function关键词
下面看一个伪代码(不能运行)函数的例子:

<?php//这是一段伪代码,为了直观的介绍函数的简单定义而已。
function lxj($var_1, $var_2, $var_3,/*,,,,,,*/)
{
	echo "伪代码\n";
	return ...;
}//此代码不能运行
?>

函数名称自己定义,但是也不是随便,命名规则:有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。
任何有效的PHP代码都有可能出现在函数内部,甚至包含其他函数和类的定义。1.函数无需在调用之前被定义,除非是下面的函数是有条件的被定义。2.当一个函数是有条件被定义时,必须在调用函数之前定义。看个例子:

<?php
$makelizi = true;
lizi();//lizi函数还不能调用,因为它还不存在
lxj();//但是bar函数可以调用,因为bar函数不是有条件的函数。
if($makelizi){
	function lizi()
	{
		echo "lalala\n";
	}
}
//可以调用lizi函数了,因为$makelizi的值为真了。
if($makelizi) lizi();
function lxj()
{
	echo "xixixi\n";
}
?>

这个代码是可以跑的,自己跑一下对比更明显,理解更清楚。
再来一个函数套函数的代码

<?php
function lxj(){
	function wkx(){
		echo "nice,xiongdei\n";
	}
}
//这里不能直接调用wkx函数,因为他还不存在。可以理解为没有被定义。
lxj();
//现在就可以调用wkx函数了,因为lxj函数被执行了,使得wkx函数被定义。
wkx();
?>

介绍都在代码中注释了。PHP中的所有函数都具有全局作用域,可以定义在一个函数之内而在函数外面调用。相反也可以。PHP不支持函数重载,也不可能取消定义或者重定义已经声明过的函数。
注意:函数名是大小与大小写无关的,不过尽量写成一样的,养成一个好习惯。
递归函数:
PHP中还可以调用递归函数,还是来个代码看看

<?php
function lxj($f=1){
	if($f < 20){
		echo "lalala\n";
		lxj($f+1);
	}
}
lxj();
?>

递归函数的调用要注意的是避免调用超过100-200层,因为可能会堆栈崩溃从而使当前脚本终止。无限递归可视为编程错误。

函数的参数

函数的参数可以不填,使其默认参数起作用,也可以传参。
先看个通过引用办法传参的代码:

<?php
function lxj(&$string)
{
	$string .= "或者其他的";
}
$str = "这是一个字符串,";
lxj($str);
echo $str;//输出结果:这是一个字符串,或者其他的[Finished in 0.1s]
?>

或者直接传递参数,覆盖默认值

<?php
function lxj($a=10,$b=20)
{
	echo $a+$b;
}
lxj(20,25);
//运行结果:45[Finished in 0.1s]
?>

先总结到这里,下次接着学习没学完的函数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章