学习一门新的计算机语言,对于基础基础不能丢三落四、模凌两可,这是一定要过关的。这对于以后遇到问题,能事半功倍,快人一步。不然会处处碰壁,事倍功半。假如你不是特别优秀的人,那可以选择像我一样,重复再重复吧,加油💪~


一、符号

单引号括,双引号都可以用:

<?php echo "Hi,imooc!";?>
<?php echo 'Hi,imooc!';?>

连接符(.):

<?php echo 'Hi,'.'imooc!';?>

php在这一点比较特殊,其它语言中是用加号(+)来表示的,比如:JavaScirpt、Asp、C。

结尾要加分号:

(;)分号;一定在半角状态下输入。

注释语句:

PHP:// 注释语句
Html:<!--注释语句-->
CSS:/*注释语句*/

注释语句可以在PHP程序的任意位置(但注释语句一定要写在之间)。


二、变量

定义&输出:

$var_name = "苹果";
$n = 10;
var_dump($var_name);
var_dump($n);

命名规则

1.变量名必须以字母下划线 “_”开头,

"$_name"
"$name"
"$name2"
"$9name"×

2.由字母数字“_”汉字组成。
"$_qq"
"$qq308"
"$my_apple"
"$name我等"
"$name*"× (不允许符号)
"$666"× (不允许纯数字)
"$my apple"× (不允许空格)

格式

1.下划线法:$my_apple
2.驼峰命名法:$myApple
3.在PHP中变量名是区分大小写,
“$my_book”
“$my_Book”
代表两个不同的变量。

变量的数据类型

php支持八种原始类型:

1.四种标量类型:

boolean 布尔型

①只有两个值,一个是TRUE,另一个FALSE。即为是或否/真或假。
②不区分大小写, "TRUE" = "true "
③主要用在条件结构。
④用”echo”输出时,“true”则输出“1”,“false”不输出。
所以需要注意变量的类型,“1”可能是整型也可能是true,所以需要var_dump输出一下,
如:https://www.imooc.com/code/745

integer 整型

$data_int = 123;   // 十进制数  ,123
$data_int = -123;    // 一个负数  ,-123
$data_int = 0123;    // 八进制数(等于十进制的 83)  ,83
$data_int = 0x123;    // 十六进制数(等于十进制的 26)  ,291
// 十进制、八进制(数字前“0”)、十六进制(数字前“0x”)。(0是阿拉伯数字0,不是英文字母"欧/o")

float 浮点型(也称double)

$num_float = 1.234;    //小数点  ,1.234
$num_float = 1.2e3;    //科学计数法,小写e  ,1200
$num_float = 7.0E-10;     //科学计数法,大写E ,0.007
// 支持小数点、科学计数法小写的e,大写的E表示。

string (字符串)

“$str_string1 = '我是字符串';”
// 字符和字节一样,所以一共有256种不同字符的可能性。
// 三种方法定义:单引号形式、双引号形式和Heredoc结构形式。

// 单双引号嵌入与转义符“\”
$str_string1 = '甲问:"你在哪里学的PHP?"';
$str_string2 = "乙毫不犹豫地回答:'当然是慕课网咯!'";
$str_string3 = '甲问:\'能告诉我网址吗?\'';
$str_string4 = "乙答道:\"www.imooc.com\"";

// 美元符号标识的变量与单双引号
$love = "I love you!"; 
$string1 = "慕课网,$love";    输出:慕课网,I love you!
$string2 = '慕课网,$love';     输出:慕课网,$love

// Heredoc结构形式,很长的字符串
$string1 = <<<GOD
我有一只小毛驴,我从来也不骑。
有一天我心血来潮,骑着去赶集。
我手里拿着小皮鞭,我心里正得意。
不知怎么哗啦啦啦啦,我摔了一身泥.
GOD;

2.两种符合类型:

array 数组

object 对象

3.特殊类型:

resource 资源

资源是由专门的函数来建立和使用的,

// 例如打开文件、数据连接、图形画布。
$file=fopen("f.txt","r");   //打开文件
$con=mysql_connect("localhost","root","root");  //连接数据库
$img=imagecreate(100,100);//图形画布

// 对资源进行创建、使用和释放
$file_handle = fopen("/data/webroot/resource/php/f.txt","r");
if ($file_handle){
    //接着采用while循环(后面语言结构语句中的循环结构会详细介绍)一行行地读取文件,然后输出每行的文字
    while (!feof($file_handle)) { //判断是否到最后一行
        $line = fgets($file_handle); //读取一行文本
        echo $line; //输出一行文本
        echo "<br />"; //换行
    }
}
fclose($file_handle);//关闭文件

// 任何资源,在不需要的时候应该被及时释放。
// 忘记了释放资源,系统自动启用垃圾回收机制,在页面执行完毕后回收资源,以避免内存被消耗殆尽。

null

NULL是空类型,对大小写不敏感,NULL类型只有一个取值,表示一个变量没有值,
①当被赋值为NULL:var1 = null;/var1 = NULL;
②或者尚未被赋值:var_dump(var2);unset()var2); ③或者被unset():var3 = "节日快乐!";unset($var3);
这三种情况下变量被认为为NULL。

变量占用内存

echo $m1 = memory_get_usage(); 
// 获取当前PHP消耗的内存,结果:624432,
// 在变量中,由于变量占用的空间单元不一样(占的地盘大小不一样),分成几种数据类型。

详见:https://www.imooc.com/code/743


三、常量

常量可以理解为值不变的量(如圆周率);
或者是常量值被定义后,在脚本的其他任何地方都不可以被改变。分为自定义常量和系统常量

自定义常量

根据我们开发的需要,而定义的常量,它通过使用PHP中的函数define()定义。
(注:函数,我们可以理解为一个混凝土搅拌机,亦或是一个筛子,通过入口提供原料,然后出口产出结果,在函数中也允许入口不提供任何数据,出口也允许不返回任何值。)

// define()函数的语法格式为(3个参数):
bool define(string $constant_name, mixed $value[, $case_sensitive = true])
//“constant_name”为必选参数,常量名称,即标志符,常量的命名规则与变量的一致,但是要注意哦,它可不带美元符号哦。
//“value”为必选参数,它是常量的值。
//“case_sensitive”为可选参数,指定是否大小写敏感,设定为true表示不敏感,一般不指定第三个参数的情况下,默认第三个参数的值为false。

注:
 string表示参数类型为字符串类型,
mixed表示参数类型可以接受为多种不同的类型,
case_sensitive = true表示默认为布尔类型TRUE

如:
$p = "PII";
define("PI",3.14);
define($p,3.14);
echo PI;
echo "<br />";
echo PII;

结果:
3.14
3.14

常量的作用

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

此外,使用常量还能提高代码的可维护性。如果由于某些原因,常量的值需要变更时候,我们只需要修改一个地方。例如在做计算中,起初我们取圆周率为3.14,于是很多计算中我们都使用3.14进行计算,当要求计算精度提高,圆周率需要取3.142的时候,我们不得不修改所有使用3.14的代码,倘若代码量比较多时,不仅工作量大,还可能遗漏。

系统常量

系统常量是PHP已经定义好的常量,我们可以直接拿来使用,常见的系统常量有:

echo __FILE__;
// php程序文件名。它可以帮助我们获取"当前文件在服务器的物理位置"。

echo __LINE__;
// PHP程序文件行数。它可以告诉我们,"当前代码在第几行"。

echo PHP_VERSION;
// 当前解析器的版本号。可以提前知道"PHP代码是否可被该PHP解析器解析"。

echo PHP_OS;
// 执行当前PHP版本的操作系统名称。"服务器所用的操作系统名称",可以根据该操作系统优化我们的代码。

常量取值

获取常量值的有两种方法取值。
第一种是使用常量名直接获取值;例如计算圆周率的面积:

define("PI",3.14);
$r=1;
$area = PI*$r*$r; //计算圆的面积

第二种是使用constant()函数。它和直接使用常量名输出的效果是一样的,
但函数可以动态的输出不同的常量,在使用上要灵活、方便,其语法格式如下:

$p="";
//定义圆周率的两种取值
define("PI1",3.14);
define("PI2",3.142);
//定义值的精度
$height = "中";
//根据精度返回常量名,将常量变成了一个可变的常量
if($height == "中"){
    $p = "PI1";
}else if($height == "低"){
	$p = "PI2";
}
$r=1;
echo $p; // 若不使用constant,输出的就是Pi1
$area= constant($p)*$r*$r;
echo $area;

mixed constant(string constant_name)
第一个参数constant_name为要获取常量的名称,也可为存储常量名的变量。
如果成功则返回常量的值,失败则提示错误信息常量没有被定义。
(注:mixed表示函数返回值类型为多种不同的类型,string表示参数类型为字符串类型)

判定常量是否被定义

如果常量被重复定义以后,PHP解析器会发出“Constant XXX already defined”的警告,
提醒我们该常量已经被定义过。在团队开发,或代码量很大的情况下,如何去判定一个常量是否被定义呢?

defined()函数可以帮助我们判断一个常量是否已经定义,其语法格式为:

define("PI1",3.14);
$p = "PI1";
$is1 = defined($p);
$is2 = defined("PI2");
var_dump($is1);
var_dump($is2);
结果:
bool(true)
bool(false)

//其中,赋值给$p目的就是间接来表明PI1已经被定义,所以$is1 = defined(PI1);亦可行。

// define方法是定义一个常量的方法,返回的是该已定义的常量;
// defined方法是判断一个常量是否定义,返回的是一个bool值(true/false)。

bool defined(string constants_name)
它只有参数constant_name,指的是要获取常量的名称,若存在则返回布尔类型true,否则返回布尔类型false; (注:bool表示函数返回值类型为布尔类型)


四、运算符

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

算术运算符:

加法运算、减法运算、乘法运算、除法运算

赋值运算符:

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

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

$a = "学习PHP!";
$b = $a;
$c = &$a;
$a = "我天天在学习PHP!";
echo $b."<br />";
echo $c."<br />";

结果:
学习PHP!
我天天在学习PHP!

比较运算符

三元运算符

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

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

结果:及格

逻辑运算符

1、逻辑与:要求所有人都投票同意,才会通过某协议;
2、逻辑或:只要求一个人投票同意就行;
3、逻辑异或:只能有且只能有一个人投票同意;
4、逻辑非:某个人要反对,但是通过逻辑非,使其反对无效;

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

字符串连接运算符

(1)连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串。

$a = "张先生";
$tip = $a.",欢迎您在慕课网学习PHP!";
echo  $tip."<br />";

结果:
张先生,欢迎您在慕课网学习PHP!

(2)连接赋值运算符(“.=”):它将右边参数附加到左边的参数后。

$b = "东边日出西边雨";	
$b .= ",道是无晴却有晴";
$c = "东边日出西边雨";	
$c = $c.",道是无晴却有晴";
echo  $b."<br />";
echo  $c."<br />";

结果:
东边日出西边雨,道是无晴却有晴
东边日出西边雨,道是无晴却有晴

错误控制运算符

PHP中提供了一个错误控制运算符“@”,对于一些可能会在运行过程中出错的表达式时,我们不希望出错的时候给客户显示错误信息,这样对用户不友好。于是,可以将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉;

如果激活了track_error(这个玩意在php.ini中设置)特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中,此变量在每次出错时都会被覆盖,所以如果想用它的话必须尽早检查。

需要注意的是:错误控制前缀“@”不会屏蔽解析错误的信息,不能把它放在函数或类的定义之前,也不能用于条件结构例如if和foreach等。

$conn = @mysql_connect("localhost","username","password");
// 这样就不会报错并打印出来

取整函数

ceil() 函数向上舍入为最接近的整数。

echo(ceil(0.60);
echo(ceil(0.40);
echo(ceil(5);
echo(ceil(5.1);
echo(ceil(-5.1);
echo(ceil(-5.9));

输出:
1
1
5
6
-5
-5


五、顺序结构

顺序结构就像一条直线,按着顺序一直往下执行。我们编写的代码默认都是按照顺序结构执行的。

条件结构:

if…else…

if(条件){
     //分配服务器干的任务A
}else{
     //分配服务器干的任务B
}

if…else if…

if(条件一){
     //分配服务器干的任务A
}else if(条件二){
     //分配服务器干的任务B
}

if…else if…else…

if(条件一){
     //分配服务器干的任务A
}else if(条件二){
     //分配服务器干的任务B
}else{
     //分配服务器干的任务C
}

当两个条件对立时用if…else,当两个条件不存在对立关系时用if…else if…

switch…case…

switch (条件)
{
case 条件值一:
  //任务一
  break; 
case 条件值二:
  //任务二
  break;
default:
  //默认任务
}

switch…case…中的break:
break的作用是结束switch,亦可以避免冗长的 “if..else if..else”代码块。


//A例子
$num = 2;
$sum  = 10; 
switch($num){
    case 1:
		$sum = $sum  + 10;
		break;
	case 2:
		$sum = $sum  + 10;
		break;
 	case 3:
		$sum = $sum  + 10;
		break;
	default:
		$sum = $sum  + 10;
}
 echo "A例子的值是:".$sum."<br />";

 结果:A例子的值是:20
 // 直接查询到num为2,sum加10后即刻break,跳出查找。

//B例子
$num = 2;
$sum  = 10; 
switch($num){
	case 1:
		$sum = $sum  + 10;
	case 2:
		$sum = $sum  + 10;
	case 3:
		$sum = $sum  + 10;
	default:
		$sum = $sum  + 10;
}
 echo "B例子的值是:".$sum."<br />";

 结果:B例子的值是:40
//查询到num为2后,sum加10,因为没break,继续执行case3,加了10,再执行了defailt。 

while循环语句

while(条件){ 
     //执行任务
}

首先判断某个条件是否符合(条件返回值是否为TRUE),
若符合则执行任务,执行完毕任务,再判断条件是否满足要求,符合则重复执行此任务,否则结束任务。

do while循环语句

do{ 
     //执行任务
}while(条件)

首先执行任务(while语句是先判断条件是否成立,再执行任务),执行任务完毕,判断某个条件是否符合(条件返回值是否为TRUE),若符合则再次执行任务,执行完毕任务,继续判定条件。

while与do…while循环语句的区别:
while先判断条件是否成立,后执行循环,do...while先执行一次任务,再判断是否继续执行循环,也就是说do...while至少会执行一次任务。当条件为FALSE时,while中的任务会一次也不执行,do...while中的任务会执行1次。

for循环语句

for(初始化;循环条件;递增项){
      //执行任务
}

for($i = 1,$i<=100;$i++){
    echo "666";
}

for 语句中,“初始化”在循环开始前无条件求值一次,“循环条件”在每次循环开始前求值。如果值为 TRUE,则继续循环,执行循环体语句(执行任务)。如果值为 FALSE,则终止循环。“递增项”在每次循环之后被求值(执行)。其常用于循环执行代码块指定的次数。

foreach循环语句

常用于遍历数组,一般有两种使用方式:不取下标、取下标。


//eg
$students = array(
'2010'=>'令狐冲',
... ...
... ...
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储

(1)只取值,不取下标

 foreach (数组 as 值){
//执行的任务
}

//使用循环结构遍历数组,获取学号和姓名  
foreach($students as  $v)
{ 
    echo $v;//输出(打印)姓名
	echo "<br />";
}

(2)同时取下标和值

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

//使用循环结构遍历数组,获取学号和姓名  
foreach($students as $key =>$v)
{ 
    echo $key.":".$v;//输出(打印)学号:姓名
	echo "<br />";
}
?>

结构嵌套

条件嵌套

if里加if,

if (条件)
{
    if 条件成立时执行的代码;
}
elseif (条件)
{
    elseif 条件成立时执行的代码;
}
else
{
    条件不成立时执行的代码;
}

循环嵌套

常用于遍历二维数组。


 $students = array(
'2010'=>array('令狐冲',"59"),
... ...
... ...
'2019'=>array('宁中则',"90"),
);//10个学生的学号、姓名、分数,用数组存储
 
foreach($students as $key=>$val)
{ //使用循环结构遍历数组,获取学号 
     echo $key; //输出学号
	 echo ":";
	 //循环输出姓名和分数
    foreach($val as $v)
	{
		echo $v; 
	 }
	 echo "<br />";
}

#循环结构与条件结构嵌套

 $students = array(
'2010'=>'令狐冲',
... ...
... ...
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储
$query = '2014';
//使用循环结构遍历数组,获取学号和姓名
foreach($students as $key =>$v)
{ 
    //使用条件结构,判断是否为该学号
	if($key == $query)
	{ 
		echo $v;//输出(打印)姓名
		break;//结束循环(跳出循环)
	}
}

在执行任务时,对于一些特殊的任务进行额外处理。

扩展学习:
PHP进阶篇-字符串操作:http://www.imooc.com/learn/726

来源:慕课网,内容持续更新中...


为什么有了这么完备的“慕课网学习系统”,还要做个复制粘贴呢?
1.这是一个笔记,是慕课课程的提炼,为学精一门语言而开辟的一个学习笔记文章。
2.再好的学习平台,也可能会有结束的一天,所以我现在做的事情,可能可以为优秀的平台在茫茫的互联网长河中留下一点点痕迹。