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

目录

  • 基础
    • 1、静态网站访问原理:
    • 2、动态网站访问
    • 3、C/S、B/S
    • 4、MySQL访问流程
    • 5、PHP连接MySQL数据库
    • 6、配置虚拟主机
  • 基础语法
      • 初步语法
    • 变量
      • 变量的使用
      • 变量命名规则
      • 预定义变量
      • 可变变量
      • 变量传值
        • 分区
        • 值传递
        • 引用传递
    • 常量
      • 常量的基本概念
      • 常量定义的形式
        • 定义方式
        • 常量命名规则:
      • 系统常量
    • 数据类型
      • PHP八大数据类型
      • 类型转换
        • 两种转化方式:
        • 转换说明:
      • 整数类型
      • 浮点数类型
    • 运算符
      • 字符串连接符
      • 算术运算符
      • 比较运算符
    • 数组
      • 数组声明
      • 循环遍历
      • 二维数组

基础

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><?phpecho '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、允许中文变量;

预定义变量

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

可变变量

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

$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;

常量

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

常量的基本概念

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

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

  1. SVN黑马程序员笔记

    一.SVN概述 • SVN全称SubVersion • SVN是近年来崛起的版本管理工具,是CVS的接班人.目前,绝大多数软件公司都使用SVN作为代码版本管理软件. 特点:操作简单,入门容易 支持跨平 ...

  2. Python 黑马程序员 笔记

    目录 计算机组成 什么是计算机? 计算机是由什么组成的? 1. 硬件系统: 2. 软件系统: 3. 计算机是如何处理程序的? 4. 编程语言是什么? 5. 什么是Python? # 计算机组成原理和P ...

  3. 我们是酷毕(苦逼)程序员!--------持续更新。

    一个家伙站在街边的墙角一根接着一个的抽着雪茄.一位女士走过来提醒他说,"嗨,你不知这东西会要了你的命吗?我是说,你没有看到烟盒上醒目的警告吗?!""不必担心," ...

  4. 【JAVA黑马程序员笔记】四 P314到P384(特殊流、多线程编程、网络编程模块、lambda表达式、接口组成更新、方法引用、函数式接口)

    P314-315 字节/符打印流 PrintStream ps = new PrintStream("test.txt");//使用字节输出流的方法ps.write(97);// ...

  5. Linux网络编程——黑马程序员笔记

    01P-复习-Linux网络编程 02P-信号量生产者复习 03P-协议 协议: 一组规则. 04P-7层模型和4层模型及代表协议 分层模型结构: OSI七层模型: 物.数.网.传.会.表.应TCP/ ...

  6. 一、多线程20(黑马程序员笔记-自用)

    文章目录 1.实现多线程 1.1进程和线程[理解] 1.2实现多线程方式一:继承Thread类[应用] 1.3设置和获取线程名称[应用] 1.4线程优先级[应用] 1.5线程控制[应用] 1.6线程的 ...

  7. Git基础学习(黑马程序员笔记)

    Git介绍 Git是目前世界上最先进的分布式版本控制系统 Git安装 官网 Git与Github 两者区别 Git是一个分布式版本库控制系统,简单的说就是一个软件,用于记录一个或若干文件内容变化,以便 ...

  8. 【JAVA黑马程序员笔记】三P233-P312(List、Set、比较器、泛型、Map、File、IO流...)

    P233 数据结构 栈:数据进入栈模型叫做压栈,数据离开栈模型为弹栈.栈是后进先出的模型. 队列:数据从后端进入队列模型的过程叫做入队列,离开队列的过程叫出队列.队列是先进先出的模型. 数组:查询数组 ...

  9. 黑马程序员:Xcode8网盘下载链接及更新简述

    6月14日,苹果公司在WWDC 大会上公布了四大系统watchOS 3,tvOS,macOS Sierra和iOS 10.但既然是开发者大会,就一定会有除系统本身之外,对iOS开发技术上的内容更新.所 ...

最新文章

  1. 用指针的观点来深入理解dup和dup2的用法
  2. python代码画图案-python基本图形绘制
  3. Numpy.array矩阵百分制化(比例化)
  4. Java单例设计模式(实现Java的一个类只有一个对象)
  5. 前端学习(693):for循环案例之求出偶数奇数之和
  6. ATL-CComCreator(CComCoClass的使用)
  7. #define offsetof(TYPE, MEMBER) ((size_t) ((TYPE *)0)-MEMBER)
  8. Tomcat日志文件位置
  9. 宾夕法尼亚在线计算机硕士,申请访谈:宾夕法尼亚大学(Upenn)计算机科学(CS)的录取攻略...
  10. android中使用setVideoURI()播放视频
  11. nexus-3.37.3 报INSTALL4J_JAVA_HOME to point to a suitable JVM
  12. HTC T329手机如何删除系统自带的软件?HTC一键解锁、获取ROOT权限、豌豆荚删除系统软件...
  13. A-priori算法的简单实现
  14. TIOBE编程语言排行榜,使用前二十语言实现HelloWorld程序
  15. Redis Stream
  16. 加载调用本地百度地图资源,附地图下载器及黑龙江省1-16级瓦片地图,加载显示marker
  17. Mac OS命令行清洗硬盘空间
  18. java+磁盘io监控_磁盘IO利用率监控VBS脚本(windows)
  19. linux中mkfs是什么命令,如何在Linux中使用mkfs命令[用于磁盘格式化]
  20. 如何创建oracle数据表空间,oracle创建数据库/表空间

热门文章

  1. Android5.1.1-高通msm8916平台添加Etehrnet。(驱动+上层framworks)
  2. OJ《程序设计基础I 》实验5-一维数组
  3. 51单片机——串口通信详解(STC89C51为例)
  4. 意念控制头环:用脑电波来操控智能家居
  5. VS中更改项目名称(以VS2017为例)
  6. DirectX是什么,出现游戏打不开问题解决方案
  7. java 随机生成不重复的数字_java中生成不重复随机的数字
  8. 用卷积神经网络(CNN)识别文字
  9. Python UTC
  10. iOS 查看Realm数据库表