PHP自学---黑马程序员笔记【持续更新】

视频:https://www.bilibili.com/video/BV18x411H7qD?p=3

基础

Web分为两类:静态网站和动态网站。流程:浏览器发起访问->DNS解析域名->服务器电脑->服务软件

1、静态网站访问原理:

在这里插入图片描述

必备工具:1、有两台电脑,PC(个人电脑),里面需要有浏览器;另外一台为服务器(需要有服务软件,假设为APACHE),软件没有数据,故需在里面添加文件夹(准备访问的文件/网页)2、下面蓝线代表两个在同一个互联网下。

访问流程:1、在浏览器中需输入URL(uniformed resource location,统一资源定位,即互联网的绝对路径);2、第一部需要经过URL的解析(DNS,DNS内部包含本地DNS与网络DNS,,访问本地DNS无需通过网络,可提高效率。如果本地DNS无法转化IP,就需要网络DNS)。3、DNS将转换后的IP地址返回给浏览器。4、浏览器通过IP地址找到服务器。5、(虽然找到了服务器,但服务器里面资源很多,如何找自己想要的APACH?)这就需要利用端口,APACHE的端口为80。6、访问APACHE后,即可找到要访问的内容(IP地址后的/index.html也称为URI(uniformed resource identify,统一资源标志。目标机器上相对某个文件夹的相对路径,,,注/即为根目录,相对根目录所以其为相对路径)).7、Apache根据URI读取文件,读取文件的内容(注意只是读取)。8、Apache读取文件后,返回结果。9、浏览器看之前,需要经过浏览器解析,才可展示给用户。(所有人访问的时候,都访问的一样的index文件,若要改变显示的信息,就需要改变index,比较麻烦)

2、动态网站访问

在这里插入图片描述

区别:相对静态网站访问多了几个步骤:需要服务器端解析;需要数据库

在访问内容时,Apache不能识别PHP(只能识别html),需通过PHP引擎读取PHP代码。读取PHP代码之后需要进行解析,解析过程中可能需要数据库。PHP引擎通过数据库,找到内容以后再返回给Apache。(注意,PHP引擎得到的内容是PHP代码,但交给Apache的是HTML内容,,,因为浏览器只能解析html文件)

3、C/S、B/S

软件设计结构:C/S、B/S

C/S:Client客户端/Server服务端,用户需要安装客户端产品才能访问服务器,且只能访问一种软件(自己的)

B/S:Browser浏览器/Server服务端,用户只需要安装浏览器,就可以访问所有的服务器(B/S架构服务)。

4、MySQL访问流程

Mysql是一款C/S架构的软件,需要通过客户端来访问服务端

**运行:**1、启用MySQL客户端:mysqi.exe

2、mysql.exe通过cmd运行(安装配置环境变量后可这样运行)

**操作:**由于qq服务器不在自己的电脑(即客户端与服务器可分离),故MySQL客户端访问服务器需进行寻找匹配:连接认证

a、连接:IP端口和确认。。。如果是本地,均可省略

命令:-h 主机地址 -hlocalhost(或IP) localhost是主机名 -P 端口 -P3306(MySQL服务器的端口默认是3306)

b、认证:通过用户名和密码进入服务器。

-u 用户名 -uroot(不可省略,匿名用户除外) -p 密码 -proot

退出命令行:\q

**注意:**通常连接认证的时候不建议密码明文,可在输入-p之后回车,系统会再次让输入密码,此时为密文。

5、PHP连接MySQL数据库

PHP本身不具备操作MySQL数据库的能力,需要借助MySQL扩展来实现。

1、PHP加载MySQL扩展:php.ini文件中。(不要用记事本打开)

2、PHP中所有扩展都是在ext的文件夹中,需要指定扩展所在路径:extension_dir。

3、php.ini已经被Apache重载,故需要重启才可。

6、配置虚拟主机

一台服务器若只能部署一个网站,则非常浪费。故需通过其他渠道实现一台主机上部署多个网站。

**虚拟主机:**Virtual machine,并不存在的主机,但可提供真实主机所实现的功能。虚拟主机是将计算机中不同的文件夹进行不同的命名,然后可实现让服务器(Apache)根据用户的需求从不同的文件夹(网站)中读取不同的内容。

**分类:**在Apache中,可将虚拟主机划分为两类

1、基于IP的虚拟主机,一台电脑上有多个IP,每个IP对应一个网站。

原理:电脑默认只有一个IP,因为通常只有一个网卡,但有的电脑可配置多个网卡,每个网卡可绑定一个IP地址。

2、基于域名的虚拟主机:一台主机只有一个IP,但IP下课制作多个网站,但需给每个网站不同的名字。

基础语法

初步语法

PHP是一种运行在服务器端的脚本语言,可以嵌入到HTML中。(HTML是通过浏览器解析,PHP是通过PHP引擎解析,那么嵌入到里面以后如何区分什么时候通过什么来解析?)

PHP代码标记:可通过多种标记来区分PHP脚本

ASP标记 <% php 代码 %>; 短标记 <? Php 代码 ?> 以上两种基本弃用,如使用,需在配置文件中开启

脚本标记 :也不经常用

<script language='php'>
	echo 'hello world';
</script>

标准标记:

<html>
	<body>
		<?php
			echo 'hello world!';
		?>
	</body>
</html>

**PHP注释:*行注释://(双斜杠)或# 块注释:/ */

PHP语句分隔符:

1、在PHP中,代码以行为单位,系统需要通过判断行的结束,通常都用;表示结束。

注注注:PHP中标记结束符?>有自带语句结束符的效果,最后一行PHP代码可以没有语句结束符。(最好不使用结束符)

2、PHP中代码的书写并不是全嵌入到HTML中,而是单独存在,所以可以不用标记结束符?>

变量

1、变量是用来存储数据的; 2、变量是存在名字的;

3、变量是通过名字访问数据的; 4、变量的数据是可以改变的。

变量的使用

1、定义:在系统中增加对应的变量名字(在内存中开发一块地)

2、赋值:将数据赋值给变量(在定义时直接初始化)

3、可通过变量名访问数据

4、变量可从内存中删除

// 定义时不需要关键字,但必须使用$符号
$var1;
$var2 = 1;
echo $var2;   // 访问变量,通过变量名找到数据,并显示
$var2 = 2;        // 修改变量
echo '<hr/>',$var2;    // hr/“ 为下划线,分隔符
unset($var2); // 删除变量,从内存中剔除 
echo $var2;   // 此时会报错,因为不存在变量
变量命名规则

1、变量名字必须以"$"开头;

2、变量名可由数字、字母、下划线命名,但必须以字母和下划线开头

3、允许中文变量;

预定义变量

即提前定义的变量,由系统定义的变量,存储许多要用到的数据(预定义变量都是数组)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7Fg5S3T-1601175812704)(C:\Users\a\AppData\Roaming\Typora\typora-user-images\image-20200727081937045.png)]

可变变量

如果一个变量保存的值刚好是另外一个变量的名字,则可直接通过访问一个变量得到另外一个变量的值:但需在变量前多加一个$符号

$a = 'b';    // a变量的内容正好是b变量的名称,故称a为可变变量
$b = 'bb';
echo $$a;    // 使用时需加一个$符号
变量传值

将一个变量赋值给另一个变量:值传递、引用传递

值传递:将变量保存的值复制一份,并将该值给另外一个变量保存(两个变量无关系)

引用传递:将变量保存值所在的内存地址传递给另外一个变量,两个变量同指一块内存(名字不一样而已)。

分区

在这里插入图片描述

注:c++中,栈区由编译器自动释放,存储局部变量和函数参数;代码区存放函数的二进制代码,由操作系统管理;全局区存放全局变量、静态变量、常量;堆区由程序员分配释放。

值传递
// 值传递
<?php
 
// 2.1 执行此行,在栈区开辟一块内存存储$a,在数据段中开辟一块内存保存值1。然后将1所在位置赋值给a变量
$a = 1;   
// 2.2 栈区开辟存储$b;发现是赋值运算,故会取出$a的值,
// 并在数据段重新开辟一块内存并保存,且再把新开辟地址赋值给栈区的变量b
$b = $a;   // 值传递
// 2.3 执行该行
$b = 2;
echo $a,$b;

讲解运行步骤:

1、代码装载:从脚本文件中将代码读取出来,进行编译,将编译结果存放到代码段(二进制)。

2、代码执行:从代码段中一行一行执行代码。

3、脚本执行结束:系统会回收所有内存(栈区、代码区):因为数据段与栈区有关系,回收栈后,数据段的内容无意义,相当于回收。

在这里插入图片描述

引用传递
// 引用传递
<?php

// 2.1 执行此行,在栈区开辟一块内存存储$a,在数据段中开辟一块内存保存值1。然后将1所在位置赋值给a变量
$a = 1;   
// 2.2 栈区开辟存储$b;发现是引用运算,故会取出$a的地址,并将该地址给栈区的变量b
$b = $a;   // 值传递
// 2.3 执行该行
$b = 2;
echo $a,$b;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4IklBH0-1601175812706)(C:\Users\a\AppData\Roaming\Typora\typora-user-images\image-20200727091111294.png)]

常量

常量与变量一样,均是用来保存数据的。

常量的基本概念

const/constant:是在程序运行中,不可改变的量(数据);常量一旦定义,通常不可更改。

常量定义的形式
定义方式

1、使用定义常量的函数:define(‘常量名’,常量值)——类似于c++的 #define

2、const

<?php
// 使用函数定义常量
define('PI',3.1415);   // 注意此处与c++不同,#define 为预处理命令,宏定义,无需加;。。
// 使用const关键字定义
const PI1 = 3;

// 定义特殊常量
define('^-^','smile');
// const ^-^   // 报错

// 访问常量
echo PI1;
// echo ^-^   // 报错
constant('^-^');  // 特殊常量的访问

// 系统常量
echo '<hr/>',PHP_VERSION,'<br/>',PHP_INI_SIZE,'<br/>',PHP_INI_MAX;   // 有符号整形

// 魔术常量
echo '<hr/>',__DIR__,'<br/>',__FILE__,'<br/>',__LINE__; 
echo __LINE__;  // 输出的行数会变
常量命名规则:

1、常量不需要使用"$"符号,一旦使用被认为是变量

2、变量名可由数字、字母、下划线命名,但必须以字母和下划线开头(const定义)

3、常量的名字通常是以大写字母为主(与变量以示区别)

4、变量命名的规则比变量要松散,可以使用一些特殊字符(define函数)

5、变量通常不区分大小写,但可以区分(define函数的第三个参数)

系统常量

魔术常量:由双下划线+常量名+双下划线组成,其值会随着环境变化而变化,用户无法改变。

在这里插入图片描述

数据类型

数据类型:data type,在PHP中指的是数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型。

PHP八大数据类型

在PHP中将数据分为三大类八小类:

简单(基本)数据类型:4个小类

  • 整性:int/integer,系统分配4个字节存储,表示整数类型(在整数范围之内)
  • 浮点型:float/double,系统分配8个字节存储,表示小数或者整性存不下的整数
  • 字符串型:string。系统根据实际长度分配,表示字符串(引号)

复合数据类型:2个小类

  • 对象类型:object,存放对象(面向对象)
  • 数组类型:array,存储多个数据(一次性)

特殊数据类型:2个小类

  • 资源类型:resource,存放资源数据(PHP外部数据,如数据库,文件)
  • 空类型:NULL,只有一个值就是NULL(不能运算)
类型转换

很多情况需要指定数据类型,需要将外部数据类型(当前PHP获得的数据)转换成目标数据类型。

两种转化方式:

1、自动转化:系统根据自己的需求判断,自己转化(用的较多、但效率较低)。

2、强制转换(手动):在变量之前增加一个(),并在括号里面写上对于的类型,其中NULL特殊,需用unset。

转换说明:

1、以字母开头的字符串,永远为0;

2、以数字开头的字符串,取到碰到字符串为止。(不会同时包含两个小数点)

<?php
// 数据类型
// 创建数据
$a = 'abcd1.1.1';
$b = '1.1.1abc';

// 自动转换。算术运算,系统先转化为数值类型,然后运算
echo $a+$b;  //   结果为1.1(0+1.1)

// 强制转换
echo '<br/>',(float)$a,(float)$b;  // 01.1

// 类型判断
echo '<hr/>';
var_dump(is_int($a));         // bool(FALSE)
var_dump(is_string($a));      // bool(TRUE)

// 获取数据类型
echo '<hr/>';
echo gettype($a);    // string(虽然前面强制转换了,但并未改变本身)

// 设置类型
// var_dump 输出展示展示代码内容,结构与类型。该函数作可以窥探所有内容的类型,以及内部信息
var_dump(settype($b,'int'));    // 先将字符串转换为int型,转换成功返回true,var_dump判断是否为bool型,故显示                                 bool(true)
echo gettype($b),$b;     // interger1
整数类型
<?php

/*
十进制转换二进制----->除以2
10  1010  注:不管结果如何,均需补足32位:00000000 00000000 00000000 00001010
*/

// php中提供了很多函数进行转换:
// Decbin():十进制转二进制
var_dump(decbin(107));     // 结果:string(7) "1101011"
// 同理,还有Decoct():十进制转八进制
// Dechex():十进制转十六进制
// Bindec():二进制转十进制

*/
浮点数类型

问:为什么浮点数和整型均占用四个字节,为什么比整型表示的范围大?

整型数据的32位均通过*2转化为十进制。而浮点型中,前八位的后七位为指数,所以表示的范围要大。

另,实际使用时,尽量不用浮点型数字做精确判断,且计算机中凡是小数基本上均不准确。

<?php

// 浮点数的定义
$f1 = 1.23;
$f2 = 1.23e10;
$f3 = PHP_INT_MAX+1;   // 若整型超过自身存储的大小之后会自动改为浮点型存储

var_dump($f1,$f2,$f3);
// 结果:float(1.23)float(1.2300000000) float(214748348)

// 浮点数判断
$f4 = 0.7;
$f5 = 2.1;
$f6 = $f5/3;
var_dump($f6 == $f4);      // 结果:bool(false),,因此其不能进行精确判断

运算符

字符串连接符
<?php
$a = 10;
$b = 11;
var_dump($a.$b);
?>

字符串(4)“ 1011”

算术运算符
echo $a + $b;
echo $a - $b;
echo $a * $b;
echo $a / $b;
echo $a % $b;

在这里插入图片描述

比较运算符
$a = 5;
$b = '5';
if($a == $b){
    
    //弱等于
	echo 1;
}
else{
    
    
	echo 3;
}// echo 1
if ($a === $b){
    
    //强等于,类型不相同也不同
	echo 1;
}
else{
    
    
	echo 2;
}//echo 2

数组

数组声明
$arr[] = 1;
$arr[] = 2;
$arr[] = 3;

array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }

$arr = ['name'=>'tom','age'=>'james'];
var_dump($arr['name']);

string(3) “tom”

循环遍历
<?php
$arr = [0=>1,1=>2,2=>3];
for($i=0:$i<count($arr);$i++){
    
    
	echo $i;
}
?>

在这里插入图片描述
foreach
foreach语法格式
foreach(数组名 as 键名变量 => 值变量){
代码块
}

<?php
$arr1 = ['name'=>'Jack',1=>1,'age' => 16,3=>3,'sex'=>'boy'];
print_r($arr);//print_r()打印数组
?>

Array ( [name] => Jack [1] => 1 [age] => 16 [3] => 3 [sex] => boy )

<?php
foreach($arr1 as $key => $value)
{
    
    
	echo $value;
}
?>
二维数组
$arr = [
	'friend' => ['name1'=> 'tom','name2'=>'alice','name3'=>'jack']
	'languages' => ['name1'=>'chinese','name2'=>'English','name3'=>'Chinese']
];
foreach($arr as $key => $value){
    
    
	echo $key.' is ';
	foreach($value as $key => $value){
    
    
		echo $value;
	}
	echo '<br/>';
}

friend is tomalicejack
languages is chineseEnglishChinese

猜你喜欢

转载自blog.csdn.net/Luminous_song/article/details/108823883